一、 背景描述
在百度地图上查询一个住宅小区, 界面会显示一个小区的边界阴影。大小区、新小区有;一些老小区也没有。这些边界坐标有时我们也想拿到,用于在做各种地图相关的计算和展示。
二、 获取住宅小区边界
1.1 获取住宅小区的POI ID。
通过百度提供的JS接口LocalSearch的Search方法搜索小区名称,返回LocalResult中包含POI的uid.
1.2 调用百度的Web方法查询小区的边界
http://map.baidu.com/?reqflag=pcmap&from=webmap&qt=ext&uid=680fb703ea53819c8ab988a9&ext_ver=new&l=18
返回值中包含住宅小区的边界:
{“content”:{“geo”:”4|12935110.3722,4844973.6228;12935311.2043,4845232.10011|1-12935110.3722,4845027.18418,12935110.5757,4845232.10011,12935295.028,4845223.84613,12935283.3104,4845082.19657,12935311.2043,4845076.61802,12935300.1501,4844973.6228,12935270.6855,4844985.61037,12935170.3042,4845022.58463,12935110.3722,4845027.18418;”,”uid”:”680fb703ea53819c8ab988a9”},”current_city”:…..}
返回结果中小区边界坐标点是米制坐标,转换为百度地图的度表示法才方便使用。
1.3 百度米制坐标转换为度表示法函数
function coordinateToPoints(coordinate) {
var points =”“;
if (coordinate) {
var projection = BMAP_NORMAL_MAP.getProjection();
if (coordinate && coordinate.indexOf(";") >= 0) {
coordinate = coordinate.split(';');
}
for ( var i = 0, len = coordinate.length; i < len; i++) {
var pos = coordinate[i].split(',');
var point = projection.pointToLngLat(new BMap.Pixel(pos[0], pos[1]));
points += ([ point.lng, point.lat ].toString() + ";");
}
}
return points;
}
使用BMAP_NORMAL_MAP API需要下载引入百度的CityList.js文件。下载路径:http://api.map.baidu.com/library/CityList/1.4/docs/symbols/BMapLib.CityList.html