2011-09-18 82 views
1

我正在一個MySQL/PHP的系統中,我有以下很多(GoogleMap的)多邊形:如何找到附近的一個點的x距離

- 一組緯度,經度的形式(LAT ,lng)存儲爲文本格式:(lat1,lng1)#(lat2,lng2)#(lat3,lng3)等,它基本上是一個在存儲在數據庫中的googlemap實例上繪製的多邊形。

- 存儲在一個字段的表 - 一個點的座標P(高原,加壓液化天然氣),這基本上是其中一個設備進駐

我需要找出從第一個表中的許多多邊形如何點在基本上使用MYSQL的點P距離X公里的範圍內。

我已經遇到過很多Google Map庫,但我打算通過儘可能快的方法來解決這個問題 - 我認爲這是通過MYSQL查詢完成的。

任何人都可以請請擺脫一些關於這個?


我到目前爲止已經諮詢了地理空間查詢的幾個例子 - 並拿出這樣的:

SELECT user_id, latitude, longitude, 
     GeomFromText("POINT(CONCAT_WS(' ',latitude,longitude))") AS point, 
     Contains(GeomFromText('POLYGON(-26.167918065075458 28.10680389404297, 
    - 26.187020810321858 28.091354370117188, -26.199805575765794 28.125,-26.181937320958628 28.150405883789062, -26.160676690299308 28.13220977783203, -26.167918065075458 28.10680389404297)') , 
     GEOMFromText("POINT(CONCAT_WS(' ',latitude,longitude))")) 
    FROM user_location 

但問題是,它顯示了緯度的紀錄:-26.136230,長:28.338850以及多邊形的邊界。任何人都可以請指導?

+0

請注意,地球上的「多邊形」並不真正形成多邊形,它將地球分爲兩部分。哪一個是'內部',哪個是'外部'?如果將Lat-Long視爲笛卡爾座標系,如果多邊形覆蓋N或S極點會發生什麼情況? – Spacedman

回答

0

好吧,這樣做 - 和它的作品 - 可能幫助別人:

SELECT user_id,latitude,longitude, 
    Contains(
      PolyFromText('POLYGON((-26.167918065075458 28.10680389404297, -26.187020810321858 28.091354370117188, -26.199805575765794 28.125,-26.181937320958628 28.150405883789062, -26.160676690299308 28.13220977783203, -26.167918065075458 28.10680389404297))'), 
      PointFromText(concat("POINT(",latitude," ",longitude,")")) 
    ) as contains 
FROM user_location 

=====

雖然我同意專家的觀點,即PostGIS的可能是一個更好的選擇。

2

我不確定是否要計算到多邊形最近角落的距離,多邊形的邊界或它的某個名義中心點。無論哪種方式,我認爲對此的數學解決方案是使用畢達哥拉斯定理來計算點的接近度。

如果您LAT1,lng1和LAT2,lng2以米爲單位我認爲,它們之間的距離是:

SQRT(POW(ABS(lat1 - lat2),2) + POW(ABS(lng1 - lng2),2)) 

使用類似這樣的,你需要一個算法來決定是否要比較你已知lat/lng到多邊形的單箇中心點或其角點(三倍工作!)。

MySQL確實有一個值得一看的地理空間擴展。不幸的是我沒有這方面的經驗。

+0

感謝您的評論 - 我仍然在等待有人可能遇到這個Mysql地理空間問題。再次感謝! :) – zarun

相關問題