查看原文
其他

【数据不用愁】手把手教你抓取地图矢量数据【附代码和矢量地图数据】

James GIS点滴 2022-04-25

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文本

 

 

本节结束,这里附上完整的代码和txt文本下载链接

链接:https://pan.baidu.com/s/1eaDApBPATqf3D9sWwfAMow

提取码:gnkx

或者长按以下二维码获取下载

 

接下来一篇我们要将这些数据导入至ArcMap,转成空间数据文件(shapefile或者gdb要素类存储),敬请期待!


有奖


这里留个作业,感兴趣的小伙伴可以尝试下(ArcMap工具提示:点集转线、要素转面),完成的小伙伴可以将结果通过公众号聊天界面私信给我们,您将会收到我们奖励给你的【GIS百宝盘】U盘一枚。


祝大家周末愉快!

这里恰个饭,非常地、热烈地欢迎需要提升技能的小伙伴,报名我们近期举办的《ArcGIS深度制图培训·周末班》。


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存