查询融合表以查看多边形是否包含坐标

时间:2014-02-22 18:21:53

标签: google-maps google-maps-api-3 google-fusion-tables polygons point-in-polygon

有没有办法确定坐标是否在融合表层内?我尝试用一​​些自己开发的方法做到这一点,但我正在测试的大约6%的位置返回错误的结果。其中一项结果表明格拉斯哥不在苏格兰。

我可以查询this Fusion Table并询问格拉斯哥是否在苏格兰吗?最好返回一个布尔值。

  1. 格拉斯哥coords:55.855513, -4.252649
  2. 苏格兰查询:Geometry where ‘NAME’ = ‘Scotland’
  3. KML专栏:Geometry
  4. Fusion Table Id:1d5LmqKYvkTDxmYK3-9-aQLNz3Z0QAEwqHusAm5w
  5. 我想我必须使用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也可以像Dr.Molle在评论中所建议的那样使用。

1 个答案:

答案 0 :(得分:3)

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

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

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

FusionTablesLayer exmaple