Enlem Boylam iki nöqtə arasında məsafə hesablayın? (Formula Haversina)

Enlem və uzunluq verilən iki bal arasında məsafə necə hesablamaq olar?

Aydın olmaq üçün, kilometrlərlə məsafəni istəyirəm; ballar WGS84 sistemindən istifadə edir və mövcud yanaşmaların nisbi dəqiqliyini başa düşmək istərdim.

761
26 авг. Robin Minto tərəfindən təyin 26 aug. 2008-08-26 15:50 '08 at 15:50 2008-08-26 15:50
@ 37 cavab
  • 1
  • 2

Bu link sizin üçün faydalı ola bilər, məsələn , məsafəni hesablamaq üçün Haverseen formulunun istifadəsini ətraflı təsvir edir .

Məqalələr:

Bu skript [Javascript'də] iki nöqtə arasındakı məsafəni, yəni yerin ən qısa məsafəsini - Haversein Formülünü istifadə edərək hesablayır.

948
26 авг. Cavabın cavabı 26 Avq. 2008-08-26 15:55 '08 at 15:55 2008-08-26 15:55

Layihəmin nöqtələri arasındakı bir çox məsafəni hesablamaq lazım idi, mən də getdim və burada tapdığım kodu optimallaşdırmağa çalışdım. Orta hesabla, müxtəlif brauzerlərdə mənim yeni tətbiqim ən çox təklif olunan cavandan 2 dəfə daha sürətli .

baxa bilərsiniz . 

border=0

Son zamanlarda pitonda eyni işi etmək lazım idi, buna görə də python tətbiqi:

Wiki üzrə Haversine . 

283
07 февр. Cavab Salvador Dali tərəfindən verilir. 07 fevral. 2014-02-07 11:52 '14 at 11:52 AM 2014-02-07 11:52

İşdə C # tətbiqi:

59
19 окт. jaircazarin-old-hesab tərəfindən verilmiş cavab 19 oktyabr 2008-10-19 04:30 '08 saat 04:30 'da 2008-10-19 04:30' da

Burada Haversin formulunun bir Java tətbiqidir.

52
26 сент. Cavab verildi whostolebenfrog 26 Sentyabr. 2012-09-26 14:00 '12 saat 14:00 'də 2012-09-26 14:00' də

Bütün bunlar üçün çox təşəkkür edirəm. Objective-C iPhone tətbiqində aşağıdakı kodu istifadə etdim:

 -(double)kilometresBetweenPlace1:(CLLocationCoordinate2D) place1 andPlace2:(CLLocationCoordinate2D) place2 { MKMapPoint start, finish; start = MKMapPointForCoordinate(place1); finish = MKMapPointForCoordinate(place2); return MKMetersBetweenMapPoints(start, finish) / 1000; } 
40
07 дек. Stephen Watson tərəfindən verilmiş cavab 07 Dek 2010-12-07 16:56 '10 at 16:56 2010-12-07 16:56

Bu çox məqbul bir yaxınlaşdırma verəcək sadə PHP funksiyasıdır (+/-% 1 səhvindən).

Vikipediyanın coğrafi məsafə 

35
24 июня '12 в 17:11 2012-06-24 17:11 cavab 24 iyun 2012-ci il saat 17 : 11-də Tony Cil tərəfindən verilir. 2012-06-24 17:11

Burada mənim iş nümunəsini buraxıram.

Cədvəldən təyin olunmuş nöqtə ilə məsafədə olan bütün nöqtələri (məsələn, 45.20327, uzun: 23.7806) 50 km-dən az, Enlem və boylam ilə, MySQL-də (masa sahələri kod koordinatları və sütun koordinatları)

Kilometrdə bir DISTANCE <50 olan hər bir siyahısı (Yer radiusu 6371 KM):

27
13 марта '12 в 2:37 2012-03-13 02:37 Cavab 13 mart, 2012-ci il tarixdə 2:37 2012-03-13 02:37 tarixində verilir

Digər cavablarda, nin tətbiqi eksik.

İki nöqtə arasındakı məsafəni hesablamaq geosphere paketindən distm funksiyası ilə olduqca sadədir:

 distm(p1, p2, fun = distHaversine) 

burada:

 p1 = longitude/latitude for point(s) p2 = longitude/latitude for point(s) # type of distance calculation fun = distCosine / distHaversine / distVincentySphere / distVincentyEllipsoid 

Yer tamamilə sferik olmadığı üçün, Vincenty'nin ellipsoidlərin forması , məsələn, məsafələri hesablamaq üçün ən yaxşı yoldur. Belə ki, geosphere paketində istifadə edirsiniz:

 distm(p1, p2, fun = distVincentyEllipsoid) 

Əlbəttə ki, geosphere paketindən istifadə etmək lazım deyil, funksiyanı istifadə edərək R bazasında məsafə də hesablaya bilərsiniz:

 hav.dist <- function(long1, lat1, long2, lat2) { R <- 6371 diff.long <- (long2 - long1) diff.lat <- (lat2 - lat1) a <- sin(diff.lat/2)^2 + cos(lat1) * cos(lat2) * sin(diff.long/2)^2 b <- 2 * asin(pmin(1, sqrt(a))) d = R * b return(d) } 
22
16 апр. Cavab Jaap 16 aprel 2014-04-16 00:59 '14 'də 0:59 2014-04-16 00:59

Haversin mütləq yaxşı bir formuldur, ehtimal ki, əksər hallarda, digər cavablar onsuz da daxildir, buna görə mən yer almayacağam. Ancaq qeyd etmək lazımdır ki, hansı formuldan istifadə olunursa olsun (bəli, təkcə bir deyil). Mümkün olan həssaslığın, həmçinin lazımi hesablama müddətinin böyük diapazonu sayəsində. Bir formulun seçilməsi sadə bir sadə cavabdan bir qədər daha düşünülməlidir.

Bu, NASA-dakı bir şəxsdən, variantları müzakirə edərkən gördüyüm ən yaxşı bir mesajdır

http://www.cs.nyu.edu/visual/home/proj/tiger/gisfaq.html

Məsələn, xətləri 100 mil radiusda məsafədə düzəldirsinizsə. Düz bir torpaq formulası Haversendən daha sürətli olacaq.

 HalfPi = 1.5707963; R = 3956;  a = HalfPi - latoriginrad; b = HalfPi - latdestrad; u = a * a + b * b; v = - 2 * a * b * cos(longdestrad - longoriginrad); c = sqrt(abs(u + v)); return R * c; 

Qeyd edək ki, yalnız bir kosinüs və bir kvadrat kök var. Havsersin formuluna görə onlardan 9 nəfəri.

8
04 нояб. Cavab Arturo Hernandez 04 noyabr. 2013-11-04 19:20 '13 at 19:20 2013-11-04 19:20

Hesabınızı hesablamaq üçün toplantıdan CLLocationDistance-də istifadə edə bilərsiniz:

 CLLocation *location1 = [[CLLocation alloc] initWithLatitude:latitude1 longitude:longitude1]; CLLocation *location2 = [[CLLocation alloc] initWithLatitude:latitude2 longitude:longitude2]; [self distanceInMetersFromLocation:location1 toLocation:location2] - (int)distanceInMetersFromLocation:(CLLocation*)location1 toLocation:(CLLocation*)location2 { CLLocationDistance distanceInMeters = [location1 distanceFromLocation:location2]; return distanceInMeters; } 

Sizin vəziyyətinizdə, kilometrlərə ehtiyac varsa, onları 1000-ə bölün.

7
26 июня '13 в 11:43 2013-06-26 11:43 Cavab 26 iyun 2013-cü il saat 11: 43-də André Citryn tərəfindən verilmişdir 2013-06-26 11:43

Mən başqa bir cavab əlavə etmək istəmirəm, amma Google Maps v.3 API sferik geometriyadır (və daha çox). WGS84'yi ondalık dərəcəyə çevirdikdən sonra bunu edə bilərsiniz:

 <script src="http://maps.google.com/maps/api/js?sensor=false type="text/javascript"></script> distance = google.maps.geometry.spherical.computeDistanceBetween( new google.maps.LatLng(fromLat, fromLng), new google.maps.LatLng(toLat, toLng)); 

Google hesablamalarının dəqiqliyi və ya hansı model istifadə olunduğuna dair heç bir söz yoxdur (baxmayaraq ki, "geoid" deyil, "külək" deyir. Yeri gəlmişkən, "düz xətt" məsafəsi dünyanın səthində gedərkən açıq-aşkar fərqlənəcəkdir görünür, hamıya görünür.

6
20 июля '14 в 3:10 2014-07-20 03:10 cavab 20 iyul 'da Steven Kristenson tərəfindən verilir 3:10 2014-07-20 03:10

Sadə bir həll və daha doğru bir şey ola bilər: Yerin ətrafı ekvatorda 40.000 km, təxminən 37.000 - Greenwich dövrü (və ya hər hansı bir boylam) görə. Beləliklə:

 pythagoras = function (lat1, lon1, lat2, lon2) { function sqr(x) {return x * x;} function cosDeg(x) {return Math.cos(x * Math.PI / 180.0);} var earthCyclePerimeter = 40000000.0 * cosDeg((lat1 + lat2) / 2.0); var dx = (lon1 - lon2) * earthCyclePerimeter / 360.0; var dy = 37000000.0 * (lat1 - lat2) / 360.0; return Math.sqrt(sqr(dx) + sqr(dy)); }; 

Mən özüm də elə bir elipsoid olduğunu söyləyib, kosinos dəyişiklikləri ilə çarpılmaq üçün lazım olan yarıçap olduğunu söylədiyinə görə, yaxşı bir şəkildə tənzimlənməlidir. Amma bu bir az daha doğrudur. Google Maps ilə müqayisədə bu səhvini çox azaldardı.

5
10 февр. Cavab 10 Mayda Meyman tərəfindən verilir. 2016-02-10 10:26 '16 saat 10:26 'da 2016-02-10 10:26

Əksinə, bu, nə qədər dəqiq olmaq istəyirsən, nə dəqiq və uzunluğun müəyyənləşdirilməsindən asılıdır. Çox, çox təxminən kiçik külək tətiyi edirsiniz, amma yerin bir sahə olmadığını düzəldirsinizsə, formullar bunu çətinləşdirir.

5
26 авг. Cavab Pete Kirkham 26 avqustda verilir. 2008-08-26 15:59 '08 at 15:59 2008-08-26 15:59

Yuxarıdakı bütün cavablar yerin külək olduğunu göstərir. Lakin, dəqiq bir yaxınlaşdırma yastı sferoid üçün olardı.

 a= 6378.137#equitorial radius in km b= 6356.752#polar radius in km def Distance(lat1, lons1, lat2, lons2): lat1=math.radians(lat1) lons1=math.radians(lons1) R1=(((((a**2)*math.cos(lat1))**2)+(((b**2)*math.sin(lat1))**2))/((a*math.cos(lat1))**2+(b*math.sin(lat1))**2))**0.5 #radius of earth at lat1 x1=R*math.cos(lat1)*math.cos(lons1) y1=R*math.cos(lat1)*math.sin(lons1) z1=R*math.sin(lat1) lat2=math.radians(lat2) lons2=math.radians(lons2) R1=(((((a**2)*math.cos(lat2))**2)+(((b**2)*math.sin(lat2))**2))/((a*math.cos(lat2))**2+(b*math.sin(lat2))**2))**0.5 #radius of earth at lat2 x2=R*math.cos(lat2)*math.cos(lons2) y2=R*math.cos(lat2)*math.sin(lons2) z2=R*math.sin(lat2) return ((x1-x2)**2+(y1-y2)**2+(z1-z2)**2)**0.5 
5
17 июня '16 в 1:25 2016-06-17 01:25 Cavab Keerthana Gopalakrishnan tərəfindən 17 iyun '16 'da 1:25 2016-06-17 01:25' də verilir

Burada Havsers yazı formulunun tətbiqi

 static getDistanceFromLatLonInKm(lat1: number, lon1: number, lat2: number, lon2: number): number { var deg2Rad = deg => { return deg * Math.PI / 180; } var r = 6371; // Radius of the earth in km var dLat = deg2Rad(lat2 - lat1); var dLon = deg2Rad(lon2 - lon1); var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(deg2Rad(lat1)) * Math.cos(deg2Rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var d = r * c; // Distance in km return d; } 
4
12 дек. cavab 12 dekabr Cümə günü verilir. 2015-12-12 18:59 '15 'də saat 18:59 ' da

Python mənşəli təcrübəsi bitişik Amerika Birləşmiş Ştatlarının mərkəzidir.

 from haversine import haversine origin = (39.50, 98.35) paris = (48.8567, 2.3508) haversine(origin, paris, miles=True) 

Kiloqrama bir cavab almaq üçün sadəcə km = yan vurun.

4
14 июля '15 в 8:52 2015-07-14 08:52 cavab 14 iyul 15: 15-da verilir

Bir sahədəki iki nöqtə arasındakı məsafəni hesablamaq üçün Böyük Circle hesablamasını yerinə yetirməlisiniz.

Siz məsafələrinizi düz bir səthə iki dəfə yoxlamaq lazımdırsa, MapTools-da xəritə proqnozuna kömək edə biləcək bir sıra C / C ++ kitabxanaları var. Bunun üçün fərqli koordinat sistemlərinin bir proyeksiya xəttinə ehtiyacınız var.

Siz həmçinin MapWindow'u xalları görselleştirmek üçün faydalı bir vasitə tapa bilərsiniz. Ayrıca, açıq mənbə kimi, bu əsas açıq mənbə proyeksiya kitabxanası kimi görünən proj.dll kitabxanasının istifadəsi üçün faydalı bir kılavuzdur.

3
19 окт. Cavab 18443 19 oktyabr tərəfindən verilir . 2008-10-19 04:30 '08 saat 04:30 'da 2008-10-19 04:30' da

Bu skript [PHP-də] iki xal arasındakı məsafə hesablayır.

 public static function getDistanceOfTwoPoints($source, $dest, $unit='K') { $lat1 = $source[0]; $lon1 = $source[1]; $lat2 = $dest[0]; $lon2 = $dest[1]; $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "M") { return ($miles * 1.609344 * 1000); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } } 
3
21 февр. cavabını Er.Subhendu Kumar Pati 21 fevral. 2017-02-21 10:04 '17 at 10:04 2017-02-21 10:04

Cavabın qəbul edilməsi tətbiq olunduğu təqdirdə, birinin ehtiyacı olduğu halda Java-ya ötürülür.

 package com.project529.garage.util;  private static double EARTH_RADIUS = 6371;  public double getDistanceBetween(double lat1, double lon1, double lat2, double lon2) { double dLat = toRadians(lat2 - lat1); double dLon = toRadians(lon2 - lon1); double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(toRadians(lat1)) * Math.cos(toRadians(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); double d = EARTH_RADIUS * c; return d; } public double toRadians(double degrees) { return degrees * (Math.PI / 180); } 
2
12 окт. Eddnav 12 Oktyabr verildi 2015-10-12 23:59 '15, saat 11:59 ' da, 2015-10-12 23:59

Formulanı sadələşdirməklə, hesablamanı azaldıb.

Burada Ruby'də:

 include Math earth_radius_mi = 3959 radians = lambda { |deg| deg * PI / 180 } coord_radians = lambda { |c| { :lat => radians[c[:lat]], :lng => radians[c[:lng]] } } # from/to = { :lat => (latitude_in_degrees), :lng => (longitude_in_degrees) } def haversine_distance(from, to) from, to = coord_radians[from], coord_radians[to] cosines_product = cos(to[:lat]) * cos(from[:lat]) * cos(from[:lng] - to[:lng]) sines_product = sin(to[:lat]) * sin(from[:lat]) return earth_radius_mi * acos(cosines_product + sines_product) end 
2
13 июня '13 в 5:16 2013-06-13 05:16 Cavab Kache tərəfindən 13 İyun 2013 tarixində 5:16 2013-06-13 05:16 tarixində verilir

Mysql-də aşağıdakı funksiyanı istifadə edin: POINT(LONG,LAT)

 CREATE FUNCTION `distance`(a POINT, b POINT) RETURNS double DETERMINISTIC BEGIN RETURN GLength( LineString(( PointFromWKB(a)), (PointFromWKB(b)))) * 100000; -- To Make the distance in meters END; 
1
28 мая '14 в 11:59 2014-05-28 11:59 Cavab şanavasketə 28 may, 14 saat 11:59 da verilir 2014-05-28 11:59

Bəzi axtarışlardan sonra ondalık dərəcələrdə məsafə hesablamaq üçün mənim java tətbiq edir. Dünya daxilində orta radiusdan istifadə etdim (Vikipediyadan) km. Mil keçmək istəyirsənsə, dünyada yarım radiusdan istifadə edin.

 public static double distanceLatLong2(double lat1, double lng1, double lat2, double lng2) { double earthRadius = 6371.0d; // KM: use mile here if you want mile result double dLat = toRadian(lat2 - lat1); double dLng = toRadian(lng2 - lng1); double a = Math.pow(Math.sin(dLat/2), 2) + Math.cos(toRadian(lat1)) * Math.cos(toRadian(lat2)) * Math.pow(Math.sin(dLng/2), 2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); return earthRadius * c; // returns result kilometers } public static double toRadian(double degrees) { return (degrees * Math.PI) / 180.0d; } 
1
12 февр. cavab 12 fevralda user2881716 tərəfindən verilir. 2014-02-12 23:52 '14 at 11:52 pm 2014-02-12 23:52

Bildiyiniz kimi, dəqiq bir hesablama yerin ideal bir sahə olmadığını nəzərə almalıdır. Burada təklif olunan müxtəlif alqoritmlərin bir neçə müqayisəsi:

 geoDistance(50,5,58,3) Haversine: 899 km Maymenn: 833 km Keerthana: 897 km google.maps.geometry.spherical.computeDistanceBetween(): 900 km geoDistance(50,5,-58,-3) Haversine: 12030 km Maymenn: 11135 km Keerthana: 10310 km google.maps.geometry.spherical.computeDistanceBetween(): 12044 km geoDistance(.05,.005,.058,.003) Haversine: 0.9169 km Maymenn: 0.851723 km Keerthana: 0.917964 km google.maps.geometry.spherical.computeDistanceBetween(): 0.917964 km geoDistance(.05,80,.058,80.3) Haversine: 33.37 km Maymenn: 33.34 km Keerthana: 33.40767 km google.maps.geometry.spherical.computeDistanceBetween(): 33.40770 km 

Qısa məsafələrdə, Keerthana alqoritmi Google Maps alqoritmi ilə üst-üstə düşür. Google Maps hər hansı bir sadə alqoritmi yerinə yetirmək kimi görünmür və burada ən doğru üsul ola bilər.

Hər halda, burada Javascript-da Keerthana alqoritminin tətbiqi:

 function geoDistance(lat1, lng1, lat2, lng2){ const a = 6378.137; // equitorial radius in km const b = 6356.752; // polar radius in km var sq = x => (x*x); var sqr = x => Math.sqrt(x); var cos = x => Math.cos(x); var sin = x => Math.sin(x); var radius = lat => sqr((sq(a*a*cos(lat))+sq(b*b*sin(lat)))/(sq(a*cos(lat))+sq(b*sin(lat)))); lat1 = lat1 * Math.PI / 180; lng1 = lng1 * Math.PI / 180; lat2 = lat2 * Math.PI / 180; lng2 = lng2 * Math.PI / 180; var R1 = radius(lat1); var x1 = R1*cos(lat1)*cos(lng1); var y1 = R1*cos(lat1)*sin(lng1); var z1 = R1*sin(lat1); var R2 = radius(lat2); var x2 = R2*cos(lat2)*cos(lng2); var y2 = R2*cos(lat2)*sin(lng2); var z2 = R2*sin(lat2); return sqr(sq(x1-x2)+sq(y1-y2)+sq(z1-z2)); } 
1
19 апр. Cavab Chong Lip Phang 19 Aprel verilir. 2018-04-19 11:42 '18 saat 11:42 'də 2018-19.11
 function getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2,units) { var R = 6371; // Radius of the earth in km var dLat = deg2rad(lat2-lat1); // deg2rad below var dLon = deg2rad(lon2-lon1); var a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon/2) * Math.sin(dLon/2) ; var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); var d = R * c; var miles = d / 1.609344; if ( units == 'km' ) { return d; } else { return miles; }} 

Chuck həlli, mil üçün etibarlıdır.

1
08 нояб. Cavab MPaulo tərəfindən verilir 08 noyabr. 2013-11-08 09:34 '13 saat 09:34 'da 2013-11-08 09:34
 function getDistanceFromLatLonInKm(position1, position2) { "use strict"; var deg2rad = function (deg) { return deg * (Math.PI / 180); }, R = 6371, dLat = deg2rad(position2.lat - position1.lat), dLng = deg2rad(position2.lng - position1.lng), a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(deg2rad(position1.lat)) * Math.cos(deg2rad(position1.lat)) * Math.sin(dLng / 2) * Math.sin(dLng / 2), c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); return R * c; } console.log(getDistanceFromLatLonInKm( {lat: 48.7931459, lng: 1.9483572}, {lat: 48.827167, lng: 2.2459745} )); 
1
29 апр. Cavab C Cavab 29 Apr 2015-04-29 17:22 '15 at 05:22 PM 2015-04-29 17:22

VB.NET-in tətbiq olunması, bu tətbiq siz keçdiyiniz Enum dəyərinə əsasən KM və ya Mil-də nəticə verəcəkdir.

 Public Enum DistanceType Miles KiloMeters End Enum Public Structure Position Public Latitude As Double Public Longitude As Double End Structure Public Class Haversine Public Function Distance(Pos1 As Position, Pos2 As Position, DistType As DistanceType) As Double Dim R As Double = If((DistType = DistanceType.Miles), 3960, 6371) Dim dLat As Double = Me.toRadian(Pos2.Latitude - Pos1.Latitude) Dim dLon As Double = Me.toRadian(Pos2.Longitude - Pos1.Longitude) Dim a As Double = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Cos(Me.toRadian(Pos1.Latitude)) * Math.Cos(Me.toRadian(Pos2.Latitude)) * Math.Sin(dLon / 2) * Math.Sin(dLon / 2) Dim c As Double = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a))) Dim result As Double = R * c Return result End Function Private Function toRadian(val As Double) As Double Return (Math.PI / 180) * val End Function End Class 
1
02 апр. Cavab Taiseer Joudeh tərəfindən verilir 02 Apr. 2013-04-02 11:35 '13 'da 11:35' də 2013-04-02 11:35

PHP ilə məsafəni hesablamaq üçün yaxşı bir nümunə var: http://www.geodatasource.com/developers/php :

  function distance($lat1, $lon1, $lat2, $lon2, $unit) { $theta = $lon1 - $lon2; $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); $dist = acos($dist); $dist = rad2deg($dist); $miles = $dist * 60 * 1.1515; $unit = strtoupper($unit); if ($unit == "K") { return ($miles * 1.609344); } else if ($unit == "N") { return ($miles * 0.8684); } else { return $miles; } } 
