7 votos

Cargando una capa WFS usando pyqgis

Estoy intentando cargar una capa WFS en PyQGIS. Mi WFS uri es para el condado de los límites de aquí en Inglaterra. Es de datos abiertos y bastante ligera, si se quieren recrear el problema.

Aquí está mi código:

uri = 'http://www.geostore.com/OGC/OGCInterface?SERVICE=WFS&UID=UDATAGOV2011&PASSWORD=datagov2011&INTERFACE=ENVIRONMENTWFS&VERSION=2.0.0&LC=0'
layer = QgsVectorLayer(uri, "WFS_Layer", "WFS")
if not layer.isValid():
    print "Layer failed to load!"

Efectivamente, la capa no es válido.

Estoy siguiendo (al mejor de mi capacidad limitada) el QGIS instrucciones aquí: http://docs.qgis.org/testing/en/docs/pyqgis_developer_cookbook/loadlayer.html

Estoy perdiendo el hilo en esta parte:

enter image description here

Cuando en la declaración de vlayer es el uri que se pasa? Siento que me estoy perdiendo algo fundamental.

Cualquiera puede publicar código de trabajo? Sería impresionante para ser capaz de obtener PyQGIS y WFS trabajando muy bien!

6voto

Joe Puntos 16

Puede haber problemas con QGIS, pero el servicio también está roto. Prueba con WFS 1.0.0 porque es el más sencillo de todos y el servidor admite sólo WFS 1.0.0 y 1.1.0.

La primera prueba es leer las capacidades de:

http://www.geostore.com/OGC/OGCInterface?SERVICE=WFS&UID=UDATAGOV2011&PASSWORD=datagov2011&INTERFACE=ENVIRONMENTWFS&VERSION=1.0.0&LC=0&request=GetCapabilities

La respuesta revela que el servidor es muy antiguo MapServer. Seleccione un tipo de operación para DescribeFeatureType:

http://www.geostore.com/OGC/OGCInterface?SERVICE=WFS&UID=UDATAGOV2011&PASSWORD=datagov2011&INTERFACE=ENVIRONMENTWFS&VERSION=1.0.0&LC=0&request=DescribeFeatureType&TypeName=ea-wfs-area_public_face_inspire

Nada de extraño en el esquema. Porque hubo problemas, descargue el tipo de entidad con curl y guardarlo en disco para la investigación:

curl "http://www.geostore.com/OGC/OGCInterface?SERVICE=WFS&UID=UDATAGOV2011&PASSWORD=datagov2011&INTERFACE=ENVIRONMENTWFS&VERSION=1.0.0&LC=0&request=GetFeature&TypeName=ea-wfs-area_public_face_inspire" -o wfs_test.gml

Abra el wfs_test.gml archivo y el mensaje de aviso de que es impreso por MapServer en la línea 15:

<!-- WARNING: FeatureId item 'ogr_fid' not found in typename 'ea-wfs-area_public_face_inspire'. -->

Más adelante se puede ver el comienzo de la primera función:

<gml:featureMember>
<ms:ea-wfs-area_public_face_inspire>

La característica falta obligatoria "fid" atributo y eso es debido a que la fuente de datos no tienen columna "ogr_fid", que debe ser utilizado para la generación de la fid. Usted debe decir que el proveedor del servicio y les pide actualizar a MapServer 7.0 en el mismo.

Sin embargo, ahora usted tiene la GML en el disco y se puede abrir en QGIS con Añadir Capa Vectorial (probado con QGIS 2.10). También puedes intentar convertir GML datos a otro formato con ogr2ogr, pero debido a la NULA fid se producirá, por ejemplo, con Spatialite salida, ya que la tabla de base de datos se crea con la restricción not NULL. La conversión en shapefile va bien.

ogr2ogr -f "ESRI Shapefile" wfs_test.shp wfs_test.gml

5voto

Ricardo Reyes Puntos 3428

Usted debe ser capaz de formar un " obtener capacidades de solicitud de uso de su navegador, algo como esto:

https://www.geostore.com/OGC/OGCInterface?SERVICE=WFS&UID=UDATAGOV2011&PASSWORD=datagov2011&INTERFACE=ENVIRONMENTWFS&VERSION=2.0.0&LC=0&request=getcapabilities

He probado eso y no funciona en el navegador, pero no en QGIS. El mensaje de error dice algo acerca de la versión de WFS 1.0, así que me quita su versión de la especificación, y ahora funciona:

https://www.geostore.com/OGC/OGCInterface?UID=UDATAGOV2011&PASSWORD=datagov2011&INTERFACE=ENVIRONMENTWFS&LC=0

enter image description here

Para que luego me lleva a su código, y me pregunto si en realidad lo hizo acaba de salir el ejemplo. Intentar algo como esto:

uri = 'https://www.geostore.com/OGC/OGCInterface?UID=UDATAGOV2011&PASSWORD=datagov2011&INTERFACE=ENVIRONMENTWFS&LC=0&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&TYPENAME=ea-wfs-aqueducts_inspire&SRSNAME=EPSG:27700'
layer = QgsVectorLayer(uri, "WFS_Layer", "WFS")
if not layer.isValid():
    print "Layer failed to load!"

Nota: la adición de la 'NOMBRE' la especificación de una sola capa.

Pero estos no funcionan las capas en QGIS, provoca un error en el registro que indica que describefeaturetype error de url...'. Me gustaría tal vez probar esto en otro (SIG MapInfo? ArcGIS?). De hecho, usted puede agregar la capa de uso de la dirección URL que se especifica más arriba en la NationalMap http://nationalmap.gov.au/. Así lo hace el trabajo. Esto probablemente debe ser remitido a la QGIS los Desarrolladores de http://hub.qgis.org/.

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