Openlayers-3 WFS-T (Postgis function via geoserver)

I have a problem publishing functions from ol3 to postgis db via geoservers wfs.When I run this code, I manage to insert the gid (pk) and bin columns, but the_geom (Geometry) column is empty.

function addInteraction() {
   draw = new ol.interaction.Draw({
     features: featureOverlay.getFeatures(),
     type: /** @type {ol.geom.GeometryType} */ (typeSelect.value)

   });
   draw.on('drawend', function(evt) {
        var feature = evt.feature;
        feature.set('bin', 0);
        var fid = feature.getId();
        var node = format.writeTransaction([feature], null, null, {
            gmlOptions: {srsName: "EPSG:3857"},
            featureNS: "fiware",
            featureType: "nyc_buildings"        
        });
        $.ajax({
            type: "POST",
            url: "http://192.168.4.33:9090/geoserver/wfs",
            data: new XMLSerializer().serializeToString(node),

            contentType: 'text/xml',
            success: function(data) {
                var result = format.readTransactionResponse(data);
                feature.setId(result.insertIds[0]);

            },
            error: function(e) {
                var errorMsg = e? (e.status + ' ' + e.statusText) : "";
                bootbox.alert('Error saving this feature to GeoServer.<br><br>'
                    + errorMsg);
            },
            context: this
        });

   });
   map.addInteraction(draw);
}

Xml I get:

<Transaction xmlns="http://www.opengis.net/wfs" service="WFS"  version="1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs                         http://schemas.opengis.net/wfs/1.1.0/WFS-transaction.xsd                        http://192.168.4.33:9090/geoserver/grp/wfs/DescribeFeatureType?typename=fiware:nyc_buildings">
  <Insert>
     <nyc_buildings>
       <geometry>
         <Polygon xmlns="http://www.opengis.net/gml" srsName="EPSG:3857">
           <exterior>
             <LinearRing srsName="EPSG:3857">
               <posList>-12682023.77343518 4567060.841291264 -11077457.675672762 2571137.15870874 -9629434.611838378 5819405.112715591 -12682023.77343518 4567060.841291264
               </posList> 
             </LinearRing>
            </exterior>
          </Polygon>
       </geometry>
       <bin>0</bin>
    </nyc_buildings>
 </Insert>
</Transaction>

And the xml that I know works:

<wfs:Transaction
service="WFS"
version="1.1.0"
xmlns:fiware="fiware"
xmlns:wfs="http://www.opengis.net/wfs"
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.1.0/WFS-transaction.xsd
http://192.168.4.33:9090/geoserver/grp/wfs    /DescribeFeatureType?typename=fiware:nyc_buildings">
<wfs:Insert>
    <fiware:nyc_buildings>
        <fiware:bin>0</fiware:bin>
        <fiware:the_geom>
            <gml:MultiSurface srsDimension="2" srsName="http://www.opengis.net/gml/srs/epsg.xml#2908">
                <gml:surfaceMember>
                    <gml:Polygon srsDimension="2">
                        <gml:exterior>
                            <gml:LinearRing srsDimension="2">
                                <gml:posList>988431.501 208900.429 988414.001 208910.222 988393.197 208921.866 988439.703 209005.415 988460.579 208993.729 988481.799 208981.856 988462.619 208948.07 988456.73 208951.37 988442.511 208925.97 988448.961 208922.361 988439.27 208904.93 988435.53 208898.25 988431.501 208900.429</gml:posList>
                            </gml:LinearRing>
                        </gml:exterior>
                    </gml:Polygon>
                </gml:surfaceMember>
            </gml:MultiSurface>
        </fiware:the_geom>
    </fiware:nyc_buildings>
</wfs:Insert>

Any idea?

+4
source share
2 answers

Here is a more complete code regarding wfs-t:

var format = new ol.format.WFS({featureNS:"fiware",featureType:'fw_core',schemaLocation:"http://www.opengis.net/wfs \
                    http://schemas.opengis.net/wfs/1.1.0/WFS-transaction.xsd \
                    http://192.168.4.33:9090/geoserver/grp/wfs/DescribeFeatureType?typename=fiware:fw_core"});
function addInteraction() {
           draw = new ol.interaction.Draw({
             features: featureOverlay.getFeatures(),
             type: /** @type {ol.geom.GeometryType} */ (typeSelect.value)

           });
           draw.on('drawend', function(evt) {
                // create a unique id
                // it is later needed to delete features
                // give the feature this id
                var feature = evt.feature;
               feature.set('geometry', feature.getGeometry()); 
               var node = format.writeTransaction([feature], null, null, {
                    gmlOptions: {srsName: "EPSG:3857"},
                    featureNS: "fiware",
                    featureType: "fiware:fw_core"


                });

                $.ajax({
                    type: "POST",
                    url: "http://192.168.4.33:9090/geoserver/wfs",
                    data: new XMLSerializer().serializeToString(node),

                    contentType: 'text/xml',
                    success: function(data) {
                        var result = format.readTransactionResponse(data);
                        feature.setId(result.insertIds[0]);

                    },
                    error: function(e) {
                        var errorMsg = e? (e.status + ' ' + e.statusText) : "";
                        bootbox.alert('Error saving this feature to GeoServer.<br><br>'
                            + errorMsg);
                    },
                    context: this
                });

              });
           map.addInteraction(draw);

         }

Also, when defining a vector layer on Geoserver, on the publication tab, you must determine which column you are using as the geometry column.

Another thing, depending on the version of OpenLayers 3, you may need node.impl instead of node in this line of code:

new XMLSerializer().serializeToString(node.impl)

Hope this helps!

+3

, , . :

 draw.on('drawend', function(evt) {
            var feature = evt.feature;
            feature.set('geometry', feature.getGeometry());
            var fid = feature.getId();
            var node = format.writeTransaction([feature], null, null, {
                gmlOptions: {srsName: "EPSG:3857"},
                featureNS: "fiware",
                featureType: "nyc_buildings"        
            });
+1

All Articles