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';
}
|