[3447] | 1 | function PageLinker(map, aElementId) |
---|
| 2 | { |
---|
[12700] | 3 | this._map = map; |
---|
| 4 | this._elementId = aElementId; |
---|
[3447] | 5 | |
---|
[12700] | 6 | google.maps.event.bind( this._map, "idle", this, this._regenerateUrl ); |
---|
| 7 | google.maps.event.bind( this._map, "maptypeid_changed", this, this._regenerateUrl ); |
---|
[3447] | 8 | } |
---|
| 9 | |
---|
| 10 | PageLinker.getQueryVars = function() |
---|
| 11 | { |
---|
[12700] | 12 | var vars = {}; |
---|
| 13 | var qString = unescape( top.location.search.substring(1) ); |
---|
| 14 | if (qString.length==0) |
---|
| 15 | return vars; |
---|
| 16 | var pairs = qString.split(/\&/); |
---|
| 17 | for (var i=0; i<pairs.length; i++ ) |
---|
| 18 | { |
---|
| 19 | var nameVal = pairs[i].split(/\=/); |
---|
| 20 | vars[nameVal[0]] = nameVal[1]; |
---|
| 21 | } |
---|
| 22 | return vars; |
---|
[3447] | 23 | }; |
---|
| 24 | |
---|
| 25 | PageLinker.map2Url = function( map ) |
---|
| 26 | { |
---|
[12700] | 27 | var vars = PageLinker.getQueryVars(); |
---|
| 28 | vars['ll'] = map.getCenter().toUrlValue(5); |
---|
| 29 | vars['z'] = map.getZoom(); |
---|
| 30 | if ( map.getMapTypeId()===google.maps.MapTypeId.ROADMAP ) |
---|
| 31 | { if (vars['t']) vars['t']=null; } |
---|
| 32 | else |
---|
| 33 | vars['t']=map.getMapTypeId(); |
---|
[3447] | 34 | |
---|
[12700] | 35 | var url = document.location.protocol+'//'+document.location.hostname+document.location.pathname; |
---|
| 36 | var bFirst = true; |
---|
| 37 | for (var key in vars) |
---|
| 38 | { |
---|
| 39 | url += bFirst ? "?" : "&"; |
---|
| 40 | bFirst = false; |
---|
| 41 | url += key; |
---|
| 42 | if (vars[key]!=null) |
---|
| 43 | url += "="+vars[key]; |
---|
| 44 | } |
---|
| 45 | return url; |
---|
[3447] | 46 | }; |
---|
| 47 | |
---|
[12698] | 48 | PageLinker.url2Map = function( mapOptions ) |
---|
[3447] | 49 | { |
---|
[12700] | 50 | var vars = PageLinker.getQueryVars(); |
---|
| 51 | if ( !( (vars['z'] && vars['ll']) || vars['t'] ) ) |
---|
| 52 | return false; |
---|
[3447] | 53 | |
---|
[12700] | 54 | var mapType = google.maps.MapTypeId.ROADMAP; |
---|
| 55 | if (vars['t']) |
---|
| 56 | mapOptions.mapTypeId = vars['t']; |
---|
| 57 | |
---|
| 58 | if (vars['z'] && vars['ll']) |
---|
| 59 | { |
---|
| 60 | mapOptions.zoom = parseFloat(vars['z']); |
---|
| 61 | var ll = vars['ll'].split( "," ); |
---|
| 62 | if (ll.length==2) |
---|
| 63 | { |
---|
| 64 | mapOptions.center = new google.maps.LatLng( ll[0], ll[1] ); |
---|
| 65 | } |
---|
| 66 | return true; |
---|
| 67 | } |
---|
| 68 | return false; |
---|
[3447] | 69 | } |
---|
| 70 | |
---|
| 71 | |
---|
| 72 | PageLinker.prototype = { |
---|
| 73 | |
---|
| 74 | _regenerateUrl: function() |
---|
| 75 | { |
---|
| 76 | var elt = document.getElementById( this._elementId ); |
---|
| 77 | if (!elt) return; |
---|
| 78 | elt.href = PageLinker.map2Url(this._map); |
---|
| 79 | } |
---|
| 80 | |
---|
| 81 | } |
---|