从百度地图批量获取中国县级以上行政区划边界坐标

从百度地图批量获取中国县级以上行政区划边界坐标

不知道从什么时候开始,在Google地图或是百度地图中用城市或者省名称搜索的时候,你会发现地图上会勾勒出搜索的行政区的轮廓来,这个功能非常人性化。

比如在百度地图中搜索“广西” ,地图显示如下图所示:

在Google地图中搜索“桂林”,会定位到桂林市的中心坐标,需要把地图级别调小,才能看到如下图的效果

如何实现上面的效果的,据我所知百度API已经开放了获取行政区边际坐标的接口,相关说明可以参考

http://developer.baidu.com/map/reference/index.php?title=Class:%E6%9C%8D%E5%8A%A1%E7%B1%BB/Boundary

这里有一篇关于如何获取行政区域的边界?的文章,本人根据这篇文章提供的代码稍作修改,把中国省市(地级市)边界坐标收入囊中

 

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>获取地区轮廓线</title>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script>
    <script type="text/javascript" src="CityData.js"></script>
    <style type="text/css">
        body {
            font-size: 13px;
            margin: 10px
        }
        #container {
            width: 800px;
            height: 500px;
            border: 1px solid gray
        }
    </style>
</head>

<body>
    <div id="container"></div>
    <div id="event_descr"></div>
    <br />输入省、直辖市或县名称:
    <input type="text" id="districtName" style="width:80px" value="桂林市">
    <input type="button" onclick="getBoundary()" value="获取轮廓线">
    <script type="text/javascript">
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        
        var folderName = "C:\\china\\";
        if (!fso.FolderExists(folderName)) fso.CreateFolder(folderName);
        
        var map = new BMap.Map("container");
        map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5);
        map.addControl(new BMap.NavigationControl({
            type: BMAP_NAVIGATION_CONTROL_SMALL
        }));
        map.enableScrollWheelZoom();
         //直辖市 
        if (cityData.municipalities && cityData.municipalities.length > 0) {
            for (var i = 0, n = cityData.municipalities.length; i < n; i++) {
                var mu = cityData.municipalities[i];
                getBoundary(mu.n, "");
            }
        }
         // 普通省
        for (var i = 0, n = cityData.provinces.length; i < n; i++) {
            var pv = cityData.provinces[i];
            var newFolderName = folderName + pv.n
            if (!fso.FolderExists(newFolderName)) newFolderName = fso.CreateFolder(folderName + pv.n);
            getBoundary(pv.n, "");
            for (var j = 0, m = pv.cities.length; j < m; j++) {
                getBoundary(pv.cities[j].n, pv.n);
            }

        }

         // 其他地区
        if (cityData.other && cityData.other.length > 0) {
            for (var i = 0, n = cityData.other.length; i < n; i++) {
                var oth = cityData.other[i];
                getBoundary(oth.n, "");
            }

        }

        function getBoundary(name, pvName) {
            var bdary = new BMap.Boundary();

            bdary.get(name, function(rs) { //获取行政区域
                //  map.clearOverlays(); //清除地图覆盖物       
                //  var count = rs.boundaries.length; //行政区域的点有多少个
                //  for (var i = 0; i < count; i++) {
                //      var ply = new BMap.Polygon(rs.boundaries[i], {
                //           strokeWeight: 2,
                //           strokeColor: "#ff0000"
                //       }); //建立多边形覆盖物
                //       map.addOverlay(ply); //添加覆盖物
                //     map.setViewport(ply.getPath()); //调整视野         

                //  }
                var fileName = "";
                var newFileObject = null;
                if (pvName == "") newFileObject = fso.CreateTextFile(folderName + name + ".txt", true)
                else newFileObject = fso.CreateTextFile(folderName + pvName + "\\" + name + ".txt", true);

                newFileObject.write(rs.boundaries[0]);
                newFileObject.Close();
                //  eventsTable.innerHTML = rs.boundaries[0].length +':'+ rs.boundaries[0];
            });
        }
    </script>
</body>

</html>

 

 

 

现在有 了这些边界坐标数据,就可以在Google地图中显示行政区轮廓了。(ps:不知Google是否也有类似百度这样的获取边界坐标的接口,如果你知道怎么实现,请告知,谢谢)。

我把这些从百度获取的边界坐标应用到我最近写的一个地图下载器当中,实现了按省市下载地图功能,如下图所示:

效果不错吧。

当然行政区的边界坐标对于我来说,还有其他用途,本人从事GPS方面的软件开发,一个常见的功能就是“电子围栏”,来判断GPS设备是否在某一区域,以前都是单纯的设置一个矩形,或者多边形来判断,现在可以按省市,甚至县来作为电子围栏,这个功能看起来很不错。

原文地址:http://www.cnblogs.com/i-gps/archive/2012/05/18/2507941.html

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值