回答

2

AFAIK API無法做到這一點。 所以,你有兩個選擇,在努力的順序需要:

  1. 當用戶水龍頭的水只是拋出一個對話框說「請選擇在陸地上
    點」
    。在沒有努力的情況下,會稍微煩擾用戶。
  2. 嘗試查找最近的土地,並使用它來運行 (而不是原始點)上的API請求。以下是一些想法。

一個很好的方法可以基於this answer:基本上你可以得到一個帶有多邊形的KML文件。出於性能考慮,您可以將多邊形簡化爲適合縮放級別的程度。現在,如果你的觀點是在其中一個多邊形 - 這是海。你可以遍歷所有的多邊形邊,選擇一個最接近你的點的點,然後在它上面選擇一個點 - 再次離你最近的點 - 然後向多邊形的外面做一個小小的步驟,以獲得一個土地點你可以做一個地理編碼請求。此外,原作者建議您可以使用Haversine公式來確定neares陸地點 - 我並不十分熟悉該裝置。

的缺點是,你必須處理KML,遍歷了大量的多邊形和優化他們(和損失精度這樣做,除了marineregions.org數據和谷歌地方數據之間可能存在差異)

另一個很酷你可以嘗試在可見地圖片段上使用Sobel Filter [邊緣檢測]來確定海岸線的位置(儘管你會在那裏得到一些誤報),然後跟蹤它(如柵格 - >矢量)以獲得一些點和以類似於前一種方法的方式計算最近的陸地位置。這是一個笨拙的想法enter image description here

對於Sobel邊緣檢測,考慮GPUImage lib - 他們已經實現了過濾器,並且它可能會快速工作,因爲lib會在GPU上執行所有計算。

UPD原來也有一個名爲Koordinates具有可海岸線的數據服務,檢查the answer here

相關問題