summaryrefslogtreecommitdiff
path: root/static/edit_map.js
blob: 5a9c9971ba494a778958ef917cddb1473d7a1ad5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/* map edit */

/* availaible map layers */
var layerMapnik = new OpenLayers.Layer.OSM.Mapnik('Mapnik');
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;
    lonlat = layerMarkers.getLonLatFromViewPortPx(event.xy);
    putMarker(lonlat);
    OpenLayers.Event.stop(event);
}

/* put the marker on the map and update latitude and longitude fields */
var putMarker = function (lonlat){
    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;
}

/* main initialisation function */
function init(){
    map = new OpenLayers.Map ('map_edit', {
        controls:[new OpenLayers.Control.Navigation(),
                    new OpenLayers.Control.PanZoomBar(),
                    new OpenLayers.Control.Attribution()],
        maxExtent: maxExtent,
        maxResolution: 156543.0399,
        units: 'm',
        projection: epsg_projection,
        displayProjection: epsg_display_projection,
    } );
    layerMarkers.setOpacity(0.5);
    map.addLayers([layerMapnik, layerMarkers]);
    map.events.register('click', map, setMarker);
    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);
};
*/