摘要:关于地图的显示,我想你们最关心的就是麻点图,自定义底图的解决方案了吧。在过去,marker大于500以后,浏览器开始逐渐卡死,你们都开始寻找解决方案,好比聚合marker啊,好比麻点图啊。聚合marker里面还有一些复杂的算法,而麻点图,最让你们头疼的,就是如何生成麻点图,如何切图,如何把图片贴到地图上,还有如何定位图片的位置吧。之前那么复杂的一系列操做,竟然让云图的可视化操做一会儿解决了。如今只要点一点鼠标,麻点图就自动生成了。真是广大LBS开发者的福音。html
之前写过从零开始学百度地图API系列,写得比较浅显。现在,本身在LBS领域成长了几年,学到比较多的专业知识,因此这次再次写到”从零系列”,但愿加上更多功能,更多想法。好比这期的地图展示,不仅仅只是告诉你们,一张2D地图如何用代码写出来,同时,还会加上3D地图,卫星图,街景,交通流量图,麻点图,仙剑奇侠传地图等。也但愿借此能够和你们更多的交流。算法
1、万物的首先第一步,固然是申请一个key。segmentfault
申请key:http://yuntu.amap.com/datamanager/index.html浏览器
登陆以后,点新建地图,就有一个自动的key了。服务器
key在右上角密钥管理处ide
2、 2D地图工具
2D地图,就是一张普通的高德地图。只须要简单几句话就能够实现。ui
var mapObj; var point = new AMap.LngLat(120.148373,30.290422); function mapInit(){ //初始化地图对象,加载地图。 mapObj = new AMap.Map("iCenter",{ center : point, //地图中心点 level : 15 //地图显示的缩放级别 }); }
其中,level指的是地图级别,默认为[3,18]。3为世界地图,18为街道级地图。google
center指的是地图的中心点,能够用坐标拾取工具来取点。坐标拾取工具:http://zhaoziang.com/amap/picpoint.htmlspa
2D效果图:
3、实时路况
添加实时路况,只须要两句话
var trafficLayer = new AMap.TileLayer.Traffic({zIndex:10}); //实时路况图层 trafficLayer.setMap(mapObj); //添加实时路况图层 消除实时路况有2种方法,一是隐藏hide方法,二是重置地图setMap(null) trafficLayer.setMap(null); //隐藏实时路况图层 trafficLayer.hide(); //隐藏实时路况图层
实时路况效果:
4、路网,卫星图
路网、卫星图,都跟实时路况路况差很少,只是换了个类名。
添加路网、卫星图,只须要两句话
var roadNetLayer = new AMap.TileLayer.RoadNet({zIndex:10}); //实例化路网图层 roadNetLayer.setMap(mapObj); //在map中添加路网图层 var satellLayer = new AMap.TileLayer.Satellite({zIndex:10}); //实例化卫星图 satellLayer.setMap(mapObj); //在map中添加卫星图 消除路网、卫星图,有2种方法,一是隐藏hide方法,二是重置地图setMap(null) roadNetLayer.setMap(null); //隐藏路网 roadNetLayer.hide(); //隐藏路网 satellLayer.setMap(null); //隐藏卫星图 satellLayer.hide(); //隐藏卫星图
路网、卫星图效果:
5、3D地图
3D地图,是在地图比较详细的级别17-18的时候,有三维楼块效果的地图。
因此,要看到3D效果,必须把地图级别调整到17-18才能够看到。
var buildingLayer = new AMap.Buildings(); //实例化3D地图图层 buildingLayer.setMap(mapObj); //在map中添加3D图层 mapObj.setZoom(18); //改变地图级别到17-18 3D地图没有hide方法,因此隐藏他,须要重置地图。 buildingLayer.setMap(null);
3D地图效果:
6、麻点图
(记得之前研究百度地图API的时候,麻点图的制做很苦难,要本身去对准坐标,本身生成麻点图,而后本身切片……实在费力……)
高德地图API最好用的就是麻点图。不用本身生成麻点图,不用本身切图。只须要在云图上点一点,就能够完成全部操做。
打开云图管理台:http://yuntu.amap.com/datamanager/index.html
新建或打开已有的地图:
点右上角的按钮,能够手工一个一个标注你本身的麻点。
固然也能够批量导入你的数据。
数据填充完毕后,记录下你的tableid。这就是你的云图层(麻点图)的id,放到下面的代码里。
//加载云图层插件 mapObj.plugin('AMap.CloudDataLayer', function () { var layerOptions = { query:{keywords: ''}, clickable:true }; var cloudDataLayer = new AMap.CloudDataLayer('【您的tableid】', layerOptions); //实例化云图层类 cloudDataLayer.setMap(mapObj); //叠加云图层到地图 });
云图层,就是麻点图,是实时渲染的,你在云图管理台操做以后,立马在你的前台获得显示。
这真是我用过最好用的麻点图了。marker大于500以后,终于有如此方便的解决方案了。
更多关于云图的教程,能够看我之前发过的教程
云存储:http://www.cnblogs.com/milkmap/p/3623775.html
三甲医院例子:http://www.cnblogs.com/milkmap/p/3637899.html
东莞酒店例子:http://www.cnblogs.com/milkmap/p/3657829.html
7、仙剑地图
这个算是投机取巧,将仙剑地图直接覆盖在高德地图上,属于图片覆盖物。
图片覆盖物须要指定一个显示范围,取左下角和右上角。
显示范围设定后,无论地图放大缩小,图片都只在这个范围中显示。
这样的图片覆盖物,比较适合制做校园地图,厂区地图,小区地图等。
并且,跟云图同样,图片覆盖物不须要切图。
(又想感叹一句!真真是开发者的福音!为什么高德API作得那么好,以前我都不知道!!)
var bounds = new AMap.Bounds(new AMap.LngLat(120.120993,30.271596), new AMap.LngLat(120.184593,30.309171)), groundImageOpts = { opacity: 1, //图片透明度 clickable: true,//图片相应鼠标点击事件,默认:false map: mapObj //图片叠加的地图对象 }; //实例化一个图片覆盖物对象 var groundImage = new AMap.GroundImage('xianjian.jpg', bounds, groundImageOpts);
仙剑地图效果:
8、自定义地图
这里用谷歌的底图做为例子,将高德底图直接换为谷歌底图。跟上一段的内容不同,不是图片覆盖物那么简单哦。
高德的切图方式,和谷歌的同样。因此,在网上找的谷歌地图的切图工具,均可以适用于高德地图。
google = new AMap.TileLayer({ tileUrl:"http://mt{1,2,3,0}.google.cn/vt/lyrs=m@142&hl=zh-CN&gl=cn&x=[x]&y=[y]&z=[z]&s=Galil"//图块取图地址 }); google.setMap(mapObj);
谷歌地图:
9、街景
高德地图街景覆盖城市共33个,分别为:杭州,南京,成都,西安,拉萨,昆明,烟台,沈阳,哈尔滨,长春,常州,南通,林芝,泰安,日照,那曲,东营,日喀则,德州,滨州,聊城,莱芜,郑州,洛阳,平顶山,开封,安阳,信阳,新乡,焦做,商丘,周口,驻马店。
使用街景,必须将您的网页文件传到服务器上。
var opts = { pov: { heading:270, pitch:0 }, position: point }; var panorama = new AMap.Panorama('iCenter',opts);
position,就是街景的位置,必须在33个城市有街景的范围内,才能看到街景哦。
能够先到amap上看一眼,哪里有街景,而后再设置您的街景位置。高德地图 http://www.amap.com/
街景效果:
10、所有源代码,请点击这里:
View Code
示例demo在线看:
http://zhaoziang.com/amap/zero_1_1.html
【部分代码和图片丢失,请看原文】
http://www.cnblogs.com/milkmap/p/3687855.html