4 votos

Intento de importar el GML de la infraestructura holandesa utilizando el controlador GMLAS de OGR, pero no hay geometrías.

Tengo una infraestructura holandesa Archivos GML que estoy tratando de mostrar en GeoServer. El primer paso es importar el GML a PostGIS y, aunque puedo hacerlo funcionar utilizando el controlador GML de OGR, acabo con una desagradable mezcla de tablas que hay que unir con vistas (y adivinar). Así que pensé que podría utilizar el controlador GMLAS (debería ser capaz de manejar este tipo de datos INSPIRE) y parece que excepto no importa las geometrías de los enlaces.

Estos se almacenan en pares de características así, 1º hay un imkl:Rioolleiding (un desagüe de aguas pluviales) que enlaza a través de su <net:link xlink:href="nl.imkl-GM1641.236013_ulink"></net:link> a la siguiente característica us-net-common:UtilityLink que contiene algo más de información y la geometría real.

Ejecutar ogrinfo -oo REMOVE_UNUSED_LAYERS=yes -oo REMOVE_UNUSED_FIELDS=yes -ro GMLAS:GI_gebiedsinformatielevering_19C000111_1.xml da 66 capas pero sólo una en us_net_common que es us_net_common_inspireid y 3 rioolleiding capas, ninguna de las cuales tiene geometría.

23: rioolleiding (None)
24: rioolleiding_innetwork (None)
25: rioolleiding_link (None)

Por favor, dime que me estoy perdiendo algo obvio.

<imkl:Rioolleiding 
xmlns:us-govserv="http://inspire.ec.europa.eu/schemas/us-govserv/4.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:gn="http://inspire.ec.europa.eu/schemas/gn/4.0" 
xmlns:gts="http://www.isotc211.org/2005/gts" 
xmlns:sc="http://www.interactive-instruments.de/ShapeChange/AppInfo" 
xmlns:gco="http://www.isotc211.org/2005/gco" 
xmlns:act-core="http://inspire.ec.europa.eu/schemas/act-core/4.0" 
xmlns:gmd="http://www.isotc211.org/2005/gmd" 
xmlns:gmlexr="http://www.opengis.net/gml/3.3/exr" 
xmlns:gsr="http://www.isotc211.org/2005/gsr" 
xmlns:gss="http://www.isotc211.org/2005/gss" 
gml:id="nl.imkl-GM1641.236013">
            <net:beginLifespanVersion>1900-01-01T00:00:00.000Z</net:beginLifespanVersion>
            <net:inspireId>
                <base:Identifier>
                    <base:localId>GM1641.236013</base:localId>
                    <base:namespace>nl.imkl</base:namespace>
                </base:Identifier>
            </net:inspireId>
            <net:inNetwork xlink:href="nl.imkl-GM1641.Maasgouw_RVV"></net:inNetwork>
            <net:link xlink:href="nl.imkl-GM1641.236013_ulink"></net:link>
            <us-net-common:currentStatus xlink:href="http://inspire.ec.europa.eu/codelist/ConditionOfFacilityValue/functional"></us-net-common:currentStatus>
            <us-net-common:validFrom>1900-01-01T00:00:00.000Z</us-net-common:validFrom>
            <us-net-common:verticalPosition>underground</us-net-common:verticalPosition>
            <us-net-common:utilityFacilityReference></us-net-common:utilityFacilityReference>
            <us-net-common:governmentalServiceReference></us-net-common:governmentalServiceReference>
            <us-net-common:warningType xsi:nil="true" nilReason="unknown"></us-net-common:warningType>
            <us-net-common:pipeDiameter uom="urn:ogc:def:uom:OGC::mm">125.0</us-net-common:pipeDiameter>
            <us-net-sw:sewerWaterType xlink:href="http://inspire.ec.europa.eu/codelist/SewerWaterTypeValue/combined"></us-net-sw:sewerWaterType>
            <imkl:geoNauwkeurigheidXY xlink:href="http://definities.geostandaarden.nl/imkl2015/id/waarde/NauwkeurigheidXYvalue/onbekend"></imkl:geoNauwkeurigheidXY>
            <imkl:buismateriaalType xlink:href="http://definities.geostandaarden.nl/imkl2015/id/waarde/PipeMaterialTypeIMKLValue/PVC"></imkl:buismateriaalType>
        </imkl:Rioolleiding>
