2016-12-02 109 views
1

我想查詢一個MySQL數據庫(版本5.7.15)以從一些座標(40.7542,-73.9961,在我的情況)中檢索300米內的所有位置:MySQL查詢中兩個Spacial Points之間的距離(以米爲單位)

SELECT * 
FROM location 
WHERE st_distance_sphere(latlng, POINT(40.7542, -73.9961)) <= 300 

MySQL documentation

ST_Distance_Sphere(G1,G2 [,半徑])

返回mimimum球面距離在球體上的兩點之間和/或 多點,在中,或者如果任何幾何參數 爲NULL或空,則爲NULL。

不幸的是,查詢還返回是遠離POINT超過300米的點(40.7542,-73.9961),如:

  • POINT(40.7501,-73.9949)(〜470米現實生活)
  • POINT(40.7498,-73.9937)(〜在現實生活中530米)在POINT
+0

點必須通過這種方式設置'POINT(LNG,LAT)' '選擇st_distance_sphere(POINT(-73.9949,40.7501),點(-73.9961 ,40.7542))' 給我們466.9696023582369 - 與預期的一樣 –

+0

@MituhaSergey但爲什麼查詢返回的距離大於300? – grim

+1

,因爲您使用的是不正確的POINT。 例如'選擇st_distance_sphere(POINT(40.7501,-73.9949),POINT(40.7542,-73.9961))' 將返回183.3146597410617 <= 300。 只使用正確的位置ARGS POINT(LNG,LAT),LNG作爲第一個arg,lat - 作爲第二個 –

回答

4

第一個參數必須是LNG,第二 - LAT。

select st_distance_sphere(POINT(-73.9949,40.7501), POINT(-73.9961,40.7542)) 

將返回466.9696023582369,符合市場預期,當然466.9696023582369> 300

0

只是爲了明確爲未來的人(像我一樣):

Mituha謝爾蓋已經awnsered在意見上的問題OP。問題在於OP在使用POINT(lag, lng)時事實上MySQL預計爲POINT(lng, lat)

不確定OP發佈的問題的時候,但今天的官方文檔使它更清楚一點:

幾何參數應當包含指定 (經度,緯度)的點的座標值:

  • 經度和緯度分別是該點的第一個和第二個座標。
  • 兩個座標都是度數。
  • 經度值必須在(-180,180)範圍內,正值在主子午線東部
  • 緯度值必須在[-90,90]範圍內正值在赤道以北。

來源:https://dev.mysql.com/doc/refman/5.7/en/spatial-convenience-functions.html#function_st-distance-sphere

如果您收到 「無效的參數」 的錯誤,那是因爲那可能。嘗試添加WHERE lat between -90 and 90 AND lng between -180 and 180只是爲了安全起見哈哈:)

相關問題