diff options
Diffstat (limited to 'chimere/static/edit_route_map.js')
-rw-r--r-- | chimere/static/edit_route_map.js | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/chimere/static/edit_route_map.js b/chimere/static/edit_route_map.js new file mode 100644 index 0000000..dcf7c84 --- /dev/null +++ b/chimere/static/edit_route_map.js @@ -0,0 +1,121 @@ +/* Copyright (C) 2008 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +See the file COPYING for details. +*/ + +/* map edit */ + +var map; +var currentControl; + +/* availaible map layers */ +var vectors = new OpenLayers.Layer.Vector("Vector Layer"); + +vectors.events.on({ + "featuremodified": updateForm, + "featureadded": featureCreated +}); + +var currentFeature; +function featureCreated(event) { + /* toggle to edition mode */ + pathCreate.deactivate(); + currentControl = pathModify; + var help_route_create = document.getElementById('help-route-create'); + if (help_route_create){ + help_route_create.style.display = 'None'; + } + document.getElementById('help-route-modify').style.display = 'block'; + + pathModify.activate(); + updateForm(event); + pathModify.selectControl.select(event.feature); + +} + +function initFeature(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); + } + var linestring = new OpenLayers.Geometry.LineString(point_array); + currentFeature = new OpenLayers.Feature.Vector(); + currentFeature.geometry = linestring; + vectors.addFeatures([currentFeature]); + currentControl = pathModify; + /*zoom to the route*/ + var bounds = vectors.getDataExtent(); + if (bounds) map.zoomToExtent(bounds); +} + +function updateForm(event) { + /* update the form */ + currentFeature = event.feature; + document.getElementById('id_route').value = currentFeature.geometry; +} + + +/* path control */ +var pathCreate = new OpenLayers.Control.DrawFeature(vectors, + OpenLayers.Handler.Path); +var currentControl = pathCreate; + +var pathModify = new OpenLayers.Control.ModifyFeature(vectors, + {clickout:false, toggle:false}); + +/* main initialisation function */ +function init(){ + var options = { + controls:[new OpenLayers.Control.Navigation(), + new OpenLayers.Control.PanPanel(), + new OpenLayers.Control.ZoomPanel(), + new OpenLayers.Control.Attribution(), + pathCreate, + pathModify], + maxResolution: 156543.0399, + units: 'm', + projection: epsg_projection, + displayProjection: epsg_display_projection, + }; + if (restricted_extent){options['restrictedExtent'] = restricted_extent;} + map = new OpenLayers.Map('map_edit', options); + + vectors.setOpacity(0.5); + map.addLayers([map_layer, vectors]); + /* zoom to the appropriate extent */ + if (!zoomToCurrentExtent(map)){ + map.setCenter(centerLonLat, 12); + } +} + +function toggleDrawOn() { + currentControl.activate(); + document.getElementById('draw-toggle-off').style.display = 'None'; + document.getElementById('draw-toggle-on').style.display = 'block'; + if (currentFeature){ + pathModify.selectControl.select(currentFeature); + } +} + +function toggleDrawOff() { + currentControl.deactivate(); + document.getElementById('draw-toggle-on').style.display = 'None'; + document.getElementById('draw-toggle-off').style.display = 'block'; +} |