1

I'm trying to draw objects from Leaflet (Leaflet.draw) into a PostGIS database. From https://www.npmjs.com/package/leaflet-wfst it's the Flexberry one if I'm right

I enabled JSONP in GeoServer, I created a workspace that allowed complete WFS transactions linked to a specific PostGIS user created through

CREATE USER drafts;

ALTER USER drafts WITH PASSWORD 'whatever';

CREATE DATABASE drafts;

GRANT ALL PRIVILEGES ON DATABASE drafts TO drafts;

CREATE EXTENSION postgis;

\q

I started again using drafts account by psql -h localhost drafts drafts

CREATE TABLE public.sites

(

gid serial NOT NULL,

the_geom geometry(Point,4326),

CONSTRAINT sites_pkey PRIMARY KEY (gid )

);

CREATE INDEX sites_the_geom_gist ON public.sites

USING gist (the_geom );

I added sites in my workspace, allowed for any public user to modify this layer,

and created the following page from a Polygon example:

<!DOCTYPE html>
<html>
<head lang="en">
 <meta charset="UTF-8">
 <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.2.0/leaflet.css"/>
 <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"/>
 <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.toolbar.js/0.3.0/leaflet.toolbar.css" />
 <style>
 html, body, #map {
 margin: 0;
 height: 100%;
 width: 100%;
 }
 </style>
 <title>Leaflet-WFST polygon demo</title>
</head>
<body>
<div id="map"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/leaflet/1.2.0/leaflet.js"></script>
<link rel="stylesheet" href="https://mappingforyou.eu/javascript/leaflet.draw.css" /> 
<script src="https://mappingforyou.eu/javascript/leaflet.draw-src.js"></script>
<link type="text/css" rel="stylesheet" href="https://mappingforyou.eu/javascript/leaflet-easybutton.css" />
<script type="text/javascript" src="https://mappingforyou.eu/javascript/leaflet-easybutton.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/proj4leaflet/1.0.2/proj4leaflet.js"></script>
<script src="https://mappingforyou.eu/javascript/leaflet-wfst.src.js"></script>
<script>
 var map = L.map('map', {editable: true}).setView([48.5, 2], 10);
 // add an OpenStreetMap tile layer
 L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
 attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
 }).addTo(map);
 var wfstPoly = new L.WFST({
 url: 'https://mappingforyou.eu/geoserver/ows',
 typeNS: 'opendata',
 typeName: 'sites',
 crs: L.CRS.EPSG4326,
 geometryField: 'the_geom',
 forceMulti: true,
 schema: 'https://mappingforyou.eu/geoserver/wfs/DescribeFeatureType?version=1.1.0&typename=opendata:sites',
 style: {
 color: 'blue',
 weight: 2
 }
 }).addTo(map)
 .once('load', function () {
 map.fitBounds(wfstPoly);
 });
 
 ////// draw and edit
 
 var drawControl = new L.Control.Draw({ 
 draw:{circle:false, circlemarker:false, rectangle:false,
 },
 edit:{featureGroup: wfstPoly } });
map.addControl(drawControl);
map.on('draw:created', function (e) {
 var layer = e.layer;
 wfstPoly.addLayer(layer)});
map.on('draw:edited', function (e) {
 var layers = e.layers;
 layers.eachLayer( function (layer) {
 wfstPoly.editLayer(layer);
 })
 
 });
 
 // Save button
L.easyButton('fa-save', function () {
 wfstPoly.save();
 }, 'Save changes').addTo(map);
 
 
</script>
</body>
</html>

But newly created points would not be saved. Only points created meanwhile on a PostGIS connection of QGIS are showing up.

Is there something I missed?

Vince
20.5k16 gold badges49 silver badges65 bronze badges
asked Jun 11, 2022 at 19:08

1 Answer 1

1

At this point of the research, what was necessary was to

  1. globally allow WFS transactions in Geoserver for all workspaces

and then in

  1. Security > Data Security , allow only ADMIN to write in the workspaces you want to preserve from external modifications

like dataspacetopreserve.*.w (from anonymous writing) = only ADMIN and not ROLE_ANONYMOUS

answered Jun 12, 2022 at 8:25

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.