2

有沒有方法可以確定座標是否位於融合表層內?我試圖用一些自行開發的方法來做到這一點,但是我測試的位置中有6%返回了錯誤的結果。其中一個結果說格拉斯哥不在蘇格蘭。查詢融合表以查看多邊形是否包含座標

我可以查詢this Fusion Table並詢問格拉斯哥是否在蘇格蘭?最好返回一個布爾值。

  1. 格拉斯哥座標:55.855513, -4.252649
  2. 蘇格蘭查詢:Geometry where ‘NAME’ = ‘Scotland’
  3. KML柱:Geometry
  4. 融合表ID:1d5LmqKYvkTDxmYK3-9-aQLNz3Z0QAEwqHusAm5w

我想我必須使用ST_CONTAINSST_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" 

Here is the output.

這實際上是一個更好的解決方案比我出去找。

使用給定答案中的代碼突出顯示地圖上的多邊形,非常棒。此外,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米:

+1

可惜你不能,目前在FusionTables'ST_INTERSECTS'只能再次工作與矩形和圓形 –

+0

嗨Dr.Molle,謝謝!你知道最好的替代方法嗎?不調整算法。我正在考慮使用Execjs在服務器上編譯Google Maps,然後運行containsLocation()。但之後我必須將KML轉換爲多邊形,整個過程看起來有點瘋狂。必須有更好的方式... – Dol

+0

對不起,這可能是一個單獨的問題..再次感謝您的幫助和幫助:) – Dol

回答

3

可以做這樣的事情(FusionTableLayer例子)。

FusionTablesLayer exmaple

+0

我可以得到這個返回一個布爾值嗎?有了這個我可以使用containsLocation()我猜。你怎麼看? – Dol

+0

非常有用的網站的方式:)。 – Dol

+0

只是爲了確認,上面基本上是說圓和多邊形在同一個地方? – Dol