6 votos

¿Importando todas las capas disponibles en el servidor para WFS en PyQGIS?

Estoy tratando de acceder a los datos de un WFS-servidor, E. g. https://geo.barentswatch.no/geoserver/bw/ows?

Me las arreglo para la importación de las capas individuales por:

uri = "https://geo.barentswatch.no/geoserver/bw/ows?srsname=EPSG:4326&typename=bw:npdsurveyongoing_latest&version=1.0.0&request=vlayer=QgsVectorLayer"
vlayer = QgsVectorLayer(uri, "bw:npdsurveyongoing_latest", "WFS")
QgsMapLayerRegistry.instance().addMapLayer(vlayer)

Sin embargo, quiero importar todas las capas disponibles y quiere que ellos automáticamente a ser llamado por su original nombre. Parece un poco innecesario para codificar todos los nombres antes de acceder al servidor, pero he estado luchando para averiguar los códigos para esto.

Una manera de hacer esto en pyqgis?

6voto

Mue Puntos 2469

No es el más limpio de soluciones, pero puedes usar una combinación de urllib2 a leer su archivo XML y expresiones regulares para extraer los nombres.

Por lo que podemos:

  • El bucle a través de cada línea en el archivo XML
  • Extraer los nombres de las capas
  • Introduzca los nombres en la misma uri usted siempre
  • A continuación, añadir a QGIS

Este es el código que he usado:

import urllib2, re

file = urllib2.urlopen('https://geo.barentswatch.no/geoserver/ows?service=wfs&version=1.0.0&request=GetCapabilities')
data = file.read()
string = '<FeatureType><Name>(.+?)</Name><Title>'
for word in data.split():
    layer = re.search(string, word)
    if layer is not None:
        uri = "https://geo.barentswatch.no/geoserver/bw/ows?srsname=EPSG:4326&typename={name}&version=1.0.0&request=vlayer=QgsVectorLayer".format(name = layer.group(1))
        vlayer = QgsVectorLayer(uri, layer.group(1), "WFS")
        QgsMapLayerRegistry.instance().addMapLayer(vlayer)

file.close()

Resultado:

Result

3voto

Sigurd Puntos 41

Para otros nuevos en WFS en python, también creo que OWSLib es de gran ayuda, ref .: https://geopython.github.io/OWSLib/

Un enfoque fácil para enumerar todas las capas (que se podrían enlazar para importarlas en QGIS):

 from owslib.wfs import WebFeatureService
wfs = WebFeatureService(url='https://geo.barentswatch.no/geoserver/ows?', version='1.0.0')
list(wfs.contents)
 

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