1
15 янв. cavab ayalcinkaya yanvar 15 verilir 2013-01-15 04:48 '13 at 4:48 2013-01-15 04:48

burada postgres sql-də bir nümunə (kilometrdə km, 0.8684 ilə 1.609344 versiyasını əvəz edir)

 CREATE OR REPLACE FUNCTION public.geodistance(alat float, alng float, blat float, blng float) RETURNS float AS $BODY$ DECLARE v_distance float; BEGIN v_distance = asin( sqrt( sin(radians(blat-alat)/2)^2 + ( (sin(radians(blng-alng)/2)^2) * cos(radians(alat)) * cos(radians(blat)) ) ) ) * cast('7926.3352' as float) * cast('1.609344' as float) ; RETURN v_distance; END $BODY$ > 
1
21 дек. Cavab 21 dekabrda veriləcək. 2016-12-21 10:34 '16 saat 10:34 'da 2016-12-21 10:34

Səhv var - heç bir 'toRad' metodu

Beləliklə, yuxarıda təsvir edilən Rad metodunun çağırılması proseduru dəyişdi.

 toRad(lat2-lat1) Math.cos(toRad(lat1)) 

və bir üsul əlavə etdi -

 //degrees to radians function toRad(degree) { rad = degree* Math.PI/ 180; return rad; } 
1
28 сент. cavab Avi C 28 sep verilir. 2011-09-28 22:22 '11 saat 22:22 'da 2011-09-28 22:22

Haversine formuluna əsasən Java tətbiqi

  • 1
  • 2