summaryrefslogtreecommitdiff
path: root/chimere/static
diff options
context:
space:
mode:
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
commitec9676ef71f859a85707ab712568bf9d7f83b392 (patch)
tree21e3fda8cc4d1955c5453fcc9fcb4731f966dc09 /chimere/static
parent4d483ae06f8e7f90c76d2f4c6bb2745dc573c89e (diff)
downloadChimè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.js88
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);