百度地图 Baidumap 兴趣点 POI 爬取- 全国 shp 矢量数据汇总(六)

全部 shp 数据类别及列表请参见:《全国 shp 矢量数据汇总:文章列表》

基于 C# 语言编写了百度地图兴趣点爬取程序,界面如下图所示,初级版本只为实现预期功能,界面并没有做美化。

可实现如下功能:

1、爬取指定矩形范围内的兴趣点。需指定矩形范围的坐标、兴趣点关键词(景点、酒店、银行、学校等)、兴趣点输出路径;

2、矩形范围的自动切片。百度地图对矩形范围内的兴趣点个数进行了限制,单个矩形范围内最多包含20*20=400个兴趣点,所以需要对较大范围的矩形范围进行切片划分,以保证获得更全面、更详尽的兴趣点;

3、支持断点续传。程序的操作日志全部存储于数据库中,即使遭遇程序崩溃、网络中断、百度地图并发访问限制等问题,待异常恢复后,所有的操作仍可以继续执行,具有较好的鲁棒性;

4、百度地图与 wgs84 坐标的转换。百度地图提供的数据均为百度坐标(基于国测坐标进行二次加偏),普通用户无法正常使用,程序自动将百度坐标转换为通用的 wgs84 坐标,方便用户与其他栅格、矢量数据进行叠加;

5、兴趣点数据的解析。可对百度兴趣点 json 数据进行解析,提取有价值字段(包括兴趣点名称、经纬度、地址、省份、城市、区域、电话、类别和简介网址),并将数据存储于数据库中;

6、shapefile 文件的创建与保存。自动导出为 *.shp 格式,方便在相关 gis 软件中浏览和后续操作。

按钮简介:

初级版本中共设置有三个按钮,分别对应兴趣点抓取的三个步骤。

step1、构建兴趣点格网:按照一定的规则,将较大的矩形范围切分为多个小格网,以保证每个小格网中包含适宜个数的兴趣点;

step2、衍生兴趣点页面:百度地图的单个返回页面中最多仅包含20个兴趣点,因此对于较多数目的兴趣点,需要进行“翻页”才能获取到其他页面的数据,该步骤就相当于“翻页”;

step3、开始兴趣点解析:对数据库中保存的所有兴趣点进行解析、*.shp 文件的创建与保存。该步骤将不再依赖百度地图和网络。

下载案例展示:

山东全省的景点数据为例

1、首先获取山东行政区划的外接矩形坐标,左下角:114.828462,34.383719,右上角:122.733348,38.664159,注意坐标应为百度坐标,非 wgs84 坐标。指定输出目录和兴趣点关键词。

2、点击step1、等待完成后点击step2、等待完成后点击step3。

3、完成!

以下是在山东矩形范围内爬取到的兴趣点 shp 文件,文件大小约为 41M,包含 16600 个景点数据:

在 arcmap 中打开 shp 文件,为方便查看,已叠加 wgs84 坐标系的山东省界:

可以看到,确实是一个矩形范围,并且也涵盖了周边省份的景点,如河北等,这也没办法,矩形范围检索就这样,后续使用省界裁掉多余的兴趣点数据就可以了。

再看一下属性表:

导入到 google earth 中查看一下:

找几个景点与 google earth 地标进行对比,看一下景点坐标准不准。

先去济南的大明湖看看:

再去青岛的五四广场看看:

可以看到定位还是挺准的,误差在允许范围内,毕竟景点也不是固定的某一个点。

不足之处:

1、初级版本中并没有使用多线程技术,数据爬取速度略慢,山东省景点爬取时长约为两个小时,后续有时间再进行优化;

2、百度的地名检索需要申请 apiKey,但仍会有每日的配额限制,我现在是一天3万条,后续考虑申请多个 key,以满足较大数据量的需求。

-------------------------------------------------------------------------------------------------------

猜你喜欢

转载自blog.csdn.net/abagnale999/article/details/80205762