使用PostGIS在线串周围创建多边形

时间:2012-07-27 16:55:24

标签: google-maps gis postgis

我是PostGIS的新手,需要在这里寻求帮助。 我有一个来自谷歌地图的折线(代表一个行程),需要在它周围建立一个以米或公里为特定距离的多边形(缓冲区)。

对于输入,我有纬度/经度点列表和所需的缓冲距离。

任何人都可以帮我构建查询,以便返回的结果是纬度/经度坐标中的多边形,可以在地图上绘制吗?

4 个答案:

答案 0 :(得分:6)

  1. 在末尾再次添加行字符串的第一个顶点即可 创建一个多边形。
  2. 将线串转换为多边形
  3. 围绕多边形创建缓冲区
  4. SELECT
        ST_Buffer(ST_Polygon(ST_AddPoint(the_geom, ST_StartPoint(the_geom))),100)
    FROM
        mytable
    
    1. 如果您有以米/公里为单位的缓冲区以及纬度/经度数据,您可能需要先将多边形转换为适当的投影(我不知道您在哪里),然后再回到纬度/经度。< / LI>
      SELECT
          ST_Transform(ST_Buffer(ST_Transform(ST_Polygon(ST_AddPoint(the_geom,ST_StartPoint(the_geom)),4326),XXXX),100),4326)
      FROM
          mytable
      

      我没有尝试过代码,但应该可以使用。

答案 1 :(得分:2)

这不是使用PostGIS,但有一个RouteBoxer utility in the Google Maps API v3可以满足您的要求。

另一种选择:JSTS library

example

答案 2 :(得分:2)

对于lon / lat几何上的米的缓冲区,您可以在ST_Buffer数据类型上使用geography。这种方法可以避免找到合适的投影。 PostGIS实际上使用UTM区域。

例如,geometry(ST_Buffer(georgaphy(geom), 100))为几何geom返回100米缓冲区多边形。

因此,对于包含seq,lon和lat列的表,它看起来像:

SELECT geometry(ST_Buffer(georgaphy(ST_MakeLine(ST_MakePoint(lon, lat))), dist))
FROM sometable
ORDER BY seq

答案 3 :(得分:0)

经过测试,我发现postgis生成的多边形缓冲区不可靠。也就是说,如果我想在折线周围设置一个5公里长的缓冲区,postgis会返回一个多边形,这个多边形 AT MOST 5公里,但是在某些点不到这个。

放弃postgis