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 reproyecciones y aumentar el rendimiento.
postgis
postgis-1.5
angelcervera
fuente
fuente
SELECT ST_Distance( (select point from points where id = 7), (select point from points where id = 42));
retorno más de 100 km de diferencia respecto a gmap-pedometer.com, pero si supongo que esta longitud es correcta, el radio del círculo es perfecto. Pero la gente usa la primera distancia como radio, no la distancia devuelta por st_distance. ¿Es posible transformar la primera distancia a la segunda?Respuestas:
Prueba esto:
Esto cambia a la geografía y luego utiliza la selección SRID incorporada para volver (irónicamente) a la geometría donde se ejecuta un buen búfer plano y luego voltea hacia atrás. El problema con su enfoque en Mercator es que Mercator no conserva la distancia. Usar una proyección local más apropiada da mejores resultados, y eso es lo que sucede en el método anterior.
fuente
Puede aumentar el valor de quad_seg para obtener un círculo más preciso. Para obtener un círculo real, debe 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 cubre todo el mundo.
Obtendrá un resultado más preciso con una proyección local.
fuente
Depende de dónde se creen tus círculos. ¿Están cerca del ecuador o más cerca de los polos?
Echa un vistazo a este mapa . ¿Crees que Antártica o Groenlandia son realmente tan grandes? Esa es la proyección que estás usando, ¿verdad?
Le recomendaría que leyera rápidamente este documento del USGS sobre proyecciones , en particular la tabla a continuación que 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 Nicklas dijo fue un buen consejo. ¿Hay alguna proyección 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 dónde se encuentren sus datos.
ACTUALIZACIÓN: Dado que ahora sabemos que sus datos están en España, ¿buscó almacenarlos en una proyección local como UTM Zone 31N , hacer sus operaciones con eso y luego proyectarlos de nuevo en Google Web Mercator?
fuente
Puede utilizar el nuevo tipo de geometría SQL / MM Parte 3 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 con 3.14159265358979 depi()
).fuente