24 votos

Cómo crear un círculo en PostGIS?

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

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

Pero los círculos creados no han 600 kilómetros de radio (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. Correcta de proyección es 4326, pero el uso del cliente de Google rásteres, así que yo soy el almacenamiento de datos en 900913 para evitar reprojections y aumentar el rendimiento.

Gracias

19voto

NilObject Puntos 7874

Intente esto:

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

Este voltea a la geografía, a continuación, utiliza el incorporado SRID de selección (irónicamente) la vuelta de nuevo en la geometría, donde un buen plano de búfer se ejecuta luego voltea hacia atrás. El problema con el enfoque de Mercator es que Mercator no conservar la distancia. El uso más apropiado local de proyección da mejores resultados, y eso es lo que sucede en el método anterior.

4voto

Lars Mæhlum Puntos 4569

Usted puede aumentar la quad_seg valor para obtener una información más precisa círculo. Para obtener un verdadero círculo que tiene que trabajar con una geometría curva tipo, pero no sé lo que el software puede mostrar que.

La exactitud de srid 90013 también es muy malo, ya que es una proyección que cubre el mundo entero.

Usted va a obtener un resultado más exacto con un local de proyección.

3voto

FlySwat Puntos 61945

Depende de donde los círculos están siendo creados. Están cerca del ecuador o cerca de los polos?

Echa un vistazo a este mapa. ¿Crees que la Antártida o Groenlandia son realmente muy grande? Esa es la proyección que está utilizando, derecho?

Yo recomendaría hacer una lectura rápida de este USGS documento sobre las proyecciones, en particular, la siguiente tabla que da una idea rápida de lo que las proyecciones son buenas para qué.

Y después de todo esto, creo que finalmente debe responder a tu pregunta :)

Lo Nicklas dijo que fue un buen consejo. Hay una particular proyección de su área local que trabaje mejor?

De lo contrario puede que desee ver en la nueva PostGIS tipo Geography. Sin embargo, la respuesta más apropiada depende de donde los datos se encuentra.

ACTUALIZACIÓN: Desde ahora sabemos que sus datos están en España, no te ves en almacenar en un local de proyección como Zona UTM 31N, haciendo sus operaciones con eso, y luego proyectarlos a Google Web Mercator?

2voto

hernan43 Puntos 566

Usted puede utilizar el bastante nuevo SQL/MM de la Parte 3 tipo de geometría CIRCULARSTRING y/o CURVEPOLYGON.

Sin embargo, advirtió que el apoyo de este tipo es limitada, tanto con las funciones internas y externas de los programas. Usted puede utilizar ST_CurveToLine para ayudar a visualizar.

Además, es un poco off-putting (como de PostGIS 2.0 svn) que SELECT ST_Area('CURVEPOLYGON(CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1))'::geometry) es sólo una aproximación de pi. (Comparar 3.14033115695475 a 3.14159265358979 de pi()).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X