Estoy usando PostGIS 2.0.0 y me gustaría almacenar una superficie GML de una manera que permita calcular las intersecciones entre esa superficie y varios puntos y líneas. En mi caso, la Surface tendrá un PolygonPatch sin anillos interiores y un anillo exterior que puede ser un LineStringSegment, un Geodesic, un Arc o un Circle. Las distancias pueden ser del orden de decenas a cientos de millas. Veo que PostGIS tiene CIRCULARSTRING
y CURVEPOLYGON
, lo que parece ser una buena manera de almacenar un Arc, excepto que no son compatibles con el geography
tipo, solo geometry
. ¿Cuál sería la mejor manera de almacenar esto? (Soy bastante nuevo en PostGIS y GIS en general, por lo que es muy posible que me falte algo obvio).
9
Respuestas:
ST_GeomFromGML
Puede almacenar sus características GML como un tipo de datos de Geometría PostGIS utilizando la función ST_GeomFromGML que convertirá su GML al tipo de datos de geometría. FYI: Hay funciones similares para KML, WKT, etc.
solo haz algo como:
Una vez que lo tenga en el campo de geometría, puede hacer todas las intersecciones divertidas y las cosas que desea hacer en PostGIS
Luego puede escupir su resultado nuevamente en formato GML usando ST_AsGML
EDITAR # 1 Creo que estás buscando:
http://postgis.net/docs/ST_Distance_Sphere.html
http://postgis.net/docs/ST_Distance_Spheroid.html
EDITAR # 2
Estoy usando "POSTGIS =" 1.5.2 "(versión anterior que usted) y la siguiente declaración funciona bien:
Debe usar una combinación de funciones para obtener lo que necesita.
distance_spheroid no es compatible con CIRCULARSTRING porque toma en los tipos de datos de geometría.
Agregue un EDITAR a su pregunta original con una muestra de GML con la que tiene problemas y escribiré las declaraciones por usted.
fuente
Al final dejé de almacenar el arco o círculo "exacto". Al importar un arco GML (que está definido por 3 puntos en el arco) creo temporalmente una geometría
CIRCULARSTRING
, luego la convierto a geografía, así:Al importar un GML ArcByCenterPoint (que se define por el punto central, el radio y los ángulos de inicio y finalización), lo aproximo directamente proyectando puntos a intervalos de 1 grado desde el ángulo inicial hasta el ángulo final. Esto se hace en una esfera, no en un esferoide, por lo que no es del todo exacto, pero hay tickets de PostGIS para implementar el acimut y la proyección de puntos para el tipo de geografía. Lo mismo para un círculo.
fuente