Ich versuche, eine MySQL-Datenbank (Version 5.7.15) abzufragen, um alle Orte, die sich innerhalb von 300 Metern von einigen Koordinaten befinden (40.7542, -73.9961 in meinem Fall):Abstand in Metern zwischen zwei Spacial Points in MySQL Abfrage
SELECT *
FROM location
WHERE st_distance_sphere(latlng, POINT(40.7542, -73.9961)) <= 300
Von MySQL documentation:
ST_Distance_Sphere (g1, g2 [, radius])
Gibt den mimimum sphärischen Abstand zwischen zwei Punkten und/oder Multipoints auf einer Kugel, in Meter, oder NULL, wenn Geometrie Argument ist NULL oder leer.
Leider ist die Abfrage gibt auch Punkte, die von POINT mehr als 300 Meter entfernt sind (40,7542, -73,9961) wie:
- POINT (40,7501, -73,9949) (~ 470 Meter in Echt Leben)
- POINT (40,7498, -73,9937) (~ 530 Meter im wirklichen Leben)
Punkt muss auf diese Weise 'POINT (lng, lat)' 'select st_distance_sphere (POINT (-73.9949,40.7501) POINT eingestellt werden (-73,9961 , 40.7542)) ' geben Sie uns 466.9696023582369 - wie erwartet –
@MituhaSergey, aber warum ist die Abfrage Entfernungen größer als 300 zurückgeben? – grim
, weil Sie einen falschen POINT verwenden. zum Beispiel 'wählen st_distance_sphere (POINT (40,7501, -73,9949), POINT (40,7542, -73,9961))' kehren 183,3146597410617 <= 300 gerade richtig args Positionen POINT (lng, lat) verwenden, lng als erster arg, lat - als zweiter –