</gml:featureMember>
<gml:featureMember>
<us-net-common:UtilityLink 
xmlns:us-govserv="http://inspire.ec.europa.eu/schemas/us-govserv/4.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:gn="http://inspire.ec.europa.eu/schemas/gn/4.0" 
xmlns:gts="http://www.isotc211.org/2005/gts" 
xmlns:sc="http://www.interactive-instruments.de/ShapeChange/AppInfo" 
xmlns:gco="http://www.isotc211.org/2005/gco" 
xmlns:act-core="http://inspire.ec.europa.eu/schemas/act-core/4.0" 
xmlns:gmd="http://www.isotc211.org/2005/gmd" 
xmlns:gmlexr="http://www.opengis.net/gml/3.3/exr" 
xmlns:gsr="http://www.isotc211.org/2005/gsr" 
xmlns:gss="http://www.isotc211.org/2005/gss" 
gml:id="nl.imkl-GM1641.236013_ulink">
            <net:beginLifespanVersion>1900-01-01T00:00:00.000Z</net:beginLifespanVersion>
            <net:inspireId>
                <base:Identifier>
                    <base:localId>GM1641.236013_ulink</base:localId>
                    <base:namespace>nl.imkl</base:namespace>
                </base:Identifier>
            </net:inspireId>
            <net:inNetwork xlink:href="nl.imkl-GM1641.Maasgouw_RVV"></net:inNetwork>
            <net:centrelineGeometry>
                <gml:LineString gml:id="nl.imkl-GM1641.236013_ulink-0" srsDimension="2" srsName="EPSG:28992">
                    <gml:posList>190008.375849 351407.866177 190008.475669 351408.328408</gml:posList>
                </gml:LineString>
            </net:centrelineGeometry>
            <net:fictitious>false</net:fictitious>
            <us-net-common:currentStatus xlink:href="http://inspire.ec.europa.eu/codelist/ConditionOfFacilityValue/functional"></us-net-common:currentStatus>
            <us-net-common:validFrom>2018-07-10T00:00:00.000Z</us-net-common:validFrom>
            <us-net-common:verticalPosition>underground</us-net-common:verticalPosition>
            <us-net-common:utilityFacilityReference></us-net-common:utilityFacilityReference>
            <us-net-common:governmentalServiceReference></us-net-common:governmentalServiceReference>
        </us-net-common:UtilityLink>
</gml:featureMember>

3voto

Adam Ernst Puntos 6939

Resulta que el secreto es listar todos los esquemas en la línea de comandos en lugar de sólo el raíz. Así que después de obtener los esquemas (busque una lista de importaciones en la parte superior de imkl2015-wion.xsd ) se puede ejecutar:

ogr2ogr -f PostgreSQL -s_srs epsg:28992 -t_srs epsg:4326 PG:'host=localhost user=ian dbname=gml_test schemas=test2' \
 GMLAS:19G000603_1/GI_gebiedsinformatielevering_19G000603_1.xml \
 -nlt CONVERT_TO_LINEAR -skipfailures  \
 -oo XSD=ElectricityNetwork.xsd,imkl2015-wion.xsd,Leveringsinformatie-2.1.xsd,OilGasChemicalsNetwork.xsd,SewerNetwork.xsd,TelecommunicationsNetwork.xsd,ThermalNetwork.xsd,UtilityNetworksCommon.xsd,WaterNetwork.xsd \
 -oo CONFIG_FILE=./gmlasconf.xml \
 -oo REMOVE_UNUSED_LAYERS=YES -oo REMOVE_UNUSED_FIELDS=YES -lco LAUNDER=NO

Y obtendrá 82 (más o menos) tablas en su esquema y luego puede unirlas usando una vista como:

CREATE OR REPLACE VIEW test.v_OlieGasChemicalienPijpleiding AS                  
 SELECT r.*,                                                                    
    replace(u."thema_href"::text, 'http://definities.geostandaarden.nl/imkl2015/id/waarde/Thema/'::text, ''::text) as thema,
    replace(r."currentStatus_href"::text, 'http://inspire.ec.europa.eu/codelist/ConditionOfFacilityValue/'::text, ''::text) AS "currentStatus",
    replace(u."utilityNetworkType_href"::text, 'http://inspire.ec.europa.eu/codelist/UtilityNetworkTypeValue/'::text, ''::text) AS "UtilityNetworkTypeValue",
    g."centrelineGeometry"                                                      
   FROM test."OlieGasChemicalienPijpleiding" r                                  
     JOIN test."OlieGasChemicalienPijpleiding_inNetwork" i ON r.ogr_pkid::text = i.parent_ogr_pkid::text
     JOIN test."OlieGasChemicalienPijpleiding_link" l ON r.ogr_pkid::text = l.parent_ogr_pkid::text
     JOIN test."Utiliteitsnet" u ON i.href::text = u.id::text                   
     JOIN test."UtilityLink" g ON l.href::text = g.id::text;                    

ALTER TABLE test.v_OlieGasChemicalienPijpleiding                                
  OWNER TO ian; 

Idealmente, me gustaría evitar el replace pero eso parece implicar la reescritura de los archivos SLD en su lugar, a menos que haya otra opción del controlador GMLAS que me esté perdiendo.

0voto

Ahatius Puntos 147

¿Ha probado el plugin QGIS de la caja de herramientas del esquema de la aplicación GML? https://github.com/BRGM/gml_application_schema_toolbox ?

0voto

JeremyReimer Puntos 225

He participado en el desarrollo de la norma IMKL2015 y he creado los SLD para GeoServer. Para crear la vista para Rioolleiding No sólo me uní a la mesa con el UtilityLink pero también con el Utiliteitsnet .

  1. Analizar el GML: cat $GML_FILE | sed 's/xlink:href/val/g' | sed 's/xsi:nil/nil/g' > transformed.gml
  2. Cargar en PostGIS utilizando la configuración OGR --config GML_ATTRIBUTES_TO_OGR_FIELDS YES
  3. Actualizar la columna de enlace al tipo Array: ALTER TABLE imkl."Rioolleiding" ALTER COLUMN link TYPE varchar[] USING ARRAY[link];
  4. Crear la unión de vistas Rioolleiding con ambos UtilityLink y Utiliteitsnet : CREATE OR REPLACE VIEW imkl."Rioolleiding_view" AS SELECT a.*, ul.geom AS geom, un.thema AS thema FROM imkl."Rioolleiding" a JOIN imkl."UtilityLink" ul ON a.link @> ARRAY[ul.gml_id] JOIN imkl."Utiliteitsnet" un ON a."inNetwork" = un.gml_id;

Esperemos que esto le indique la dirección correcta.

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