【问题标题】:Querying a fusion table to see if a polygon contains a coordinate查询融合表以查看多边形是否包含坐标
【发布时间】:2014-03-24 09:15:54
【问题描述】:

有没有办法确定坐标是否在融合表层内?我尝试使用一些本土方法来做到这一点,但我正在测试的大约 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.

这实际上是比我开始寻找的更好的解决方案。

使用给定答案中的代码突出显示地图上的多边形,这很棒。另外,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


【解决方案1】:

您可以这样做(FusionTableLayer 示例):

        layer = new google.maps.FusionTablesLayer({
          query: {
            select: 'geometry',
            from: tableId,
            where: 'ST_INTERSECTS(geometry, CIRCLE(LATLNG(' + lat + ', ' + lng + '),1))',
            limit: 1
          }

检查几何列中定义的多边形与 lat,lng 处直径为 1 米的圆的交点。

FusionTablesLayer exmaple

【讨论】:

  • 我可以让它返回一个布尔值吗?有了这个我想我可以使用 containsLocation() 。你怎么看?
  • 顺便说一句非常有用的网站:)。
  • 只是为了确认一下,上面基本上是在说明圆和多边形在同一个地方?
  • ST_INTERSECTS 返回与小圆相交的多边形。如果多边形与圆相交,圆足够小并且多边形不重叠,它将返回包含输入坐标的多边形。如果坐标在两个多边形边缘的 1 米范围内,则该特定示例可能会出现问题。
  • 您需要使用Fusion Tables API v1(或google可视化API)。如果它返回结果,则您的布尔值将为真,如果查询没有结果,则您的布尔值为假。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 2015-10-13
  • 2020-04-14
  • 1970-01-01
  • 2015-03-07
  • 2022-11-10
  • 1970-01-01
相关资源
最近更新 更多