4

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

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

谁能帮我构建查询,以便返回的结果是纬度/经度坐标中的多边形,准备好在地图上绘制?

4

4 回答 4

6
  1. 在末尾再次添加线串的第一个顶点,以便能够创建多边形。
  2. 将线串转换为多边形
  3. 在多边形周围创建一个缓冲区
SELECT
    ST_Buffer(ST_Polygon(ST_AddPoint(the_geom, ST_StartPoint(the_geom))),100)
FROM
    mytable
  1. 如果您的缓冲区以米/公里为单位,而您的数据以纬度/经度为单位,您可能希望首先将多边形转换为适当的投影(我不知道您在哪里),然后再转换为纬度/经度。
SELECT
    ST_Transform(ST_Buffer(ST_Transform(ST_Polygon(ST_AddPoint(the_geom,ST_StartPoint(the_geom)),4326),XXXX),100),4326)
FROM
    mytable

我还没有尝试过代码,但它应该可以工作。

于 2012-07-29T19:04:36.040 回答
2

这没有使用 PostGIS,但Google Maps API v3 中有一个 RouteBoxer 实用程序,它可以执行您所要求的操作。

另一种选择:JSTS 库

例子

于 2012-07-27T18:00:20.107 回答
2

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

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

因此,对于具有 seq、lon 和 lat 列的表,它看起来像:

SELECT geometry(ST_Buffer(georgaphy(ST_MakeLine(ST_MakePoint(lon, lat))), dist))
FROM sometable
ORDER BY seq
于 2012-08-31T22:32:58.937 回答
-2

经过测试,发现postgis生成的多边形缓冲区不可靠。也就是说,如果我想在折线周围有一个 5 公里的缓冲区,postgis 将返回一个最多 5 公里的多边形但在某些点上却比这小。

放弃 postgis

于 2012-09-01T07:26:41.263 回答