Merge pull request 'Map client update' (#216) from map_tst into master

Reviewed-on: SGD-Nord/konova#216
This commit is contained in:
mpeltriaux 2022-10-07 13:57:45 +02:00
commit 974c4dbce5
2 changed files with 36 additions and 37 deletions

View File

@ -221,8 +221,17 @@ class Geometry(BaseResource):
polygons.append(p) polygons.append(p)
geojson = { geojson = {
"type": "FeatureCollection", "type": "FeatureCollection",
"crs": {
"type": "name",
"properties": {
"name": f"urn:ogc:def:crs:EPSG::{geom.srid}"
}
},
"features": [ "features": [
json.loads(x.geojson) for x in polygons {
"type": "Feature",
"geometry": json.loads(x.geojson)
} for x in polygons
] ]
} }
return geojson return geojson

View File

@ -394,16 +394,12 @@ netgis.MapOpenLayers.prototype.clearAll = function()
{ {
for ( var i = 0; i < this.layers.length; i++ ) for ( var i = 0; i < this.layers.length; i++ )
{ {
if(this.layers[i] === this.editLayer){
continue;
}
this.map.removeLayer( this.layers[ i ] ); this.map.removeLayer( this.layers[ i ] );
} }
this.layers = [this.editLayer]; this.layers = [];
this.snapFeatures.clear(); this.snapFeatures.clear();
this.snapFeatures.push(this.editLayer);
}; };
netgis.MapOpenLayers.prototype.onUpdateStyle = function( e ) netgis.MapOpenLayers.prototype.onUpdateStyle = function( e )
@ -1144,15 +1140,9 @@ netgis.MapOpenLayers.prototype.updateEditLayerItem = function()
netgis.MapOpenLayers.prototype.onEditFeaturesLoaded = function( e ) netgis.MapOpenLayers.prototype.onEditFeaturesLoaded = function( e )
{ {
var json = e; var json = e;
var format = new ol.format.GeoJSON(); var self = this;
var features = format.readFeatures( json ); window.setTimeout( function() { self.createLayerGeoJSON( "Import", json ); }, 10 );
this.editLayer.getSource().addFeatures( features );
//this.snapFeatures.push( e.feature );
if ( features.length > 0 )
this.view.fit( this.editLayer.getSource().getExtent(), { padding: [ 40, 40, 40, 40 ] } );
}; };
netgis.MapOpenLayers.prototype.onDragEnter = function( e ) netgis.MapOpenLayers.prototype.onDragEnter = function( e )
@ -1267,6 +1257,7 @@ netgis.MapOpenLayers.prototype.createLayerGeoJSON = function( title, data )
//NOTE: netgis.util.foreach( proj4.defs, function( k,v ) { console.info( "DEF:", k, v ); } ) //NOTE: netgis.util.foreach( proj4.defs, function( k,v ) { console.info( "DEF:", k, v ); } )
var projcode = projection.getCode(); var projcode = projection.getCode();
switch ( projcode ) switch ( projcode )
{ {
case "EPSG:3857": case "EPSG:3857":
@ -1277,14 +1268,14 @@ netgis.MapOpenLayers.prototype.createLayerGeoJSON = function( title, data )
//console.info( "Import Projection:", projcode ); //console.info( "Import Projection:", projcode );
break; break;
} }
default: default:
{ {
// Projection Not Supported // Projection Not Supported
console.warn( "Unsupported Import Projection:", projcode ); console.warn( "Unsupported Import Projection:", projcode );
break; break;
} }
} }
this.addImportedFeatures( features ); this.addImportedFeatures( features );
}; };
@ -1304,57 +1295,57 @@ netgis.MapOpenLayers.prototype.createLayerGML = function( title, data )
//var format = new ol.format.WFS( { featureNS: "ogr", featureType: "RLP_OG_utf8_epsg4326" } ); //var format = new ol.format.WFS( { featureNS: "ogr", featureType: "RLP_OG_utf8_epsg4326" } );
//var projection = format.readProjection( data ); //var projection = format.readProjection( data );
//var features = format.readFeatures( data, { dataProjection: "EPSG:4326", featureProjection: "EPSG:3857" } ); //var features = format.readFeatures( data, { dataProjection: "EPSG:4326", featureProjection: "EPSG:3857" } );
//var features = format.readFeatures( data, { dataProjection: this.client.config.map.projection, featureProjection: this.client.config.map.projection } ); //var features = format.readFeatures( data, { dataProjection: this.client.config.map.projection, featureProjection: this.client.config.map.projection } );
//console.info( "GML:", projection, features, features[ 0 ].getGeometry() ); //console.info( "GML:", projection, features, features[ 0 ].getGeometry() );
var features = []; var features = [];
var parser = new DOMParser(); var parser = new DOMParser();
var xml = parser.parseFromString( data, "text/xml" ); var xml = parser.parseFromString( data, "text/xml" );
// Features // Features
var featureMembers = xml.getElementsByTagName( "gml:featureMember" ); var featureMembers = xml.getElementsByTagName( "gml:featureMember" );
for ( var f = 0; f < featureMembers.length; f++ ) for ( var f = 0; f < featureMembers.length; f++ )
{ {
var props = {}; var props = {};
var node = featureMembers[ f ]; var node = featureMembers[ f ];
var child = node.children[ 0 ]; var child = node.children[ 0 ];
// Attributes // Attributes
for ( var a = 0; a < child.attributes.length; a++ ) for ( var a = 0; a < child.attributes.length; a++ )
{ {
var attribute = child.attributes[ a ]; var attribute = child.attributes[ a ];
props[ attribute.nodeName ] = attribute.nodeValue; props[ attribute.nodeName ] = attribute.nodeValue;
} }
for ( var c = 0; c < child.children.length; c++ ) for ( var c = 0; c < child.children.length; c++ )
{ {
var childNode = child.children[ c ]; var childNode = child.children[ c ];
if ( childNode.nodeName === "ogr:geometryProperty" ) continue; if ( childNode.nodeName === "ogr:geometryProperty" ) continue;
var parts = childNode.nodeName.split( ":" ); var parts = childNode.nodeName.split( ":" );
var k = parts[ parts.length - 1 ]; var k = parts[ parts.length - 1 ];
var v = childNode.innerHTML; var v = childNode.innerHTML;
props[ k ] = v; props[ k ] = v;
} }
// Geometry // Geometry
var geomprop = child.getElementsByTagName( "ogr:geometryProperty" )[ 0 ]; var geomprop = child.getElementsByTagName( "ogr:geometryProperty" )[ 0 ];
//for ( var g = 0; g < geomprop.children.length; g++ ) //for ( var g = 0; g < geomprop.children.length; g++ )
{ {
var geom = geomprop.children[ 0 ]; var geom = geomprop.children[ 0 ];
var proj = geom.getAttribute( "srsName" ); var proj = geom.getAttribute( "srsName" );
if ( proj && proj !== "EPSG:4326" && proj !== this.client.config.map.projection ) if ( proj && proj !== "EPSG:4326" && proj !== this.client.config.map.projection )
console.warn( "Unsupported Import Projection:", proj ); console.warn( "Unsupported Import Projection:", proj );
switch ( geom.nodeName ) switch ( geom.nodeName )
{ {
case "gml:Polygon": case "gml:Polygon":
@ -1362,7 +1353,7 @@ netgis.MapOpenLayers.prototype.createLayerGML = function( title, data )
props[ "geometry" ] = this.gmlParsePolygon( geom, proj ); props[ "geometry" ] = this.gmlParsePolygon( geom, proj );
break; break;
} }
case "gml:MultiPolygon": case "gml:MultiPolygon":
{ {
props[ "geometry" ] = this.gmlParseMultiPolygon( geom, proj ); props[ "geometry" ] = this.gmlParseMultiPolygon( geom, proj );
@ -1370,7 +1361,7 @@ netgis.MapOpenLayers.prototype.createLayerGML = function( title, data )
} }
} }
} }
var feature = new ol.Feature( props ); var feature = new ol.Feature( props );
features.push( feature ); features.push( feature );
} }
@ -1452,23 +1443,22 @@ netgis.MapOpenLayers.prototype.createLayerShapefile = function( title, shapeData
netgis.MapOpenLayers.prototype.addImportedFeatures = function( features ) netgis.MapOpenLayers.prototype.addImportedFeatures = function( features )
{ {
// ToDO: Changes in here problematic on initial data loading
// Add To Edit Layer // Add To Edit Layer
this.editEventsSilent = true; this.editEventsSilent = true;
this.editLayer.getSource().addFeatures( features ); this.editLayer.getSource().addFeatures( features );
this.editEventsSilent = false; this.editEventsSilent = false;
this.updateEditOutput(); this.updateEditOutput();
// Zoom Imported Features // Zoom Imported Features
if ( features.length > 0 ) if ( features.length > 0 )
{ {
var extent = features[ 0 ].getGeometry().getExtent(); var extent = features[ 0 ].getGeometry().getExtent();
for ( var f = 1; f < features.length; f++ ) for ( var f = 1; f < features.length; f++ )
{ {
ol.extent.extend( extent, features[ f ].getGeometry().getExtent() ); ol.extent.extend( extent, features[ f ].getGeometry().getExtent() );
} }
var padding = 40; var padding = 40;
this.view.fit( extent, { duration: 300, padding: [ padding, padding, padding, padding ] } ); this.view.fit( extent, { duration: 300, padding: [ padding, padding, padding, padding ] } );
} }