1 votos

¿Cómo se importan correctamente las relaciones multipoligonales de OpenStreetMap con osm2pgsql?

Estamos utilizando osm2pgsql para importar el archivo planet.osm de OpenStreetMap a GeoServer. Luego tratamos de obtener características de la capa de polígonos utilizando el controlador WFS de GDAL/OGR en C#.

Hemos probado la importación con y sin el --multi-geometry opción.

El multipolígono que estoy utilizando para las pruebas es http://www.openstreetmap.org/relation/69663 . Intento buscar las características relevantes con
layer.SetAttributeFilter("(osm_id=69663)OR(osm_id=28414267)OR(osm_id=30407439)"); Los ID de arriba son el ID de la relación del polígono múltiple, el ID del camino exterior y el ID del camino interior, respectivamente. Esta consulta devuelve una única característica con una única geometría con 22 nodos y sin geometrías anidadas. Este elemento coincide con el camino exterior en cuanto a ID, número de nodos y sus etiquetas. Esto significa que no sólo falta la vía interior, sino que también faltan las etiquetas de las relaciones, que es lo que la identifica como edificio.

¿Qué pasó con el camino interior? ¿Se descartó porque no tiene ninguna etiqueta? ¿Qué pasó con la relación? Y lo más importante, ¿cómo obtengo el resultado que busco?

EDIT: iant quería saber qué había en la columna de geometría. La columna de geometría se llama "camino" y para el osm_id 28414267 contiene:
0103000020E61000000100000016000000F988F3CBBB012A40ECEB0AC73DCD4B40B24CBF44BC012A400F046D173FCD4B40015B142CC4012A40399787F13FCD4B40F8CDB348C9012A4050357A3540CD4B407F750B13FC012A400E6EC6C441CD4B405BE4E83B09022A40263ACB2C42CD4B40DB3E9AA03C022A4060F01FC143CD4B406DECC84741022A4001E8E6D143CD4B403BAC70CB47022A409C22765C43CD4B40F107A8154B022A408A5B60EA42CD4B40B46DBD4B4E022A405BF1683E42CD4B4048BD4CB967022A404015376E31CD4B40A5CD829A6B022A409BDC39DE2ECD4B40D0807A336A022A401E79D6242ECD4B409EFB613A63022A4095DD825B2DCD4B406BC1E677F5012A40FA3D569522CD4B4063EFC517ED012A40FA3D569522CD4B40E92D7997E6012A407D1C72D822CD4B4057804AF0E1012A40F9C1548E24CD4B40DD8431D8C3012A40BF93BB7438CD4B40A977A7F1C1012A406B3304B639CD4B40F988F3CBBB012A40ECEB0AC73DCD4B40
Lo convertimos a texto y contiene exactamente lo que obtuve con OGR: 22 nodos, sin geometrías anidadas.

EDIT 2: Los datos hexadecimales anteriores como texto:
POLYGON((13.0033859 55.6034478,13.0033895 55.6034879,13.0034498 55.6035139,13.0034888 55.603522,13.0038763 55.6035696,13.0039767 55.603582,13.0043688 55.6036302,13.0044043 55.6036322,13.004454 55.6036182,13.0044791 55.6036046,13.0045036 55.6035841,13.0046976 55.603071,13.0047272 55.6029928,13.0047165 55.6029707,13.0046633 55.6029467,13.0038259 55.6026179,13.003762 55.6026179,13.0037124 55.6026259,13.0036769 55.6026781,13.0034473 55.6032854,13.0034328 55.6033237,13.0033859 55.6034478))
Me da pereza comprobarlos todos, pero el undécimo nodo ( 13.0045036 55.6035841 ) coincide con el primer nodo de OpenStreetMap.

1voto

Tal Cohen Puntos 21

Después de importar una zona muy pequeña con menos de 20 objetos, he encontrado el problema.

Para evitar el solapamiento entre los ID de las relaciones y los ID de las vías, las relaciones se importan con un número de ID negativo.

No he encontrado este hecho documentado en ninguna parte. Lo descubrí porque reconocí el ID que buscaba en la base de datos por haber importado un área tan pequeña.

Lo que debería haber escrito desde el principio era layer.SetAttributeFilter("(osm_id=-69663)");

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