- 积分
- 46
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2014-5-5
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
之前我绘制surfer都是从百度截取一个底图手工制作的边界文件,然后在底图的基础上获取自动站的坐标数据,效果还算可以。如下:
缺点是精度不高,而且费时间。为了方便获取高精度的坐标边界文件。我编写了一个小的程序来获取百度的经纬度坐标。主要页面代码如下:
<script type="text/javascript">
var ps= new Array();
var cityname = decodeURI(getUrlParam('name'));
// 百度地图API功能
var map = new BMap.Map("content");
map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5);
map.enableScrollWheelZoom();
function getBoundary(){
var bdary = new BMap.Boundary();
bdary.get(cityname, function(rs){ //获取行政区域
map.clearOverlays(); //清除地图覆盖物
var count = rs.boundaries.length; //行政区域的点有多少个
if (count === 0) {
alert('未能获取当前输入行政区域');
return ;
}
var pointArray = [];
for (var i = 0; i < count; i++) {
var ply = new BMap.Polygon(rs.boundaries, {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多边形覆盖物
map.addOverlay(ply); //添加覆盖物
pointArray = pointArray.concat(ply.getPath());
}
var points = rs.boundaries[0];
ps= points.split(";");
map.setViewport(pointArray); //调整视野
$("#zb").append(ps.length+",0<br/>");
for (i=0;i<ps.length ;i++ )
{
$("#zb").append(ps+"<br/>");
}
});
}
getBoundary();
function getUrlParam(paras) {
var url = location.href;
var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
var paraObj = {};
for (var i = 0; j = paraString; i++) {
paraObj[j.substring(0, j.indexOf("=")).toLowerCase()] = j.substring(j
.indexOf("=") + 1, j.length);
}
var returnValue = paraObj[paras.toLowerCase()];
if (typeof (returnValue) == "undefined") {
return "";
} else {
return returnValue;
}
}
</script>
页面效果如下:右侧的数据是不是很熟悉,是的,就是边界文件里面的数据。将这些数据放到一个文本文件里然后存储为.bln文件就是边界文件了。这个边界文件是根据实际的百度经纬度坐标制作的,但是百度坐标与实际的GPS坐标是有偏差的原因如下
国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ-02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经纬度,需要通过坐标转换接口进行转换。
具体怎么转换在这里不介绍了,百度找一下吧。
所以大家需要把自动站的经纬度坐标转换成百度的坐标。
边界文件生成的surfer底图如下:
为了方便大家获取边界的数据文件,我写了个 小程序,部署在云服务器,大家可以使用。
http://123.206.86.164/getboundary/1.jsp
页面如下操作步骤:
|
|