Crear un polígono alrededor de una cadena lineal con PostGIS

Soy nuevo en PostGIS y necesito pedir ayuda aquí. Tengo una polilínea de Google Maps (que representa un itinerario) y necesito construir un polígono (búfer) a su alrededor con una distancia específica en metros o kilómetros.

Como entrada, tengo la lista de puntos de Latitud/Longitud y la distancia de amortiguamiento requerida.

¿Alguien puede ayudarme a construir la consulta para que el resultado devuelto sea el polígono en coordenadas de Latitud/Longitud, listo para trazarse en el mapa?

preguntado el 27 de julio de 12 a las 17:07

4 Respuestas

  1. Agregue el primer vértice de su cadena de líneas nuevamente al final para poder crear un polígono.
  2. Convertir cadena de líneas en polígono
  3. Crear un búfer alrededor del polígono
SELECT
    ST_Buffer(ST_Polygon(ST_AddPoint(the_geom, ST_StartPoint(the_geom))),100)
FROM
    mytable
  1. Si tiene su búfer en metros/kilómetros y sus datos en latitud/longitud, es posible que desee transformar primero su polígono en una proyección adecuada (no sé dónde se encuentra) y luego volver a la latitud/longitud.
SELECT
    ST_Transform(ST_Buffer(ST_Transform(ST_Polygon(ST_AddPoint(the_geom,ST_StartPoint(the_geom)),4326),XXXX),100),4326)
FROM
    mytable

No he probado el código pero debería funcionar.

contestado el 09 de mayo de 13 a las 18:05

Para el búfer en metros en geometrías lon/lat puede usar ST_Buffer on geography tipo de datos. Este enfoque permite evitar encontrar proyección adecuada. PostGIS en realidad usa zonas UTM para esto.

Por ejemplo, los servicios administrativos de geometry(ST_Buffer(georgaphy(geom), 100)) devuelve un polígono de búfer de 100 metros para la geometría geom.

Entonces, para una tabla con columnas seq, lon y lat, se ve así:

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

Respondido 31 ago 12, 23:08

¿Qué pasa con este comentario en: postgis.org/docs/ST_Buffer.html Para la geografía, es posible que esto no se comporte como se esperaba si el objeto es lo suficientemente grande como para caer entre dos zonas UTM o cruzar la línea de fecha. jonathan pacifico

Esto no está usando PostGIS, pero hay un Utilidad RouteBoxer en Google Maps API v3 eso hace algo como lo que estás pidiendo.

Otra opción: la biblioteca JSTS.

ejemplo

respondido 27 nov., 14:05

Tienes toda la razón, esto no es lo que estoy buscando. Investigué el uso de RouteBoxer de antemano y no se adapta en absoluto a mis necesidades. - Simon

Después de la prueba, descubrí que el búfer de polígonos producido por postgis no es confiable. Es decir, si quiero un búfer de 5 kilómetros alrededor de una polilínea, postgis devolverá un polígono que es A LO SUMO 5 kilómetros, aunque en algunos puntos menos que esto.

Abandonando postgis

Respondido el 01 de Septiembre de 12 a las 08:09

Eso es incorrecto. Aquí hay un ejemplo en el que PostGIS está creando un búfer de 25 millas alrededor de una ruta: gis5.com/pois_along_route/gm_pois_along_route.php - Marcelo

@Marcelo: ¿puede proporcionar el código de cómo logró esto? Cuando lo hice en un proveedor de prueba, el búfer estaba distorsionado. - Simon

¿Por qué querrías el código si ya dijiste que abandonarías PostGIS? :p ... (y ya ha aceptado su propia respuesta, lo que no resuelve el problema). ¡Así no es como funciona StackOverflow! - Marcelo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.