0
votes

I have been trying to implement wfs-t service in openlayers3 in system. I can able to see the

<wfs:FeatureCollection xmlns="http://www.opengis.net/wfs" xmlns:wfs="http://www.opengis.net/wfs" xmlns:sf="http://www.openplans.org/spearfish" 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-basic.xsd http://www.openplans.org/spearfish http://localhost:9999/geoserver/sf/wfs?service=WFS&version=1.0.0&request=DescribeFeatureType&typeName=sf%3AAPRoad50MMI2015">
<gml:boundedBy>
<gml:Box srsName="EPSG:4326">
<gml:coordinates xmlns:gml="http://www.opengis.net/gml" decimal="." cs="," ts=" ">76.771293,12.625601 84.727878,19.166098</gml:coordinates>
</gml:Box>

My XML for the delete from my geoserver with featureID are:

<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.xsd"><Delete typeName="feature:jktouristspots50poi2015" xmlns:feature="http://172.31.4.67:9999/geoserver/mywork"><Filter xmlns="http://www.opengis.net/ogc"><FeatureId fid="jktouristspots50poi2015.55"/></Filter></Delete></Transaction>

1. My geoserver deatails:

Build Information GeoServer Version 2.11.1 Git Revision 0628848420a522efc1c6bbd90cb3346038929f6a Build Date 18-May-2017 22:36 GeoTools Version 17.1 (rev 86d8efab5104df08c81acf7b2f2342e08c9dea4b) GeoWebCache Version 1.11.0 (rev 1.11.x/02b79570ae64d548f9fb39bcab5edc9cb4d0c992)

For the above WFS request i have set my ajax function like below:

<script type="text/javascript">
var formatWFS = new ol.format.WFS();

var formatGML = new ol.format.GML({
    featureNS: 'http://localhost:9999/geoserver/mywork',
    featureType: 'jktouristspots50poi2015',
    srsName: 'EPSG:4326'
});
alert("GML",formatGML);

var xs = new XMLSerializer();

var sourceWFS = new ol.source.Vector({
     loader: function (extent, resolution, projection) {
                var url = 'http://localhost:9999/geoserver/mywork/wfs?service=WFS&' +
                    'version=1.1.0&request=GetFeature&typename=mywork:jktouristspots50poi2015&' +
                    'outputFormat=text/javascript&srsname=EPSG:4326&' +
                    'bbox=' + extent.join(',') + ',EPSG:4326';
                    alert(url);
                $.ajax({
                    url: url,
                    dataType: 'jsonp',
                    jsonpCallback: 'callback:loadFeatures',
                    jsonp: 'format_options'
                }).done(function (response) {
            alert("i am done");
        });
            },
            strategy: ol.loadingstrategy.bbox
});

 window.loadFeatures = function (response) {
            layerWFS
                .getSource()
                .addFeatures(new ol.format.GeoJSON().readFeatures(response));
        };
var layerWFS = new ol.layer.Vector({
    source: sourceWFS
});

var interaction;

var interactionSelectPointerMove = new ol.interaction.Select({
    condition: ol.events.condition.pointerMove
});

var interactionSelect = new ol.interaction.Select({
    style: new ol.style.Style({
        stroke: new ol.style.Stroke({
            color: '#FF2828'
        })
    })
});

var interactionSnap = new ol.interaction.Snap({
    source: layerWFS.getSource()
});

var map = new ol.Map({
    target: 'map',
    controls: [],
    interactions: [
        interactionSelectPointerMove,
        new ol.interaction.MouseWheelZoom(),
        new ol.interaction.DragPan()
    ],
    layers: [
        new ol.layer.Tile({
               title: 'India',
            source: new ol.source.TileWMS({
              url: 'http://ndem.nrsc.gov.in/geoserver_v3/ndem50k/wms',
              params: {LAYERS: 'ndem50k:stateadmin50census2011'}
            })
        }),
        layerWFS
    ],
    view: new ol.View({
        projection: 'EPSG:4326',
          center: [82.491,21.899],
          zoom: 5
    })
});

