summaryrefslogtreecommitdiff
path: root/static/edit_route_map.js
blob: dcf7c84ef9088387d16f82698a5982c647788d76 (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
118
119
120
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';
}