Skip to content

Instantly share code, notes, and snippets.

@dieface
Created December 24, 2013 08:34
Show Gist options
  • Save dieface/8110397 to your computer and use it in GitHub Desktop.
Save dieface/8110397 to your computer and use it in GitHub Desktop.
(function(g,l,q,e){function h(a,b){try{return l.hasOwnProperty?a.hasOwnProperty(b.toString()):Object.prototype.hasOwnProperty.call(a,b.toString())}catch(c){}}function k(a){var b=a.css||"";this.setValues(a);this.span=g("<span/>").css({position:"relative",left:"-50%",top:"0","white-space":"nowrap"}).addClass(b);this.div=g("<div/>").css({position:"absolute",display:"none"});this.span.appendTo(this.div)}function m(a,b){h(l,"google")&&(this.map=null,this.container=a,this.options=g.extend({},p,b),this.interval=
parseInt(this.options.interval,10),this.interval=isNaN(this.interval)?200:this.interval,this.GoogleMapOptions={center:new google.maps.LatLng(this.options.center.x,this.options.center.y),control:this.options.control,disableDefaultUI:this.options.disableDefaultUI,draggable:this.options.draggable,keyboardShortcuts:this.options.keyboardShortcuts,mapTypeId:google.maps.MapTypeId[this.options.mapTypeId.toUpperCase()],mapTypeControl:this.options.mapTypeControl,mapTypeControlOptions:{position:google.maps.ControlPosition[this.options.mapTypeControlOptions.position],
style:google.maps.MapTypeControlStyle[this.options.mapTypeControlOptions.style.toUpperCase()]},maxZoom:this.options.maxZoom,minZoom:this.options.minZoom,navigationControl:this.options.navigationControl,navigationControlOptions:{position:google.maps.ControlPosition[this.options.navigationControlOptions.position],style:google.maps.NavigationControlStyle[this.options.navigationControlOptions.style.toUpperCase()]},panControl:this.options.panControl,panControlOptions:{position:google.maps.ControlPosition[this.options.panControlOptions.position]},
rotateControl:this.options.rotateControl,scaleControl:this.options.scaleControl,scaleControlOptions:{position:google.maps.ControlPosition[this.options.scaleControlOptions.position],style:google.maps.ScaleControlStyle[this.options.scaleControlOptions.style.toUpperCase()]},scrollwheel:this.options.scrollwheel,streetViewControl:this.options.streetViewControl,streetViewControlOptions:{position:google.maps.ControlPosition[this.options.streetViewControlOptions.position]},zoom:this.options.zoom,zoomControl:this.options.zoomControl,
zoomControlOptions:{position:google.maps.ControlPosition[this.options.zoomControlOptions.position],style:google.maps.ZoomControlStyle[this.options.zoomControlOptions.style.toUpperCase()]}},this.init())}var n=0,p={center:{x:"24",y:"121"},control:!0,disableDefaultUI:!1,draggable:!0,keyboardShortcuts:!0,mapTypeControl:!0,mapTypeControlOptions:{position:"TOP_RIGHT",style:"DEFAULT"},mapTypeId:"ROADMAP",marker:[],markerFitBounds:!1,maxZoom:null,minZoom:null,panControl:!0,panControlOptions:{position:"LEFT_TOP"},
polyline:[],navigationControl:!0,navigationControlOptions:{position:"TOP_LEFT",style:"DEFAULT"},scaleControl:!0,scaleControlOptions:{position:"BOTTOM_LEFT",style:"DEFAULT"},scrollwheel:!0,streetViewControl:!0,streetViewControlOptions:{position:"LEFT_TOP"},zoom:4,zoomControl:!0,zoomControlOptions:{style:"LARGE",position:"LEFT_TOP"},notfound:"\u627e\u4e0d\u5230\u67e5\u8a62\u7684\u5730\u9ede",loading:"\u8b80\u53d6\u4e2d\u2026",kml:{url:"",viewport:!0,infowindow:!1},interval:200};k.prototype=new google.maps.OverlayView;
k.prototype.onAdd=function(){var a=this.getPanes().overlayLayer;this.div.appendTo(g(a));this.listeners=[google.maps.event.addListener(this,"visible_changed",this.onRemove)]};k.prototype.draw=function(){var a=this.getProjection().fromLatLngToDivPixel(this.get("position"));this.div.css({left:a.x+"px",top:a.y+"px",display:"block"});this.text&&this.span.html(this.text.toString())};k.prototype.onRemove=function(){g(this.div).remove()};m.prototype={VERSION:"2.5.2",_markers:[],_labels:[],_polylines:[],_polygons:[],
_circles:[],_kmls:[],_directions:[],bounds:new google.maps.LatLngBounds,setZoom:function(a,b){h(b,"zoom")&&a&&a.setZoom(b.zoom)},kml:function(a,b){b=b?b:this.options;var c,d;e!==b.kml&&(c={preserveViewport:!0,suppressInfoWindows:!1},d="string"===typeof b.kml&&0!==b.kml.length?b.kml:e!==b.kml.url?b.kml.url:"",c=new google.maps.KmlLayer(d,g.extend(c,b.kml)),this._kmls.push(c),c.setMap(a))},direction:function(a,b){var c;b=b?b:this.options;if(e!==b.direction&&0<b.direction.length)for(c in b.direction)h(b.direction,
c)&&e!==b.direction[c]&&this.DirectionService(b.direction[c])},markers:function(a,b){var c;b=b?b:this.options;if(e!==b.marker&&0<b.marker.length)for(c in b.marker)h(b.marker,c)&&h(b.marker[c],"addr")&&("object"===typeof b.marker[c].addr?2===b.marker[c].addr.length&&this.MarkerDirect(b.marker[c]):this.MarkerByGeocoder(b.marker[c]))},DrawPolyline:function(a,b){var c,d,f=[];b=b?b:this.options;if(e!==b.polyline&&e!==b.polyline.coords){for(c in b.polyline.coords)h(b.polyline.coords,c)&&(d=b.polyline.coords,
e!==d[c]&&f.push(new google.maps.LatLng(d[c][0],d[c][1])));c=new google.maps.Polyline({path:f,strokeColor:b.polyline.color||"#FF0000",strokeOpacity:1,strokeWeight:b.polyline.width||2});this._polylines.push(c);c.setMap(a)}},DrawPolygon:function(a,b){var c,d,f=[];b=b?b:this.options;if(e!==b.polygon&&e!==b.polygon.coords){for(c in b.polygon.coords)h(b.polygon.coords,c)&&(d=b.polygon.coords,e!==d[c]&&f.push(new google.maps.LatLng(d[c][0],d[c][1])));c=new google.maps.Polygon({path:f,strokeColor:b.polygon.color||
"#FF0000",strokeOpacity:1,strokeWeight:b.polygon.width||2,fillColor:b.polygon.fillcolor||"#CC0000",fillOpacity:0.35});this._polygons.push(c);c.setMap(this.map);g.isFunction(b.polygon.click)&&google.maps.event.addListener(c,"click",b.polygon.click)}},DrawCircle:function(a,b){var c,d;b=b?b:this.options;if(e!==b.circle&&0<b.circle.length)for(c=b.circle.length-1;0<=c;c-=1)d=b.circle[c],e!==d.center.x&&e!==d.center.y&&(d=new google.maps.Circle({strokeColor:d.color||"#FF0000",strokeOpacity:d.opacity||0.8,
strokeWeight:d.width||2,fillColor:d.fillcolor||"#FF0000",fillOpacity:d.fillopacity||0.35,map:this.map,center:new google.maps.LatLng(d.center.x,d.center.y),radius:d.radius||10,zIndex:100}),this._circles.push(d),g.isFunction(b.circle[c].click)&&google.maps.event.addListener(d,"click",b.circle[c].click))},overlay:function(){this.kml(this.map);this.direction(this.map);this.markers(this.map);this.DrawPolyline(this.map);this.DrawPolygon(this.map);this.DrawCircle(this.map)},MarkerDirect:function(a){var b=
this,c,d;d={map:this.map,position:new google.maps.LatLng(a.addr[0],a.addr[1]),title:a.text.replace(/<([^>]+)>/g,""),infoWindow:new google.maps.InfoWindow({content:a.text})};"string"===typeof a.icon&&(d.icon=a.icon);c=new google.maps.Marker(d);this._markers.push(c);h(c,"position")&&c.getPosition().lat()&&c.getPosition().lng()&&b.bounds.extend(d.position);d={map:this.map,css:e!==a.css?a.css:""};"string"===typeof a.label&&0!==a.label.length&&(d.text=a.label);a=new k(d);a.bindTo("position",c,"position");
a.bindTo("text",c,"position");a.bindTo("visible",c);google.maps.event.addListener(c,"click",function(){c.infoWindow.open(b.map,c)})},MarkerByGeocoder:function(a){var b=this;(new google.maps.Geocoder).geocode({address:a.addr},function(c,d){if(d===google.maps.GeocoderStatus.OVER_QUERY_LIMIT)l.setTimeout(function(){b.MarkerByGeocoder(a)},this.interval);else if(d===google.maps.GeocoderStatus.OK){var f,e;e={map:b.map,position:c[0].geometry.location,title:a.text.replace(/<([^>]+)>/g,""),infoWindow:new google.maps.InfoWindow({content:a.text})};
"string"===typeof a.icon&&(e.icon=a.icon);f=new google.maps.Marker(e);b._markers.push(f);h(f,"position")&&f.getPosition().lat()&&f.getPosition().lng()&&b.bounds.extend(e.position);e={map:b.map,css:a.css||""};"string"===typeof a.label&&0!==a.label.length&&(e.text=a.label);e=new k(e);e.bindTo("position",f,"position");e.bindTo("text",f,"position");e.bindTo("visible",f);google.maps.event.addListener(f,"click",function(){f.infoWindow.open(b.map,f)})}})},DirectionService:function(a){var b=[],c=new google.maps.DirectionsService,
d=new google.maps.DirectionsRenderer,f={travelMode:google.maps.DirectionsTravelMode.DRIVING,optimizeWaypoints:a.optimize||!1},g=0,h=0;"string"===typeof a.from&&(f.origin=a.from);"string"===typeof a.to&&(f.destination=a.to);"string"===typeof a.travel&&0<a.travel.length&&(f.travelMode=google.maps.DirectionsTravelMode[a.travel.toUpperCase()]);if(e!==a.waypoint&&0!==a.waypoint){g=0;for(h=a.waypoint.length;g<h;g+=1)b.push({location:a.waypoint[g].toString(),stopover:!0});f.waypoints=b}e!==f.origin&&e!==
f.destination&&(c.route(f,function(a,b){b===google.maps.DirectionsStatus.OK&&d.setDirections(a)}),d.setMap(this.map),this._directions.push(d))},init:function(){var a=this,b;n+=1;"string"===typeof this.options.center?l.setTimeout(function(){b=new google.maps.Geocoder;error=g(a.container);msg="";b.geocode({address:a.options.center},function(b,d){try{d===google.maps.GeocoderStatus.OVER_QUERY_LIMIT?a.init():d===google.maps.GeocoderStatus.OK&&0!==b.length?(a.GoogleMapOptions.center=d===google.maps.GeocoderStatus.OK&&
0!==b.length?b[0].geometry.location:"",a.map=new google.maps.Map(a.container,a.GoogleMapOptions),a.overlay(),a.options.marker.length&&!0===a.options.markerFitBounds&&setTimeout(function(){a.map.fitBounds(a.bounds)},this.interval)):(msg=a.options.notfound.text||d,error.html(msg.replace(/</g,"&lt;").replace(/>/g,"&gt;")))}catch(f){error.html((e!==f.message?f.message:f.description).toString())}})},this.interval*n):(a.map=new google.maps.Map(a.container,a.GoogleMapOptions),a.overlay(),a.options.marker.length&&
!0===a.options.markerFitBounds&&a.map.fitBounds(a.bounds))},panto:function(a){var b=this,c;h(b,"map")&&null!==b.map&&e!==b.map&&("string"===typeof a?(-1!==a.indexOf(",")&&(c="loc: "+a),c=new google.maps.Geocoder,c.geocode({address:a},function(a,c){c===google.maps.GeocoderStatus.OK&&g.isFunction(b.map.panTo)&&e!==a[0]&&b.map.panTo(a[0].geometry.location)})):("[object Array]"===Object.prototype.toString.call(a)?2===a.length&&(c=new google.maps.LatLng(a[0],a[1])):h(a,"lat")&&h(a,"lng")?c=new google.maps.LatLng(a.lat,
a.lng):h(a,"x")&&h(a,"y")&&(c=new google.maps.LatLng(a.x,a.y)),g.isFunction(b.map.panTo)&&e!==c&&b.map.panTo(c)))},clear:function(a){var b,c,d;"string"===typeof a&&(b=a.split(","));for(c=0;c<b.length;c+=1)if(a="_"+g.trim(b[c].toString().toLowerCase())+"s",e!==this[a]&&this[a].length){for(d=0;d<this[a].length;d+=1)this[a][d].set("visible",!1),this[a][d].setMap(null);this[a]=[]}},modify:function(a){var b=[],c=[["kml","kml"],["marker","markers"],["direction","direction"],["polyline","DrawPolyline"],
["polygon","DrawPolygon"],["circle","DrawCircle"],["zoom","setZoom"]],d;if(e!==a){for(d=0;d<c.length;d+=1)h(a,c[d][0])&&b.push(c[d][1]);if(null!==this.map&&e!==this.map&&b)for(d=0;d<b.length;d+=1)if("function"===typeof this[b[d]])this[b[d]](this.map,a)}}};g.fn.tinyMap=function(a){var b=arguments,c,d;return"string"===typeof a?(this.each(function(){d=g.data(this,"tinyMap");d instanceof m&&"function"===typeof d[a]&&(c=d[a].apply(d,Array.prototype.slice.call(b,1)))}),e!==c?c:this):this.each(function(){g.data(this,
"tinyMap")||g.data(this,"tinyMap",new m(this,a))})}})(jQuery,window,document);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment