有沒有方法可以確定座標是否位於融合表層內?我試圖用一些自行開發的方法來做到這一點,但是我測試的位置中有6%返回了錯誤的結果。其中一個結果說格拉斯哥不在蘇格蘭。查詢融合表以查看多邊形是否包含座標
我可以查詢this Fusion Table並詢問格拉斯哥是否在蘇格蘭?最好返回一個布爾值。
- 格拉斯哥座標:
55.855513, -4.252649
- 蘇格蘭查詢:
Geometry where ‘NAME’ = ‘Scotland’
- KML柱:
Geometry
- 融合表ID:
1d5LmqKYvkTDxmYK3-9-aQLNz3Z0QAEwqHusAm5w
我想我必須使用ST_CONTAINS
或ST_INTERSECTS
但我我不知道如何使用多邊形的形狀。
整體解決方案
使用查詢在給定答案你可以使用FusionTablesAPI多邊形的名稱。
lat = 55.855513
lng = -4.252649
table = '1d5LmqKYvkTDxmYK3-9-aQLNz3Z0QAEwqHusAm5w'
query = "SELECT NAME FROM #{table} WHERE ST_INTERSECTS(geometry, CIRCLE(LATLNG(#{lat}, #{lng}),1))"
url = "https://www.googleapis.com/fusiontables/v1/query?sql=#{URI.encode(query)}&key=AIzaSyAm9yWCV7JPCTHCJut8whOjARd7pwROFDQ"
這實際上是一個更好的解決方案比我出去找。
使用給定答案中的代碼突出顯示地圖上的多邊形,非常棒。此外,Dr.Molle在評論中建議使用postgres
。在LAT在幾何列定義的多邊形的交叉點和一個圓
layer = new google.maps.FusionTablesLayer({
query: {
select: 'geometry',
from: tableId,
where: 'ST_INTERSECTS(geometry, CIRCLE(LATLNG(' + lat + ', ' + lng + '),1))',
limit: 1
}
支票,LNG具有一個直徑爲1米:
可惜你不能,目前在FusionTables'ST_INTERSECTS'只能再次工作與矩形和圓形 –
嗨Dr.Molle,謝謝!你知道最好的替代方法嗎?不調整算法。我正在考慮使用Execjs在服務器上編譯Google Maps,然後運行containsLocation()。但之後我必須將KML轉換爲多邊形,整個過程看起來有點瘋狂。必須有更好的方式... – Dol
對不起,這可能是一個單獨的問題..再次感謝您的幫助和幫助:) – Dol