北京市街道边界矢量数据获取方法
The following article is from GIS点滴 Author James
Hello,大家好,我是James.
我们知道:数据是GIS比较重要的组成部分,没有基础数据的支撑,其他工作无从展开。可能你曾为了一份行政边界数据在群里或者论坛各种跪求,但都石沉大海,膝盖也已长出了老茧,今天我以一个近期遇到的数据爬取为例,手把手教你抓取地图矢量数据。
也是偶然看到天地图北京的官网有行政区、街道办的边界数据
惯性使然打开F12,惊奇地看一串串熟悉的坐标
曾经搜遍论坛网站各个角落,今天在官方却能轻而易举的找到,真是太激动
于是先研究了url请求结构,最终得到了北京16个区和下属街道办的边界信息
接下来跟大家分享抓取过程,
1、首先进入首页(http://beijing.tianditu.gov.cn/bjtdt-mapcenter/)
2、点击【行政区划】,F12我们可以看到在http://beijing.tianditu.gov.cn/tdt-web-sysmanager/services/catalog/special/getLoginOutCatalogSpecials/38ed87a3fe8e4bb1a01949c47baf5244请求结果中包含了北京下属的16个区!
3、展开其中一个后,看到更为详细的信息
4、点击东城区,我发现在http://beijing.tianditu.gov.cn/tdt-web-sdks/biz/httpproxy/httpproxy.jsp?url=http://www.bjmap.gov.cn:8080/dfc/services/sgssfs/2220?request=getfeature&filter=+GBCODE%3D%27110101%27请求结果中有不得了的坐标串,明显是行政区划的边界节点坐标串嘛
5、继续点击建国门街道,同样在http://beijing.tianditu.gov.cn/tdt-web-sdks/biz/httpproxy/httpproxy.jsp?url=http://www.bjmap.gov.cn:8080/dfc/services/sgssfs/2220?request=getfeature&filter=+GBCODE%3D%27110101001%27看到街道办的坐标串,完美!
最后得到结果如下:
北京市辖区边界
北京市辖区街道办边界
接下来上python代码
1、首先惯例,我使用的是python2,首先声明编码,导入request、json解析模块
2、接下来需要写4个函数方法,
主要是:
(1)解析、构造url地址
(2)组织爬取的信息
3、然后是调取以上函数方法,写入至txt文件
4、最后分别得到行政区和街道办边界节点的txt文本
接下来一篇我们要将这些数据导入至ArcMap,转成空间数据文件(shapefile或者gdb要素类存储),敬请期待!