节选代码:
var lnglat = [location['lng'], location['lat']];
var gps = bd09towgs84(location['lng'], location['lat']);
$("#longitude").val(gps[0]);
$("#latitude").val(gps[1]);
//console.log(gps);
// 将其他坐标系的坐标点转换为高德坐标系。
// AMap.convertFrom(lnglat:LngLat|Array.<LngLat>, type:String,
// function(status:String,result:info/ConvertorResult))
// ConvertorResult 对象
// info String 成功状态文字描述
// locations Array.<LngLat> 返回高德坐标集合
AMap.convertFrom(lnglat, "baidu", function(status, result){
if ("complete"===status) {
// result.info相当于result['info']
// console.log("状态"+status+"结果"+result+result.info+result['locations']);
lnglat = result['locations'][0];// 因为result['locations']是Array.<LngLat>数组,所以需要取第[0]个值
// 删除地图上所有的覆盖物
map.clearMap();
// console.log(lnglat);
// map.setCenter([116.39,39.9]); //数组方式和LngLat对象都行,但不是说两者相同
// map.setCenter(lnglat);
var marker = new AMap.Marker({
position: lnglat,//marker所在的位置
map:map//创建时直接赋予map属性
});
// 根据地图上添加的覆盖物分布情况,自动缩放地图到合适的视野级别,
// 参数overlayList默认为当前地图上添加的所有覆盖物图层
map.setFitView();
}
});
最初我是通过数组形式定义lnglat:
var lnglat = [location['lng'], location['lat']];
但实际上AMap.convertFrom函数的输入参数是LngLat对象:
| 将其他地图服务商的坐标批量转换成高德地图经纬度坐标。最多支持40对坐标。 type用于说明是哪个服务商的坐标,可选值有: gps:GPS原始坐标; baidu:百度经纬度; mapbar:图吧经纬度; |
| 构造一个地理坐标对象,lng、lat分别代表经度、纬度值 |
包括map.setCenter函数也支持两种输入方式:
map.setCenter([116.39,39.9]); //数组方式和LngLat对象都行,但不是说两者相同
map.setCenter(lnglat);
| 获取地图中心点经纬度坐标值。 |
我不清楚之前写的代码是根据哪个例子写的,但是用数组代表经纬度确实很方便而且可行。
就当一个特殊经验记录一下,来源不详,将来在考证。