Giriş
"Calculate end point (latitude/longitude) given a starting point, distance, and azimuth" konusu ile ilgili.
Law of Cosines (spherical) cos(b) = sin(a)*sin(c) + cos(a)*cos(c)*cos(B)
Law of Sines (spherical) sin (B)/sin(b) = sin(A)/sin(a) = sin(C)/sin(c)
Bu formülde
- b iki nokta arasındaki açı mesafesi (angular distance in radians)
- a ikinci noktanın kuzey kutbuna göre enlem farkı yani
a = 90 - lat2
- c ilk noktanın kuzey kutbuna göre enlem farkı yani
c = 90 - lat1
- B iki nokta arasındaki boylam farkı yani
B = lon2 - lon1,
Formül şöyle
cos (b) = cos (90 - lat2) * cos (90 - lat1) + sin (90 - lat2) * sin (90 - lat1) * cos (lon2 - lon1)
b'yi elde etmek için
b = arccos ( cos (90 - lat2) * cos (90 - lat1) + sin (90 - lat2) * sin (90 - lat1) * cos (lon2 - lon1) )
Bu formülden elimize angular distance in radians biirmi geçer.
arc length = (radius) *(angular distance in radians)
distance = (Earth Radius) * (angular distance in radians)
b yani (angular distance in radians) = distance / (Earth Radius)
lat2'yi Bulmak
Eğer a'yı bulursak lat2'yi bulmak kolay olur. a'yı bulmak istersek Law of Cosines kullanarak şöyle bir formül elde ediliyor.
a = arccos(cos(b)*cos(c) + sin(c)*sin(b)*cos(azimuth))
a = arccos(cos(b)*cos(90 - lat1) + sin(90 - lat1)*sin(b)*cos(azimuth))
En son olarak şöyle yaparız
lat2 = 90 - a
long2'yi Bulmak
Eğer b'yi bulursak long2'yi bulmak kolay olur. b'yi bulmak istersek Law of Cosines kullanarak şöyle bir formül elde ediliyor.
B = arcsin(sin(b)*sin(azimuth)/sin(a)).
En son olarak şöyle yaparız
lon2 = B + lon1
Örnek
Şöyle yaparız
"Calculate end point (latitude/longitude) given a starting point, distance, and azimuth" konusu ile ilgili.
Law of Cosines (spherical) cos(b) = sin(a)*sin(c) + cos(a)*cos(c)*cos(B)
Law of Sines (spherical) sin (B)/sin(b) = sin(A)/sin(a) = sin(C)/sin(c)
Bu formülde
- b iki nokta arasındaki açı mesafesi (angular distance in radians)
- a ikinci noktanın kuzey kutbuna göre enlem farkı yani
a = 90 - lat2
- c ilk noktanın kuzey kutbuna göre enlem farkı yani
c = 90 - lat1
- B iki nokta arasındaki boylam farkı yani
B = lon2 - lon1,
Formül şöyle
cos (b) = cos (90 - lat2) * cos (90 - lat1) + sin (90 - lat2) * sin (90 - lat1) * cos (lon2 - lon1)
b'yi elde etmek için
b = arccos ( cos (90 - lat2) * cos (90 - lat1) + sin (90 - lat2) * sin (90 - lat1) * cos (lon2 - lon1) )
Bu formülden elimize angular distance in radians biirmi geçer.
arc length = (radius) *(angular distance in radians)
distance = (Earth Radius) * (angular distance in radians)
b yani (angular distance in radians) = distance / (Earth Radius)
lat2'yi Bulmak
Eğer a'yı bulursak lat2'yi bulmak kolay olur. a'yı bulmak istersek Law of Cosines kullanarak şöyle bir formül elde ediliyor.
a = arccos(cos(b)*cos(c) + sin(c)*sin(b)*cos(azimuth))
a = arccos(cos(b)*cos(90 - lat1) + sin(90 - lat1)*sin(b)*cos(azimuth))
En son olarak şöyle yaparız
lat2 = 90 - a
long2'yi Bulmak
Eğer b'yi bulursak long2'yi bulmak kolay olur. b'yi bulmak istersek Law of Cosines kullanarak şöyle bir formül elde ediliyor.
B = arcsin(sin(b)*sin(azimuth)/sin(a)).
En son olarak şöyle yaparız
lon2 = B + lon1
Örnek
Şöyle yaparız
double distanceInMeters = ...; //meters
double latInRadians = ...;
double longInRadians = ...;
double azimuthInRadians = ...;
double RADIUS_EARTH_WGS84_D = 6_378_000.0;
double distanceInRadians = distanceInMeters / RADIUS_EARTH_WGS84_D;
double posLatInRadians =
Mat.asin(
Math.sin(latInRadians) * Math.cos(distanceInRadians )
+
Math.cos(latInRadians) * Math.sin(distanceInRadians ) * Math.cos(azimuthInRadians)
);
double posLongInRadians = longInRadians +
Math.atan(
Math.sin(distanceInRadians ) * Math.sin(azimuthInRadians ) /
Math.cos(latInRadians ) * Math.sin(distanceInRadians)
-
Math.sin(latInRadians ) * Math.sin(distanceInRadians) * Math.cos(azimuthInRadians )
);
Hiç yorum yok:
Yorum Gönder