summaryrefslogtreecommitdiff
path: root/chimere/static/edit_map.js
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/static/edit_map.js')
-rw-r--r--chimere/static/edit_map.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/chimere/static/edit_map.js b/chimere/static/edit_map.js
new file mode 100644
index 0000000..8f37f6b
--- /dev/null
+++ b/chimere/static/edit_map.js
@@ -0,0 +1,146 @@
+/* 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;
+
+/* availaible map layers */
+var layerMarkers = new OpenLayers.Layer.Markers('POIs');
+
+/* default size and offset for icon */
+var size = new OpenLayers.Size(21, 25);
+var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
+var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset);
+
+/* set a marker with a click on the map */
+var setMarker = function (event){
+ event = event || window.event;
+ var lonlat = layerMarkers.getLonLatFromViewPortPx(event.xy);
+ putMarker(lonlat, false);
+ OpenLayers.Event.stop(event);
+}
+
+/* put the marker on the map and update latitude and longitude fields */
+var putMarker = function (lonlat, zoom){
+ if (marker) {
+ layerMarkers.removeMarker(marker);
+ }
+ var marker = new OpenLayers.Marker(lonlat.clone(), icon);
+ layerMarkers.addMarker(marker);
+ lonlat = lonlat.clone().transform(map.getProjectionObject(),
+ epsg_display_projection);
+ document.getElementById('id_point').value = 'POINT(' + lonlat.lon +
+ ' ' + lonlat.lat + ')';
+ document.getElementById('live_latitude').value = lonlat.lon;
+ document.getElementById('live_longitude').value = lonlat.lat;
+ /*zoom to the point*/
+ if (zoom){
+ var bounds = layerMarkers.getDataExtent();
+ if (bounds) map.zoomToExtent(bounds);
+ }
+ return;
+}
+
+/* main initialisation function */
+function init(){
+ var options = {
+ controls:[new OpenLayers.Control.Navigation(),
+ new OpenLayers.Control.PanPanel(),
+ new OpenLayers.Control.ZoomPanel(),
+ new OpenLayers.Control.Attribution()],
+ 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);
+ layerMarkers.setOpacity(0.5);
+ map.addLayers([map_layer, layerMarkers]);
+ map.events.register('click', map, setMarker);
+ /* zoom to the appropriate extent */
+ if (!zoomToCurrentExtent(map)){
+ map.setCenter(centerLonLat, 12);
+ }
+}
+
+
+/* code for drag'n drop : delayed for further version of openlayers */
+
+/*
+function init_b(){
+ init();
+
+ marker.events.register('mouseup', marker, releaseMarker);
+ marker.events.register('mousedown', marker, catchMarker);
+ marker.events.register('mouseover', marker, markerOver);
+ marker.events.register('mouseout', marker, markerOut);
+
+ map.events.register('mousemove', map, onMouseMove);
+ map.events.register('moveend', map, onMoveEnd);
+}
+
+var marker_catched = false;
+
+function catchMarker(event){
+ marker_catched = true;
+ event = event || window.event;
+ OpenLayers.Event.stop(event);
+}
+
+function releaseMarker(event){
+ event = event || window.event;
+ if(marker_catched) {
+ marker_catched = false;
+ lonlat = layerMarkers.getLonLatFromViewPortPx(marker.icon.px);
+ marker.lonlat = lonlat;
+ document.getElementById('latitude').value = marker.lonlat.lat;
+ document.getElementById('longitude').value = marker.lonlat.lon;
+ }
+ OpenLayers.Event.stop(event);
+}
+
+function onMouseMove(event) {
+ event = event || window.event;
+ if (!marker_catched) {return;}
+ marker.icon.px = null;
+ marker.icon.moveTo(new OpenLayers.Pixel(event.xy.x + delta_x,
+ event.xy.y + delta_y + 20));
+ defLiveLatLon();
+ lonlat = layerMarkers.getLonLatFromViewPortPx(marker.icon.px).transform(epsg_projection, epsg_display_projection);
+ live_longitude.value = lonlat.lon;
+ live_latitude.value = lonlat.lat;
+ OpenLayers.Event.stop(event);
+}
+
+function onMoveEnd(event) {
+ event = event || window.event;
+ marker.icon.px = map.getPixelFromLonLat(marker.lonlat);
+ OpenLayers.Event.stop(event);
+}
+
+var markerOver = function (evt) {
+ document.body.style.cursor='pointer';
+ OpenLayers.Event.stop(evt);
+};
+var markerOut = function (evt) {
+ document.body.style.cursor='auto';
+ OpenLayers.Event.stop(evt);
+};
+*/