2016-07-13 20 views
1

Ich bin eine Anwendung erstellen, wo der Benutzer alle Features eines GeoServer-Layer (Speicher: Postgres) abgerufen und sie auf einer Tabelle anzeigen. Dazu benutze ich die OWSLib (get_feature).Wie programmgesteuert aktualisieren Daten in WFS-Geoserver-Schicht

Jetzt muss ich die Funktionalität der Bearbeitung der Daten hinzufügen (WFS-T). Soweit ich weiß, bietet OWSLib keine Funktion zum Hinzufügen/Aktualisieren von Funktionen.

Wie könnte man diese Art von Funktionalität implementieren?

Wie vorgeschlagen Ich verwende Python-Anfragen lib, um die WFS-T und aktualisierten Werte auf der Schicht zu implementieren:

Dies ist Teil meines Code:

 import requests 
     url = 'http://localhost:8080/geoserver/wfs' 


     xml = """<wfs:Transaction service="WFS" version="1.0.0" 
     xmlns:ogc="http://www.opengis.net/ogc" 
    xmlns:wfs="http://www.opengis.net/wfs"> 
    <wfs:Update typeName="geonode:tjk_nhr_shockriskscore"> 
    <wfs:Property> 
     <wfs:Name>Adm2_NAME</wfs:Name> 
     <wfs:Value>test_2dsfdsfsdfdsfds</wfs:Value> 
    </wfs:Property> 
    <ogc:Filter> 
     <ogc:FeatureId fid="tjk_nhr_shockriskscore.1"/> 
    </ogc:Filter> 
    </wfs:Update> 
</wfs:Transaction>""" 
     headers = {'Content-Type': 'application/xml'} # set what your server accepts 
     print requests.post(url, data=xml, headers=headers).text 

Wenn ich laufe diese xml durch Bei den Geoserver-Demo-Seiten funktioniert es gut. Die Eigenschaft des Layers wird aktualisiert. Wenn ich es durch meine Python-Skript ausführen bekomme ich einen Service Ausnahme als:

<?xml version="1.0" ?> 
    <ServiceExceptionReport 
    version="1.2.0" 
    xmlns="http://www.opengis.net/ogc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.opengis.net/ogc http://schemas.opengis.net/wfs/1.0.0/OGC-exception.xsd"> 
    <ServiceException> 
    {http://www.geonode.org/}tjk_nhr_shockriskscore is read-only 
    </ServiceException></ServiceExceptionReport> 
+0

möglich duplicate von https://gis.stackexchange.com/questions/184309/available-python-client-libraries-for-wfs-transactions –

+0

Ah toll. Habe diesen Link nicht gefunden. Es hilft, obwohl es scheint, dass sie nicht glatt gepflastert sind, oder? – user1919

+0

Dies sind nur HTTP-Post-Anfragen mit einem gut definierten Standard –

Antwort

1

Die Fehlermeldung (ungewöhnlich) ist hier tatsächlich hilfreich - wenn die Schicht nur gelesen wird, ein Update dagegen laufen kann. Die Frage wird dann warum wird die Schicht nur gelesen? Der wahrscheinlichste Grund (besonders wenn die Transaktion auf der Demoseite funktioniert) ist, dass Ihr Python-Skript nicht mit dem Server authentifiziert wurde. Von this page sieht es aus wie Sie hinzufügen müssen:

auth=("admin","geoserver") 

auf Ihre Anfrage (vorausgesetzt, Sie nicht das Standard-Passwort geändert haben).

+0

Vielen Dank! Das war's. Es würde eine Menge Zeit brauchen, um das herauszufinden! – user1919