diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-03-06 19:07:33 +0100 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-03-06 19:07:33 +0100 |
| commit | ec9676ef71f859a85707ab712568bf9d7f83b392 (patch) | |
| tree | 21e3fda8cc4d1955c5453fcc9fcb4731f966dc09 /chimere/static | |
| parent | 4d483ae06f8e7f90c76d2f4c6bb2745dc573c89e (diff) | |
| download | Chimère-ec9676ef71f859a85707ab712568bf9d7f83b392.tar.bz2 Chimère-ec9676ef71f859a85707ab712568bf9d7f83b392.zip | |
Admin: polygon edition
Diffstat (limited to 'chimere/static')
| -rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 88 |
1 files changed, 75 insertions, 13 deletions
diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index a94670c..057854a 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -383,13 +383,31 @@ function transform(obj) { target.style.cursor = hit ? 'pointer' : ''; }); + settings.WKT = new ol.format.WKT(); /* Vectors layer */ settings.layerVectors = new ol.layer.Vector(); settings.map.addLayer(settings.layerVectors); if (settings.edition && (settings.edition_type == 'polygon' || settings.edition_type == 'route')){ - settings.editionSource = new ol.source.Vector({wrapX: false}); + + settings.features = new ol.Collection(); + + settings.editionSource = new ol.source.Vector( + {features: settings.features}); + + settings.editionSource.on( + 'changefeature', + function(changed) { + if (changed) methods.updateInput(); + }); + + settings.editionSource.on( + 'addfeature', + function(changed) { + if (changed) methods.updateInput(); + }); + settings.editionVector = new ol.layer.Vector({ source: settings.editionSource, style: new ol.style.Style({ @@ -419,6 +437,21 @@ function transform(obj) { source: settings.editionSource, type: (edition_type), }); + settings.draw_activated = false; + + settings.draw.on("drawend", function() { + settings.map.removeInteraction(settings.draw); + settings.draw_activated = false; + }); + + settings.modify = new ol.interaction.Modify({ + features: settings.features, + deleteCondition: function(event) { + return ol.events.condition.shiftKeyOnly(event) && + ol.events.condition.singleClick(event); + } + }); + settings.modify_activated = false; } // OL3-deprecated settings.layerVectors.setOpacity(0.8); /* OL3-deprecated-routing @@ -1033,9 +1066,19 @@ function transform(obj) { }, activateDraw: function (){ settings.map.addInteraction(settings.draw); + settings.map.addInteraction(settings.modify); + settings.draw_activated = true; + settings.modify_activated = true; }, deactivateDraw: function (){ - settings.map.removeInteraction(settings.draw); + if (settings.draw_activated){ + settings.map.removeInteraction(settings.draw); + settings.draw_activated = false; + } + if (settings.modify_activated){ + settings.map.removeInteraction(settings.modify); + settings.modify_activated = false; + } }, /* * Put a marker on the map @@ -1801,6 +1844,14 @@ function transform(obj) { } }, + updateInput: function(){ + if (settings.edition_type == 'linestring'){ + methods.updateRoutingInput(); + } + if (settings.edition_type == 'polygon'){ + methods.updatePolygonInput(); + } + }, updateRoutingInput: function(){ if (!settings.current_routes_features) { return; @@ -1822,6 +1873,17 @@ function transform(obj) { var linestring = new OpenLayers.Geometry.LineString(point_array); jQuery('#id_route').val(String(linestring)); }, + updatePolygonInput: function(){ + var features = settings.editionSource.getFeatures(); + if (!features.length) { + jQuery('#id_polygon').val(''); + return; + } + var wkt = settings.WKT.writeFeature(features[0], { + dataProjection: EPSG_DISPLAY_PROJECTION, + featureProjectsion: EPSG_PROJECTION}); + jQuery('#id_polygon').val(String(wkt)); + }, activateCurrentControl: function(){ if (settings.current_control){ settings.current_control.activate(); @@ -1843,18 +1905,18 @@ function transform(obj) { settings.current_control.deactivate(); } }, - initFeature: function(json_geometry){ - var json = new OpenLayers.Format.JSON(); - var polyline = json.read(json_geometry); - var point_array = new Array(); - for (i=0; i<polyline.coordinates.length; i++){ - var point = new OpenLayers.Geometry.Point( - polyline.coordinates[i][0], - polyline.coordinates[i][1]); - point_array.push(point); + initFeature: function(wkt_geometry){ + feature = settings.WKT.readFeature(wkt_geometry, { + dataProjection: EPSG_DISPLAY_PROJECTION, + featureProjectsion: EPSG_PROJECTION}); + if (settings.draw_activated){ + settings.map.removeInteraction(settings.draw); + settings.draw_activated = false; } - var linestring = new OpenLayers.Geometry.LineString(point_array); - methods.initFeatureFromGeometry(linestring); + settings.map.getView().fit(feature.getGeometry(), + settings.map.getSize()); + settings.editionSource.addFeature(feature); + methods.updateInput(); }, initFeatureFromWkt: function(wkt_geometry){ var linestring = OpenLayers.Geometry.fromWKT(wkt_geometry); |
