Что я сделал не так при реализации Leaflet Draw. Как использовать WFST в этом конкретном примере?

Я новичок в этой области развития GeoInformation. Я следую приведенной ниже схеме конвейерной архитектуры, чтобы решить проблему приложений на основе ГИС.

PostGIS - GeoServer - Leaflet

Я настроил свое листовое клиентское приложение, которое собирает листы на карту. Я также использую некоторые листовые плагины (например, Draw, Zoom), чтобы дать пользователям возможность отмечать и рисовать на карте.

Я могу нарисовать и получить GeoJSON-функции нарисованного многоугольника, как показано ниже:

GeoJson отредактированных полигонов

Я застрял после этой части, пытаясь понять, как мне нужно отправить нарисованный запрос полигона и получить полигон (который сохранен) программным способом. Я знаю, что ответ WFS-T, но как мне использовать это в моем сыром коде. Вот пример необработанного кода:

Ссылка на необработанный код: https://pastebin.com/wCAHxVc0Follow the link

Рекомендации:

  1. https://gis.stackexchange.com/questions/266402/save-leaflet-drawn-features-with-attributes-to-postgis

  2. https://github.com/Flexberry/Leaflet-WFST

1 ответ

Лучший способ понять WFS-T - использовать демоверсию GeoServer (ссылка: http://localhost:8080/geoserver/web/wicket/bookmarkable/org.geoserver.web.demo.DemoRequestsPage?5). Основной проблемой для меня было выяснить, как мне вставить и обновить детали транзакции. Изучение демоверсии GeoServer дало мне решение этой проблемы.

Вот пример примера:

var postdata =  "<wfs:Transaction service="WFS" version="1.0.0"   xmlns:wfs="http://www.opengis.net/wfs"   xmlns:topp="http://www.openplans.org/topp"   xmlns:gml="http://www.opengis.net/gml"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd http://www.openplans.org/topp http://localhost:8080/geoserver/wfs/DescribeFeatureType?typename=topp:tasmania_roads"> <wfs:Insert>
        <topp:tasmania_roads>
          <topp:the_geom>
            <gml:MultiLineString srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
              <gml:lineStringMember>
                <gml:LineString>
                  <gml:coordinates decimal="." cs="," ts=" ">
    494475.71056415,5433016.8189323 494982.70115662,5435041.95096618
                  </gml:coordinates>
                </gml:LineString>
              </gml:lineStringMember>
            </gml:MultiLineString>
          </topp:the_geom>
          <topp:TYPE>alley</topp:TYPE>
        </topp:tasmania_roads>   </wfs:Insert> </wfs:Transaction>"

Этот XML-запрос впоследствии можно использовать для отправки в GeoServer для манипулирования с использованием вызова AJAX, как показано ниже:

 $.ajax({
    type: "POST",
    url: gs.wfs,
    dataType: "xml",
    contentType: "text/xml",
    data: postdata,
    //TODO: Error handling
    success: function(xml) {  
      //TODO: User feedback
      console.log("Successfully inserted");
    }
  });

Для лучшего понимания сценария применения WFS-T попробуйте следующий URL: https://georepublic.info/en/blog/2012/leaflet-example-with-wfs-t/. Это должно помочь вам начать работу с WFS-T. Приятного редактирования карты:)

Другие вопросы по тегам