//wfs-t
var dirty = {};
var transactWFS = function (mode, f) {
    var node;
    switch (mode) {
        case 'insert':
            node = formatWFS.writeTransaction([f], null, null, formatGML);
            alert("after insert node",node);
            break;
        case 'update':
            node = formatWFS.writeTransaction(null, [f], null, formatGML);
            break;
        case 'delete':
            node = formatWFS.writeTransaction(null, null, [f], formatGML);
            break;
    }
    var payload = xs.serializeToString(node);
<!-- '<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.xsd"><Delete typeName="feature:jktouristspots50poi2015" xmlns:feature="http://172.31.4.67:9999/geoserver/mywork"><Filter xmlns="http://www.opengis.net/ogc"><FeatureId fid="jktouristspots50poi2015.55"/></Filter></Delete></Transaction>'; -->

    alert(payload);
    $.ajax('http://localhost:9999/geoserver/mywork/ows', {
        service: 'WFS',
        type: 'POST',
        dataType: 'xml',
        processData: true,
        contentType: 'text/xml',
        data: {data:payload}
    }).done(function() {
         alert("gekki hi ");
         console.log("indside done");
        sourceWFS.clear();
    });
    alert("out i am"+payload);
};


$('button').click(function () {
alert();
    $(this).siblings().removeClass('btn-active');
    $(this).addClass('btn-active');
    map.removeInteraction(interaction);
    interactionSelect.getFeatures().clear();
    map.removeInteraction(interactionSelect);

    switch ($(this).attr('id')) {

        case 'btnEdit':
            map.addInteraction(interactionSelect);
            interaction = new ol.interaction.Modify({
                features: interactionSelect.getFeatures()
            });
            alert("am edit "+interaction);
            map.addInteraction(interaction);
            map.addInteraction(interactionSnap);
            dirty = {};
            interactionSelect.getFeatures().on('add', function (e) {
                e.element.on('change', function (e) {
                //alert("i am add ");
                    dirty[e.target.getId()] = true;
                });
            });
            interactionSelect.getFeatures().on('remove', function (e) {
                var f = e.element;
                if (dirty[f.getId()]) {
                alert("i am in remove");
                    delete dirty[f.getId()];
                    var featureProperties = f.getProperties();
                    delete featureProperties.boundedBy;
                    var clone = new ol.Feature(featureProperties);
                    clone.setId(f.getId());
                    transactWFS('update', clone);
                }
            });
            break;

        case 'btnPoint':
            interaction = new ol.interaction.Draw({
                type: 'Point',
                source: layerWFS.getSource()
            });
            map.addInteraction(interaction);
            interaction.on('drawend', function (e) {
                transactWFS('insert', e.feature);
            });
            break;

        case 'btnLine':
        alert("line feature draw");
            interaction = new ol.interaction.Draw({
                type: 'LineString',
                source: layerWFS.getSource()
            });
            map.addInteraction(interaction);
            interaction.on('drawend', function (e) {
            var myAttrValue = prompt("Enter Attribute", "");
            var myFeature= e.feature;
            if (myAttrValue != null) {
             myFeature.set('column', myAttrValue);
             }
                transactWFS('insert', myFeature);
            });
            break;

        case 'btnArea':
            interaction = new ol.interaction.Draw({
                type: 'Polygon',
                source: layerWFS.getSource()
            });
            interaction.on('drawend', function (e) {
                transactWFS('insert', e.feature);
            });
            map.addInteraction(interaction);
            break;

        case 'btnDelete':
            interaction = new ol.interaction.Select();
            interaction.getFeatures().on('add', function (e) {
                transactWFS('delete', e.target.item(0));
                interactionSelectPointerMove.getFeatures().clear();
                interaction.getFeatures().clear();
            });
            map.addInteraction(interaction);
            break;

        default:
            break;
    }
});
</script>

How can i enable global setting in geoserver, what is ows? If i pass the existing path also its throwing error like:

PATH OF MY WORKSPACE IN GEOSERVER: C:\Program Files (x86)\GeoServer 2.11.1\data_dir\workspaces\mywork\jktourisam workspace path in geoserevrwfs-t.jpgwfs layer on map with wfs-t options

postgislayer.html:1 XMLHttpRequest cannot load http://localhost:9999/geoserver/mywork/wfs. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access. The response had HTTP status code 403.

I have tried many ways, i couldn't find the solution.......

I was able to view the added WFS vector layer on my map. Is there any parameter wrong in my code? Mean while i have tested WFS-T with same url of layer from my geoserver, at there also i cant delete and insert features to geoserver and postgres, but i can able to draw on map by using that polygon,line and point features on map and can able to retrieve the feature id? I want to implement CQL and ECQL filters also in my code kindly provide any reference links to learn. Thank you

Mean while alerting success from ajax call(POST) is also not working, i think it was because of the wrong url i am pass? Is it correct? Please guide me to set environment in geoserver to perform wfs-t..

1
I have tried all possible solutions from search reasult, i couldnt find global setting option from geoserveruser28536

1 Answers

0
votes

You need to enable CORS in your container. See this question if you are using Jetty as your container, or this question if you use tomcat.