¿Creando un círculo en PostGIS?

21

Estoy usando PostGIS 1.5.2, con geometrías en SRID: 900913. Necesito crear círculos usando una lista de puntos como centro, con un radio de 600 kilómetros. Estoy usando esta consulta:

INSERT INTO circles (geom) (
   SELECT ST_Buffer(point, 600000, 'quad_segs=8') 
   FROM points
);

Pero los círculos creados no tienen 600 kilómetros de radio (el radio está cerca de esta longitud, pero no exactamente).

¿Existen otros métodos para crear círculos en PostGIS?

NOTA: La información representada es de España. La proyección correcta es 4326, pero el cliente usa rásteres de Google, por lo que estoy almacenando datos en 900913 para evitar las reproyecciones y aumentar el rendimiento.

    
pregunta angelcervera 28.05.2011 - 13:45

4 respuestas

12

Prueba esto:

 SELECT ST_Transform(geometry( 
            ST_Buffer(geography( 
                ST_Transform( point, 4326 )), 
                600000)), 
            900913) FROM points'

Esto cambia a la geografía y luego usa la selección incorporada de SRID para (irónicamente) volver a la geometría donde se ejecuta un buen búfer planar y luego retrocede. El problema con su enfoque en Mercator es que Mercator no conserva la distancia. El uso de una proyección local más apropiada da mejores resultados, y eso es lo que sucede con el método anterior.

    
respondido por el Paul Ramsey 01.06.2011 - 18:25
4

Puedes aumentar el valor de quad_seg para obtener un círculo más preciso. Para obtener un círculo real, tienes que trabajar con un tipo de geometría curva, pero no sé qué software puede mostrar eso.

La precisión de srid 90013 también es muy mala, ya que es una proyección que abarca todo el mundo.

Obtendrá un resultado más preciso con una proyección local.

    
respondido por el Nicklas Avén 28.05.2011 - 15:45
3

Depende de dónde se estén creando tus círculos. ¿Están cerca del ecuador o más cerca de los polos?

Echa un vistazo a este mapa . ¿Crees que la Antártida o Groenlandia son realmente tan grandes? Esa es la proyección que estás usando, ¿verdad?

Le recomendaría que haga una lectura rápida de este documento de USGS sobre proyecciones , particularmente el La siguiente tabla le da una idea rápida de qué proyecciones son buenas para qué.

Y después de todo eso, creo que finalmente debería responder a tu pregunta :)

Lo que dijo Nicklas fue un buen consejo. ¿Hay alguna proyección en particular para su área local que funcione mejor?

De lo contrario, es posible que desee ver el nuevo tipo de geografía PostGIS . Sin embargo, la respuesta más adecuada depende de la ubicación de sus datos.

ACTUALIZACIÓN: Ya que sabemos que sus datos están en España, ¿pensó en almacenarlos en una proyección local como zona UTM? 31N , ¿realiza sus operaciones con eso y luego las proyecta a Google Web Mercator?

    
respondido por el Ragi Yaser Burhum 29.05.2011 - 04:33
2

Puede usar la nueva geometría SQL / MM Part 3 tipo CIRCULARSTRING y / o CURVEPOLYGON.

Sin embargo, tenga en cuenta que el soporte para este tipo es limitado, tanto con funciones internas como con programas externos. Puede usar ST_CurveToLine para ayudar a visualizarlo.

Además, es un poco desagradable (a partir de PostGIS 2.0 svn) que SELECT ST_Area('CURVEPOLYGON(CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1))'::geometry) es solo una aproximación aproximada de π . (Compare 3.14033115695475 a 3.14159265358979 de pi() ).

    
respondido por el Mike T 29.05.2011 - 13:03

Lea otras preguntas en las etiquetas