高德地图JS API之一

又开始折腾高德的JS API,这个相对来说简单一些。遇到几个问题,这里简单记录一下。一下API版本最后更新时间为 2016年12月7日 ,v1.3。

(一)坐标转换

高德提供了由GPS(wgs84),baidu等坐标转换为高德地图坐标的转换方法:AMap.convertFrom。这个方法却是向服务器做POST GET查询,将提交的坐标数据或者坐标array计算出结果后返回。

当提交array时,array的数目不能超过一定数值,否则会返回error(粗测是400左右)。所以如果一次性需转换大量数据的时候需要做好拆分工作。其次是范围。转换只是对国内地理坐标有效,国外的位置信息即使传给服务器,仍旧传回相同的数据,这倒是没什么惊讶的。

代码随机生成了100,000个在指定范围内的坐标值,然后用这些坐标去请求转换坐标,将最终结果绘制到地图上,绘制的结果如最后。散布的散点怀疑是配对出错,暂时忽略问题。

var aaa=new Array();
for (var i = 0; i < 100000; i++)//在纬度40~60,经度50~140见生成10w个点对象,除了lnglat属性都是自定义的属性
	aaa.push({name:i,lnglat:new AMap.LngLat((Math.random()*90+50),(Math.random()*40+20)));
var mass=new AMap.MassMarks(aaa,{若干属性});
mass.setMap(map);
for(var i=start_len;i<(result["locations"].length+start_len);i++){
	if(all_positions[i].lnglat.getLat()!=result["locations"][i-start_len].getLat()&&all_positions[i].lnglat.getLng()!=result["locations"][i-start_len].getLng()){
		all_positions[i].lnglat=result["locations"][i-start_len];
		tmp.push(all_positions[i]);
	}
}

在绘制大量的不需要后期更改的marker时,首选还是AMap.MassMarks。这个与Marker在性能上不是差几个数量级的问题。当然,节约了性能也就意味着功能上的欠缺,这个图层只能配置相同的style(但可以添加多个图层),可以接受点击(click),鼠标滑进(mouseover),鼠标滑出(mouseout)等事件,不可以更改每个marker(实际上是一个包含lnglat属性的对象)的属性。而每个事件中,参数的data属性才是该对象。如:

function on_click(obj){
    var marker=new AMap.Marker({map:map});//点击时绘制一个自己的marker
    marker.setPosition(obj.data.lnglat);//设置marker的位置为点击对象的位置
}

 

转载于:https://my.oschina.net/ev4n/blog/805694

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值