百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图

简介: 原文:百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图 版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/liusaint1992/article/details/50071613 上一文章讲了如何给地图添加点击事件做出不同的反应。
原文: 百度地图API二:根据标注点坐标范围计算显示缩放级别zoom自适应显示地图

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/liusaint1992/article/details/50071613

上一文章讲了如何给地图添加点击事件做出不同的反应。

本文记录 如何通过标注点markers的坐标范围来计算百度地图的显示级别zoom。


我们要实现的是地图初始化的时候,能够把我们所有的标注点markers显示在地图上,并且让地图有一个合适的显示级别。以提高用户体验。


在天地图系列文章里我也介绍了类似的办法来处理天地图的方法,但是也略有不同,天地图的时候我是用的计算经纬度差的方法。 来跟每一个显示级别的差做比较,从而确定天地图的显示级别。

而百度地图我用了另外的办法。 


百度地图每一个显示级别对应了一个比例尺,这里我们由比例尺入手。   计算最大经纬度与最小经纬度之间的距离,然后把这个距离乘以10(这里的10表示地图通常占几个比例迟的大小)。再根据这个结果来确定我们的地图应该在一个什么样的比例尺,从而确定我们的缩放级别。


1.数据:

		//数据准备
		var points = [{"lng":116,"lat":40,"status":1,"id":50},
		{"lng":117,"lat":31,"status":1,"id":2},
		{"lng":116,"lat":34,"status":0,"id":3},
		{"lng":118,"lat":39,"status":0,"id":4},
		{"lng":110,"lat":35,"status":1,"id":5}
		];

2.加载地图:

		
		var map = new BMap.Map("container");  

3.计算最大经纬度,最小经纬度。计算中心点。并调用getZoom()获取显示级别。

		//根据原始数据计算中心坐标和缩放级别,并为地图设置中心坐标和缩放级别。
		function setZoom(points){
			if(points.length>0){
				var maxLng = points[0].lng;
				var minLng = points[0].lng;
				var maxLat = points[0].lat;
				var minLat = points[0].lat;
				var res;
				for (var i = points.length - 1; i >= 0; i--) {
					res = points[i];
					if(res.lng > maxLng) maxLng =res.lng;
					if(res.lng < minLng) minLng =res.lng;
					if(res.lat > maxLat) maxLat =res.lat;
					if(res.lat < minLat) minLat =res.lat;
				};
				var cenLng =(parseFloat(maxLng)+parseFloat(minLng))/2;
				var cenLat = (parseFloat(maxLat)+parseFloat(minLat))/2;
				var zoom = getZoom(maxLng, minLng, maxLat, minLat);
				map.centerAndZoom(new BMap.Point(cenLng,cenLat), zoom);  
			}else{
				//没有坐标,显示全中国
				map.centerAndZoom(new BMap.Point(103.388611,35.563611), 5);  
			} 
		}
4.getZoom()。我写的计算缩放级别的函数。
		//根据经纬极值计算绽放级别。
		function getZoom (maxLng, minLng, maxLat, minLat) {
			var zoom = ["50","100","200","500","1000","2000","5000","10000","20000","25000","50000","100000","200000","500000","1000000","2000000"]//级别18到3。
			var pointA = new BMap.Point(maxLng,maxLat);  // 创建点坐标A
			var pointB = new BMap.Point(minLng,minLat);  // 创建点坐标B
			var distance = map.getDistance(pointA,pointB).toFixed(1);  //获取两点距离,保留小数点后两位
			for (var i = 0,zoomLen = zoom.length; i < zoomLen; i++) {
				if(zoom[i] - distance > 0){
					return 18-i+3;//之所以会多3,是因为地图范围常常是比例尺距离的10倍以上。所以级别会增加3。
				}
			};
		}

5.加载标注点。上一文章的内容。

		//在轨迹点上创建图标,并添加点击事件
		function addMarker(points){  // 创建图标对象   

			// 创建标注对象并添加到地图   
			for(var i = 0,pointsLen = points.length;i <pointsLen;i++){
				var point = new BMap.Point(points[i].lng,points[i].lat);	
				var  marker = new BMap.Marker(point);   
				map.addOverlay(marker); 
				//给标注点添加点击事件。使用立即执行函数和闭包
				(function() {
					var thePoint = points[i];
					marker.addEventListener("click",function(){
						showInfo(this,thePoint);
					});
				})();

			}

		} 


