2013-07-21 77 views
6

我一直在尋找一種方法來檢查一個點是否是多邊形的一部分;這個多邊形是從一個文件中加載的。檢查Google Map Point是否與PHP中的多邊形相關

所有與此問題有關的答案都使用javascript解決,但我需要在服務器端執行此操作;這是因爲結果不需要作爲Web客戶端顯示給用戶,它需要被存儲並且稍後被用作參數來選擇該區域(多邊形)內的一組用戶(使用該系統)。

我在尋找Google Maps API for PHP,但看起來它根本不存在。我找到了this one,但它與Google沒有關係,也專注於前端。

我也查找了REST API;將內容加載到我的php並解析它會相對容易,但看起來像Google將所有的努力都放在了JS API上。

有沒有解決方法?

編輯1:作爲@Spacedman要求,文件格式是一種KML

澄清1:我預計,谷歌提供這樣的工具(因爲它與JS存在);解析文件以通過算法檢查是一種可能性,我將不得不檢查它是否正常工作。

回答

6

你嘗試尋找你喜歡的搜索引擎 「在多邊形的PHP點」?最高命中:

http://assemblysys.com/php-point-in-polygon-algorithm/

它採用了掃描線算法,並有一些例子。你所要做的就是將你的多邊形文件讀成正確的格式(你忽略了說明你有什麼格式)並調用函數。

+1

我接受了這個答案,因爲最終它是一個解決方案,但不是我期望的解決方案,因爲我認爲Google可以提供一個簡單的工具(函數,類)來解析文件。最後,我的解決方案花了一段時間;如你所說,解析文件並使用多邊形算法中的點。 – Absulit

+0

這隻有在頁面完全加載到瀏覽器中時才適用,對嗎?你無法自動找出使用cron作業的要點嗎? –

1

你可以嘗試這樣的財產以後(在PHP應該是相似的):

int iCheck=0;  
for (i = 0, v = HowManyVecotrsHasThePolygon - 1; i < HowManyVecotrsHasThePolygon; v = i++) 
        { 
         if (((vectorPointLatitud[i] > ptoLatitud) != (vectorPointLatitud[v] > ptoLatitud)) && (ptoLongitud < (vectorPointLongitud[v] - vectorPointLongitud[i]) * (ptoLatitud - vectorPointLatitud[i])/(vectorPointLatitud[v] - vectorPointLatitud[i]) + vectorPointLongitud[i])) 
          iCheck++; 
        } 

如果I確認爲配對點外,即使裏面

結帳Polygons Eric Haines。我從他那裏得到了這個想法。

的想法是,你已經從你的觀點創建一個雷,並檢查該射線之間有多少交點和多邊形向量

的算法只是有點代數,您可以在任何一本書檢查。

相關問題