11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/jtsk/converter.rb', line 11
def to_wgs84(x, y)
delta = 5.0
latitude = 49.0
longitude = 14.0
steps = 0.0
loop {
jtsk = self.wgs84_to_jtsk(latitude - delta, longitude - delta)
if(jtsk.x && jtsk.y)
v1 = self.dist_points(jtsk.x, jtsk.y, x, y)
else
v1 = 1e32
end
jtsk = self.wgs84_to_jtsk(latitude - delta, longitude + delta)
if(jtsk.x && jtsk.y)
v2 = self.dist_points(jtsk.x, jtsk.y, x, y)
else
v2 = 1e32
end
jtsk = self.wgs84_to_jtsk(latitude + delta, longitude - delta)
if(jtsk.x && jtsk.y)
v3 = self.dist_points(jtsk.x, jtsk.y, x, y)
else
v3 = 1e32
end
jtsk = self.wgs84_to_jtsk(latitude + delta, longitude + delta)
if(jtsk.x && jtsk.y)
v4 = self.dist_points(jtsk.x, jtsk.y, x, y)
else
v4 = 1e32
end
if ((v1 <= v2) && (v1 <= v3) && (v1 <= v4))
latitude = latitude - delta / 2.0
longitude = longitude - delta / 2.0
end
if ((v2 <= v1) && (v2 <= v3) && (v2 <= v4))
latitude = latitude - delta / 2.0
longitude = longitude + delta / 2.0
end
if ((v3 <= v1) && (v3 <= v2) && (v3 <= v4))
latitude = latitude + delta / 2.0
longitude = longitude - delta / 2.0
end
if ((v4 <= v1) && (v4 <= v2) && (v4 <= v3))
latitude = latitude + delta / 2.0
longitude = longitude + delta / 2.0
end
delta = delta * 0.55;
steps = steps + 4.0;
break if (((delta < 0.00001) || steps > 1000.0));
}
JTSK::Wgs84Result.new(latitude, longitude)
end
|