效果图:


如图。一加载百度地图,我们显示的makers标注点刚好在一个比较舒服的显示级别,都在可视范围内。

演示地址:http://runningls.com/demos/baidumap/zoom.html

github:https://github.com/liusaint/baiduMap

本文介绍到这里,下一文章我们讲百度地图API实时轨迹。


2016-01-08日更新:

评论里有小伙伴说百度地图api就可以实现这个功能,试了一下,效果很好,建议大家使用这种方法。 非常感谢。    

var points = [point1, point2,point3];
var view = map.getViewport(eval(points));
var mapZoom = view.zoom; 
var centerPoint = view.center; 
map.centerAndZoom(centerPoint,mapZoom);


果然我对百度api了解得还不是很多啊。 上面的方法毕竟是我自己思考出来的替代方法。就当是思维锻炼吧。
目录
相关文章
|
6月前
|
自然语言处理 算法 Java
地址描述转换为坐标点不使用API,有什么转换的方法?
地址描述转换为坐标点不使用API,有什么转换的方法?
426 64
|
4月前
|
新能源 API
百科-百度免费API接口教程
该接口用于从百度百科获取指定名词的基础解释。支持POST或GET请求,需提供用户ID、用户KEY及查询内容。返回状态码和解释内容或错误提示。示例:https://cn.apihz.cn/api/zici/baikebaidu.php?id=88888888&key=88888888&words=汽车。建议使用个人ID与KEY以享受更高调用频次。
|
4月前
|
API
时间操作[计算时间差]免费API接口教程-{"code":200,"msg":"0天11时6分40秒"}
此API用于获取两个时间戳之间的格式化时间差。支持POST和GET请求,需提供用户ID、用户KEY及两个时间戳作为参数。返回状态码及时间差或错误信息。示例URL:https://cn.apihz.cn/api/time/zjgapi.php?id=88888888&key=88888888&time1=1710925735&time2=1710927735。建议使用个人ID与KEY以避免调用限制。
|
4月前
|
API
表情包-百度版免费API接口教程
该接口用于通过指定关键词从百度渠道获取表情包,支持POST或GET请求。需提供用户ID和KEY,可选参数包括关键词、页码及结果数量。返回数据包含状态码、信息提示、结果集等。示例中ID与KEY为公共测试用,建议使用个人ID与KEY以享受更高调用频率。
|
4月前
|
API
通用图片搜索-百度源免费API接口教程
该接口用于搜索百度图片,支持通过关键词、页码、结果数量等参数获取图片搜索结果。请求方式为POST或GET,需提供用户ID和KEY,可选参数包括关键词、页码、结果数量及返回源类型。返回结果包含状态码、信息提示、结果集、当前页码、最大页码和结果数量。示例中提供了GET和POST请求方法及返回数据示例。
|
8月前
|
SQL 并行计算 API
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
Dask是一个用于并行计算的Python库,它提供了类似于Pandas和NumPy的API,但能够在大型数据集上进行并行计算。
|
7月前
|
JavaScript 前端开发 定位技术
百度地图JavaScript API v2.0创建地图
百度地图JavaScript API v2.0创建地图
96 0
|
1月前
|
API PHP 开发者
速卖通商品详情接口(速卖通API系列)
速卖通(AliExpress)是阿里巴巴旗下的跨境电商平台,提供丰富的商品数据。通过速卖通开放平台(AliExpress Open API),开发者可获取商品详情、订单管理等数据。主要功能包括商品搜索、商品详情、订单管理和数据报告。商品详情接口aliexpress.affiliate.productdetail.get用于获取商品标题、价格、图片等详细信息。开发者需注册账号并创建应用以获取App Key和App Secret,使用PHP等语言调用API。该接口支持多种请求参数和返回字段,方便集成到各类电商应用中。
|
1月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
64 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
8天前
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析

热门文章

最新文章