2016-07-13 3 views
1

Я создаю приложение, в котором пользователь извлекает все функции уровня геосервера (store: postgres) и отображает их на таблице. Для этого я использую OWSLib (get_feature).Как программно обновлять данные на уровне геопространства WFS

Теперь мне нужно добавить функциональность редактирования данных (WFS-T). Насколько я знаю, OWSLib не предоставляет функциональность функции добавления/обновления.

Каким будет способ реализации такого рода функций?

Как предложил мне использовать запросы питона Lib в целях реализации WFS-T и обновленные значения на слое:

Это часть моего кода:

 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 

Когда я запускаю этот XML через демоверсии geoserver, он отлично работает. Свойство слоя получает обновление. Когда я исполню ее через мой питон скрипт я получаю исключение службы как:

<?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

Возможный дубликат https://gis.stackexchange.com/questions/184309/available-python-client-libraries-for-wfs-transactions –

+0

Ах, отлично. Не нашли эту ссылку. Это помогает, хотя кажется, что они не проложены плавно, не так ли? – user1919

+0

Это просто HTTP-запросы с заданным стандартом –

ответ

1

сообщение об ошибке (необычно) на самом деле полезно здесь - если слой только для чтения вы можете запустить обновление против него. Таким образом, возникает вопрос, почему это только слой? Наиболее вероятная причина (особенно если транзакция работает на демонстрационной странице) заключается в том, что ваш скрипт python не аутентифицировался на сервере. От this page это выглядит, как вам нужно добавить:

auth=("admin","geoserver") 

вашему запросу (если вы не изменили пароль по умолчанию).

+0

Большое спасибо! Вот и все. Это займет много времени, чтобы это выяснить! – user1919

 Смежные вопросы

  • Нет связанных вопросов^_^