From b3b187d8569d255e3d9537980237fe2aba11e3fa Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Tue, 11 Mar 2008 22:51:33 +0000 Subject: [PATCH] googlemap display via a kml file - see http://svn.planet-lab.org/wiki/GooglemapSetup --- misc/googlemap.js | 104 +++++++++++----------------------------------- 1 file changed, 24 insertions(+), 80 deletions(-) diff --git a/misc/googlemap.js b/misc/googlemap.js index 138cf74..7925343 100644 --- a/misc/googlemap.js +++ b/misc/googlemap.js @@ -1,94 +1,38 @@ -/* - * performs the equivalent of - * needs the allSites global var that is suppoesd to have been defined - * in /var/www/html/sites/plc-sites.js by plc-map.py +/* this function should solve the issue of calling a function + * upon page load, that badly depends on the browser + * see an example in http://svn.planet-lab.org/wiki/GooglemapSetup */ - -window.onDomReady = DomReady; - -//Setup the event -function DomReady(fn) { - //W3C - if(document.addEventListener) { - document.addEventListener("DOMContentLoaded", fn, false); - } else { - //IE - document.onreadystatechange = function(){readyState(fn)} - } +function onContent(f){ + var + a=onContent, + b=navigator.userAgent, + d=document, + w=window, + c="onContent", + e="addEventListener", + o="opera", + r="readyState", + s=""); + a[c]=(function(o){return function(){a[c]=function(){};for(a=arguments.callee;!a.done;a.done=1)f(o?o():o)}})(a[c]); + if(d[e])d[e]("DOMContentLoaded",a[c],false); + if(/WebKit|Khtml/i.test(b)||(w[o]&&parseInt(w[o].version())<9))(function(){/loaded|complete/.test(d[r])?a[c]():setTimeout(arguments.callee,1)})(); + else if(/MSIE/i.test(b))d.write(s); } -//IE execute function -function readyState(fn) { - // Thierry: initial version from the internet read - // if(document.readyState == "interactive") - // I have noticed that - // (*) on first load, I was hitting this point only once with complete - // (*) on reload I get here twice with "interactive" and then "complete" - // so as a quick'n dirty way : - if(document.readyState == "complete") { - fn(); - } -} - -window.onDomReady(create_map); - -/* initial center */ -centerLat=52; -centerLon=15; -/* initial zoom level */ -initZoom=4; - -function decode_utf8( s ) -{ - return decodeURIComponent( escape( s ) ); -} - -function create_marker (map, point, site) { - var marker=new GMarker(point); - var html='' + decode_utf8(site.name) + '\n'; - html += '
' + site.nb_nodes + ' Nodes\n'; - if (site.peername) { - html += '
' + decode_utf8(site.peername) + '\n'; - } - /* display site name with url on info window - triggers on click */ - GEvent.addListener(marker, 'click', function() {marker.openInfoWindowHtml(html);}); - /* double click - clear info window */ - GEvent.addListener(marker, 'dblclick', function() {marker.closeInfoWindow();}); - /* required before setImage can be called */ - map.addOverlay(marker); - /* set different layouts for local/foreign */ - /* google originals are in http://maps.google.com/mapfiles/ms/icons/blue-dot.png or blue.png or ... */ - if (!site.peername) { - /* local */ - marker.setImage('/misc/google-ple.png'); - } else { - marker.setImage('/misc/google-plc.png'); - } - return marker; -} - -function create_map() { +function googlemap (htmlid,kmlurl,centerLat, centerLon, zoom) { + // alert ('in googlemap, kmlurl='+kmlurl+',id ='+htmlid); if (GBrowserIsCompatible()) { - var map = new GMap2(document.getElementById("googlemap")); - map.setCenter(new GLatLng(centerLat, centerLon), initZoom); + var map = new GMap2(document.getElementById(htmlid)); + map.setCenter(new GLatLng(centerLat, centerLon), zoom); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); map.addControl(new GOverviewMapControl()); /*var geocoder = new GClientGeocoder();*/ map.setMapType(G_SATELLITE_MAP); - - for (i=0;i