Google Map API学习记录
2011-10-11 11:57
309 查看
去年年底用GoogleMapAPI做了一个GIS系统,以下简称GMA,初看GMA的时候感觉写GMA工程师确实挺强的,把Javascript运用的如火纯清,不愧是全球顶尖的公司;
下面我就把我平时遇到的问题,总结一下,顺便做个记录备忘一下,如果在这能发现解决你问题的解决方案,那就更好!
1,限制地图的缩放级别
我们知道GMA的地图的缩放级别是1-20,如果我们只是让用户在4-15范围内操作地图,那怎么办呢?下面就是一个解决方案!
//限制缩放级别
//Min
G_PHYSICAL_MAP.getMinimumResolution=
function(){
return_zoomMinLevel;};
G_NORMAL_MAP.getMinimumResolution=
function(){
return_zoomMinLevel;};
G_SATELLITE_MAP.getMinimumResolution=
function(){
return_zoomMinLevel;};
G_HYBRID_MAP.getMinimumResolution=
function(){
return_zoomMinLevel;};
//Max
G_PHYSICAL_MAP.getMaximumResolution=
function(){
return_zoomMaxLevel;};
G_NORMAL_MAP.getMaximumResolution=
function(){
return_zoomMaxLevel;};
G_SATELLITE_MAP.getMaximumResolution=
function(){
return_zoomMaxLevel;};
G_HYBRID_MAP.getMaximumResolution=
function(){
return_zoomMaxLevel;};
2,绑定鼠标右键操作
我们在用Google地图查某一个地方的时候,如果你右击鼠标,就会出现一个菜单,包含一些“以此为出发点”、“以此为终点”、“放大”、“缩小”等操作,那我们怎么实现定义自己的右键操作呢?当时为了实现这个功能,还费了好长时间。不多说了,直接看代码:
我们在初始化GoogleMap的时候,直接调用initializeGoogleMapContextMenu()方法就行了,其中,我的右键菜单只是一张图片,你可以根据你的实际情况,任意设计。
3,自定义GroundOverlay
GMA中有一个GGroundOverlay类,用它可以在地图上任意位置贴图或划线,但是当我用它贴雷达图或云图的时候,发现它老是给我把位置贴错,我的雷达图或云图首先根据当前视窗获得西南角和东北角两个点的坐标以及中心点的坐标,然后计算出当前视窗对应的最大维度值和最小维度值,来生成雷达图或云图,最后把生成的雷达图或云图贴在当前的视窗口上。实验了好几次,用它老是给我贴错,好像是把我的图给我缩小了。
实在没有办法了,就索性按照GMA的教程写了一个,虽然我感觉他给出的例子和他内置的应该一样,但是用自己写的就可以正确的贴上去,十分不解!
下面我就把我平时遇到的问题,总结一下,顺便做个记录备忘一下,如果在这能发现解决你问题的解决方案,那就更好!
1,限制地图的缩放级别
我们知道GMA的地图的缩放级别是1-20,如果我们只是让用户在4-15范围内操作地图,那怎么办呢?下面就是一个解决方案!
//限制缩放级别
//
G_PHYSICAL_MAP.getMinimumResolution=
function(){
return_zoomMinLevel;};
G_NORMAL_MAP.getMinimumResolution=
function(){
return_zoomMinLevel;};
G_SATELLITE_MAP.getMinimumResolution=
function(){
return_zoomMinLevel;};
G_HYBRID_MAP.getMinimumResolution=
function(){
return_zoomMinLevel;};
//
G_PHYSICAL_MAP.getMaximumResolution=
function(){
return_zoomMaxLevel;};
G_NORMAL_MAP.getMaximumResolution=
function(){
return_zoomMaxLevel;};
G_SATELLITE_MAP.getMaximumResolution=
function(){
return_zoomMaxLevel;};
G_HYBRID_MAP.getMaximumResolution=
function(){
return_zoomMaxLevel;};
2,绑定鼠标右键操作
我们在用Google地图查某一个地方的时候,如果你右击鼠标,就会出现一个菜单,包含一些“以此为出发点”、“以此为终点”、“放大”、“缩小”等操作,那我们怎么实现定义自己的右键操作呢?当时为了实现这个功能,还费了好长时间。不多说了,直接看代码:
/*InitGoogleMapMouseRightContextMenuStart*/ functioninitializeGoogleMapContextMenu(){ /*contextMenu*/ _contextMenu=document.createElement("div"); $(_contextMenu).css({display:"none"}); varcontextMenuImage=document.createElement("img"); $(contextMenuImage).css({cursor:"pointer"}); $(contextMenuImage).click(clickContextMenuEvent); contextMenuImage.src="/images/btn_mouse_right_upload.png"; _contextMenu.appendChild(contextMenuImage); map.getContainer().appendChild(_contextMenu); //BindEvent
GEvent.addListener(map,"singlerightclick",function(pixel,tile){ _contextMenuClickPixel=pixel; varx=_contextMenuClickPixel.x; vary=_contextMenuClickPixel.y; if(x>map.getSize().width-120){x=map.getSize().width-120} if(y>map.getSize().height-100){y=map.getSize().height-100} //判断是否登陆
if(!checkLogin()){ alert("请先登录,在上传视频"); return; } //设置菜单位置
varpos=newGControlPosition(G_ANCHOR_TOP_LEFT,newGSize(x,y)); pos.apply(_contextMenu); displayContextMenu(); }); } functionclickContextMenuEvent(){ //Googlemapapi内置像素转坐标函数
varpoint=map.fromContainerPixelToLatLng(newGPoint(_contextMenuClickPixel.x,_contextMenuClickPixel.y)); var_params={ lat:point.lat(), lng:point.lng() }; //弹出一个窗口
varmyHtml=createIframeHtml(310,310,"upload.aspx",_params); map.openInfoWindowHtml(point,myHtml) } //显示菜单
functiondisplayContextMenu(){ $(_contextMenu).show(); //点击任意位置,隐藏菜单
$(document).one('click',hideContextMenu); } //隐藏菜单
functionhideContextMenu(){ $(_contextMenu).hide(); } /*InitGoogleMapMouseRightContextMenuEnd*/
我们在初始化GoogleMap的时候,直接调用initializeGoogleMapContextMenu()方法就行了,其中,我的右键菜单只是一张图片,你可以根据你的实际情况,任意设计。
3,自定义GroundOverlay
GMA中有一个GGroundOverlay类,用它可以在地图上任意位置贴图或划线,但是当我用它贴雷达图或云图的时候,发现它老是给我把位置贴错,我的雷达图或云图首先根据当前视窗获得西南角和东北角两个点的坐标以及中心点的坐标,然后计算出当前视窗对应的最大维度值和最小维度值,来生成雷达图或云图,最后把生成的雷达图或云图贴在当前的视窗口上。实验了好几次,用它老是给我贴错,好像是把我的图给我缩小了。
实在没有办法了,就索性按照GMA的教程写了一个,虽然我感觉他给出的例子和他内置的应该一样,但是用自己写的就可以正确的贴上去,十分不解!
//GISGroundOverlay functionGISGroundOverlay(imageUrl,bounds,opacity){ this.imageUrl_=imageUrl; this.bounds_=bounds; this.opacity_=opacity||1; this.overlayImgId_="__groundoverlay_img"; } GISGroundOverlay.prototype=newGOverlay(); GISGroundOverlay.prototype.initialize=function(map){ varpane=map.getPane(G_MAP_MAP_PANE); $(pane).empty(); vardiv=document.createElement("div"); div.style.position="absolute"; varimg=document.createElement("img"); img.id=this.overlayImgId_; img.src=this.imageUrl_; $(img).css({"opacity":this.opacity_}); if(this.imageUrl_){ $(div).append(img); } pane.appendChild(div); this.div_=div; this.map_=map; this.img_=img; } GISGroundOverlay.prototype.setOverlayImage=function(src){ if(src){ $("#"+this.overlayImgId_).attr("src",src); } } GISGroundOverlay.prototype.remove=function(){ if(this.div_.parentNode) this.div_.parentNode.removeChild(this.div_); } GISGroundOverlay.prototype.copy=function(){ returnnewGISOverlay(this.bounds_); } GISGroundOverlay.prototype.setOpacity=function(opacity){ $(this.img_).css({"opacity":opacity}); } GISGroundOverlay.prototype.redraw=function(force){ if(!force)return; //CalculatetheDIVcoordinatesoftwooppositecornersofourboundsto //getthesizeandpositionofourrectangle varc1=this.map_.fromLatLngToDivPixel(this.bounds_.getSouthWest()); varc2=this.map_.fromLatLngToDivPixel(this.bounds_.getNorthEast()); varwidth=Math.abs(c2.x-c1.x); varheight=Math.abs(c2.y-c1.y); varleft=Math.min(c2.x,c1.x); vartop=Math.min(c2.y,c1.y); //NowpositionourDIVbasedontheDIVcoordinatesofourbounds this.div_.style.width=width+"px"; this.div_.style.height=height+"px"; this.div_.style.left=left+"px"; this.div_.style.top=top+"px"; }
下面列出一些Googlemapapi的参考站点:
http://econym.org.uk/gmap/ http://maps.forum.nu/ http://koti.mbnet.fi/ojalesa/exam/index.html
相关文章推荐
- Google Map API学习记录
- google Map APi学习与总结(三) .
- Google Map API学习1
- 每周交流会记录 -- Css Sprite,Sitemap, Google Map API
- 4000 Google Map for Android 官方API 学习与解析
- google Map APi学习与总结(四)
- google map api 3 学习应用笔记 (1)
- Google Map API 学习三
- Windows Phone 7 学习志(个人新闻一:基于Google Map API的LR Maps中文地图终于在MarketPlace发布了)
- JS学习-调用google map API例子
- google Map APi学习与总结(二)
- JavaScript学习记录day4-Map、Set和iterable
- google Map api地理位置坐标转换
- Google Map API
- Google Map API使用详解(七)——加载Google Map API URL的详细解读
- Google Map API使用详解(二十)——实现Google Map本地搜索框(下)
- GoogleMap API Javascript 订单跟踪
- google map Api接口整理 .
- Google map api 3.9 Service Geocoder 地理信息解析