【发布时间】:2014-03-24 09:15:54
【问题描述】:
有没有办法确定坐标是否在融合表层内?我尝试使用一些本土方法来做到这一点,但我正在测试的大约 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"
这实际上是比我开始寻找的更好的解决方案。
使用给定答案中的代码突出显示地图上的多边形,这很棒。另外,postgres 也可以按照 cmets 中 Dr.Molle 的建议使用。
【问题讨论】:
-
很遗憾你不能,目前在 FusionTables 中
ST_INTERSECTS仅适用于矩形和圆形 -
您好,Molle 博士,再次感谢!你知道最好的替代方法吗?无需调整算法。我正在考虑使用 Execjs 在服务器上编译 Google 地图,然后运行 containsLocation()。但随后我必须将 KML 转换为多边形,整个过程似乎有点疯狂。一定有更好的办法……
-
抱歉,这可能是一个单独的问题.. 再次感谢您的帮助,前几天也提供帮助 :)
-
我看到您提出了带有
postgres标记的问题,您可以使用带有 ST_CONTAINS 的 postgres 查询(基于存储在 postgres 表中的数据或在飞) -
我可以使用融合表动态创建多边形吗?
标签: google-maps google-maps-api-3 google-fusion-tables polygons point-in-polygon