1 <?xml version="1.0" encoding="ISO-8859-1"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:py="http://genshi.edgewall.org/"
6 xmlns:xi="http://www.w3.org/2001/XInclude">
7 <xi:include href="master.html" />
10 <title>Map-Tool</title>
11 <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAVDRl0qsoeYOspQi0txxVEhTO7xxs0m3ls_NApg8LzilP9E0D3hScAc_5O_qu8-pbIbSF5h8xfGEcjA" type="text/javascript"> </script>
12 <script src="${h.url_for('/yui/yahoo-dom-event/yahoo-dom-event.js')}" type="text/javascript"> </script>
13 <script src="${h.url_for('/yui/connection/connection-min.js')}" type="text/javascript"> </script>
14 <script src="${h.url_for('/yui/json/json-min.js')}" type="text/javascript"> </script>
15 <script type="text/javascript">
18 // Functions for simulated assoziative array
19 // -----------------------------------------
20 // key is integer, value is GMarker
21 // as described in file:///usr/share/doc/selfhtml/html/javascript/objekte/array.htm
22 // aa has to be created with new Object()
24 // Remove an element: delete aa[key];
25 // Return an element: aa[key]
28 // Appends the value and returns the key
29 function aa_get_unused_key(aa) {
31 for (var k in aa) if (Number(k) >= key) key = Number(k) + 1;
35 // Appends the value and returns the key
36 function aa_insert(aa, value) {
37 var key = aa_get_unused_key(aa);
42 // Length of the assoziative array
43 function aa_length(aa) {
45 for (var key in aa) ++length;
57 var wrSleddingMarkers = new Array(); // contains all sledding route markers
58 var wrInnMarkers = new Array(); // contains all inn markers
59 var wrRefMarkers = new Object(); // contains all reference markers as simulated assoziative array
65 function setAccuracyInfo(html) {
66 document.getElementById("accuracy").innerHTML = html;
70 function updateAccuracyInfo(wrMap, latlng) {
71 var pixel = wrMap.fromLatLngToContainerPixel(latlng);
72 var pixel_d = new GPoint(pixel.x - 1, pixel.y + 1)
73 var latlng_d = wrMap.fromContainerPixelToLatLng(pixel_d);
74 var accuracy = latlng.distanceFrom(latlng_d); // in m
75 var accuracy_s = (accuracy > 10) ? accuracy.toFixed(0) : accuracy.toFixed(1);
76 setAccuracyInfo("Genauigkeit: 1 Pixel entspricht " + accuracy_s + " Metern");
83 function setPositionInfo(html) {
84 document.getElementById("mapinfo").innerHTML = html;
88 // The precision digits is optional
89 function updatePositionInfo(wrMap, latlng, description, digits) {
90 var pixel = wrMap.fromLatLngToContainerPixel(latlng);
91 var pixel_d = new GPoint(pixel.x - 1, pixel.y + 1)
92 var latlng_d = wrMap.fromContainerPixelToLatLng(pixel_d);
93 if (YAHOO.lang.isUndefined(digits)) {
94 var fix_lat = Math.ceil(Math.abs(Math.log(latlng.lat() - latlng_d.lat())/Math.LN10))
95 var fix_lng = Math.ceil(Math.abs(Math.log(latlng.lng() - latlng_d.lng())/Math.LN10))
100 var lat_s = latlng.lat().toFixed(fix_lat);
101 var lng_s = latlng.lng().toFixed(fix_lng);
102 setPositionInfo(description + ": <strong>" + lat_s + " N " + lng_s + " E</strong> (" + lat_s + ", " + lng_s + ")");
106 // Sledding and Inn lists
107 // ----------------------
109 function initSledding(wrMap) {
111 var wrSleddingIcon = new GIcon(G_DEFAULT_ICON);
112 wrSleddingIcon.image = "${h.url_for('/gmap_rodelbahn_c.png')}";
113 wrSleddingIcon.shadow = "${h.url_for('/gmap_rodelbahn_c_s.png')}";
114 wrSleddingIcon.iconSize = new GSize(17, 17);
115 wrSleddingIcon.shadowSize = new GSize(23, 23);
116 wrSleddingIcon.iconAnchor = new GPoint(9, 9);
117 wrSleddingIcon.infoWindowAnchor = new GPoint(9, 9);
119 // Add one sledding route
120 function addSleddingMarker(latitude, longitude, name) {
121 var latlng = new GLatLng(latitude, longitude);
122 var marker = new GMarker(latlng, {icon: wrSleddingIcon, title: name});
123 function openSleddingInfoWindow() {
124 var lat_s = latlng.lat().toFixed(6);
125 var lng_s = latlng.lng().toFixed(6);
126 marker.openInfoWindowHtml(name + "<br/><strong>" + lat_s + " N " + lng_s + " E</strong><br/>" + lat_s + ", " + lng_s);
128 GEvent.addListener(marker, "click", openSleddingInfoWindow);
129 wrSleddingMarkers.push(marker);
130 wrMap.addOverlay(marker);
136 success: function(o) {
137 sleddings = YAHOO.lang.JSON.parse(o.responseText).sledding;
138 for (var i = 0; i < sleddings.length; ++i) addSleddingMarker(sleddings[i][1], sleddings[i][2], sleddings[i][0]);
140 failure: function(o) {alert("Konnte die Rodelbahnen-Daten nicht vom Server laden");}
142 var url = "${h.url_for(controller='maptool', action='ajax_sledding')}";
143 YAHOO.util.Connect.asyncRequest('GET', url, callback, null);
147 function initInns(wrMap) {
149 var wrInnIcon = new GIcon(G_DEFAULT_ICON);
150 wrInnIcon.image = "${h.url_for('/gmapGasthaus.png')}";
153 function addInnMarker(latitude, longitude, name) {
154 var latlng = new GLatLng(latitude, longitude);
155 var marker = new GMarker(latlng, {icon: wrInnIcon, title: name});
156 function openInnInfoWindow() {
157 var lat_s = latlng.lat().toFixed(6);
158 var lng_s = latlng.lng().toFixed(6);
159 marker.openInfoWindowHtml(name + "<br/><strong>" + lat_s + " N " + lng_s + " E</strong><br/>" + lat_s + ", " + lng_s);
161 GEvent.addListener(marker, "click", openInnInfoWindow);
162 wrInnMarkers.push(marker);
163 wrMap.addOverlay(marker);
169 success: function(o) {
170 inns = YAHOO.lang.JSON.parse(o.responseText).inns;
171 for (var i = 0; i < inns.length; ++i) addInnMarker(inns[i][1], inns[i][2], inns[i][0]);
173 failure: function(o) {alert("Konnte die Hütten-Daten nicht vom Server laden");}
175 var url = "${h.url_for(controller='maptool', action='ajax_inns')}";
176 YAHOO.util.Connect.asyncRequest('GET', url, callback, null);
180 function showMarkers(markers, show) {
181 for (var i = 0; i != markers.length; ++i)
182 if (show) markers[i].show(); else markers[i].hide();
186 function removeRefMarker(refMarkerId) {
187 refMarker = wrRefMarkers[refMarkerId];
188 wrMap.removeOverlay(refMarker);
190 delete wrRefMarkers[refMarkerId];
194 // Done when loading HTML
195 // ----------------------
196 function initialize() {
197 if (GBrowserIsCompatible()) {
198 wrMap = new GMap2(document.getElementById('map'), {'mapTypes': [G_NORMAL_MAP, G_HYBRID_MAP, G_PHYSICAL_MAP, G_SATELLITE_MAP]});
199 wrMap.addControl(new GLargeMapControl());
200 wrMap.addControl(new GMapTypeControl());
201 wrMap.addControl(new GScaleControl());
202 wrMap.setCenter(new GLatLng(47.22, 11.42), 10);
203 // wrMap.enableGoogleBar();
204 wrMap.setMapType(G_PHYSICAL_MAP);
205 wrMap.enableScrollWheelZoom();
206 updateAccuracyInfo(wrMap, wrMap.getCenter());
207 updatePositionInfo(wrMap, wrMap.getCenter(), "Zentrum der Karte");
211 // Event at wrMap move
212 GEvent.addListener(wrMap, "moveend", function() {updateAccuracyInfo(wrMap, wrMap.getCenter()); updatePositionInfo(wrMap, wrMap.getCenter(), "Zentrum der Karte");});
214 // Event at wrMap click
215 function onMapClick(overlay, latlng) {
216 if (YAHOO.lang.isUndefined(latlng)) {
217 // setPositionInfo(""); // would override coordinates shown when a user clicks on a marker
219 updateAccuracyInfo(wrMap, latlng);
220 if (overlay == null) {
222 var refMarker = new GMarker(latlng, {title: "Koordinaten-Markierung (kann gezogen werden)", draggable: true});
223 var refMarkerId = aa_insert(wrRefMarkers, refMarker); // add it to the ref marker assoziative array
224 // Event at click on marker
225 function onRefMarkerClick() {
226 var lat_s = refMarker.getLatLng().lat().toFixed(6);
227 var lng_s = refMarker.getLatLng().lng().toFixed(6);
228 refMarker.openInfoWindowHtml("Koordinaten<br/><strong>" + lat_s + " N " + lng_s + " E</strong><br/>" + lat_s + ", " + lng_s + "<br/><a onclick=\"removeRefMarker(" + refMarkerId + ")\" href=\"javascript:void(0)\">Marker entfernen</a>");
229 updatePositionInfo(wrMap, refMarker.getLatLng(), "Koordinaten des Markers", 6);
231 GEvent.addListener(refMarker, "click", onRefMarkerClick);
232 // Event at drag marker
233 function onRefMarkerDragEnd() {updatePositionInfo(wrMap, refMarker.getLatLng(), "Neue Koordinaten des Markers");}
234 GEvent.addListener(refMarker, "dragend", onRefMarkerDragEnd);
235 wrMap.addOverlay(refMarker);
236 updatePositionInfo(wrMap, latlng, "Koordinaten des neuen Markers");
239 updatePositionInfo(wrMap, latlng, "Koordinaten des letzten Klicks");
243 GEvent.addListener(wrMap, "click", onMapClick);
246 document.getElementById("show_sledding").checked = true;
247 document.getElementById("show_inns").checked = true;
255 <body onload="initialize()" onunload="GUnload()">
259 <p>Werkzeug für die Landkartenbearbeitung.</p>
261 <h3>Georeferenzierung</h3>
264 <div id="map" style="width: 100%; height: 450px; border-style:none;"></div>
268 <input id="show_sledding" type="checkbox" onclick="showMarkers(wrSleddingMarkers, this.checked);"/><label for="show_sledding">Rodelbahnen zeigen</label><br/>
269 <input id="show_inns" type="checkbox" onclick="showMarkers(wrInnMarkers, this.checked);"/><label for="show_inns">Hütten zeigen</label>