黑科技 | 百度地图抓取地块功能(上)-百度众包任务平台

2023-04-24 01:17:21

 

进行城市更新设计时,常常需要对于现有城市各个地块的功能属性进行分析。这样一张图片可谓是简明扼要地概括了整个城市的功能分布:

上海市部分功能色块图可视化

而且这张图在GIS / Rhino的矢量空间内,可以无限放大,且每个地块均携带有相应的地理信息。

通过grasshopper 或 arcmap进行设置,你得到不仅是一张彩色图片,还有百度地图的全地理信息

想知道如何通过抓取在线地图数据,自动生成这样的一张城市地块功能分布图,你首先需要了解两个在线地图的重要概念:POI和AOI。POI(point ofinterest),即在线地图检索的对象之一 “兴趣点”,大家或许都知道。但AOI(area of interest)又是什么呢?

举个栗子:

百度地图搜索“清华大学东门”,你会得到一个【带数字的小图钉】;而搜索“清华大学”,则会得到一个【蓝色区域面】+【带数字的小图钉】。小图钉是POI,是地图上的一个点。而蓝色区域面是AOI,是地图上的许多个点按顺序连成的区域面。

POI与AOI举例

一般面积比较大的地点都有AOI信息,比如学校,小区,购物中心,医院,政府机构大院,公园,甚至一些大的写字楼也会有AOI。越是大城市信息越全面。

不同类别的AOI

理论上,只要AOI信息足够多,可以生成一张描述城市各个地块功能属性的色块图,极大节约读者做城市设计时前期分析的时间和精力。

干货开始之前高能预警

本文不需要代码基础,但适合喜欢动手研究的朋友。如果你没有这个闲心,还有3条免费获取国内城市AOI的方法:

1. C君之前写过一篇推送 黑科技 | 爬取百度地图及矢量化 提供了一个年久失修不反爬的入口。里面提供:地铁/医疗设施/教育设施/景区 四个类别的AOI数据,可以参照推送文章,举一反三自行获取。缺点是AOI类别较少,且不带文本信息。

传送门:http://wiki.lbsyun.baidu.com/custom/

2. GIS大师兄有个地图信息下载器,其免费版可以下载2km x 2km范围内的aoi 信息,缺点是对于大面积城市规划来说范围太小。而付费版1k+,对于非公司报销的使用者来说还是太贵了。

传送门: http://www.gisdsx.com/

3. 百度/高德地图开放平台自定义编辑+矢量化(Rhino矢量化方法见推送 走捷径 | 你大概想不到的矢量地图获取方法)。缺点也是单次获取范围太小,且不带文本信息。

我是干货分割线

干货部分的主体结构如下:

一.我只想用

1.爬虫获取数据

2.GIS可视化

3.Rhino可视化

二.我想了解代码原理

1.POI检索解析

2. 递归划分搜索框

3. AOI检索解析

4. 坐标纠偏

5. 异步爬虫

因为内容较多,且小硬核,分为上下两篇。本文只包含【我只想用】的内容,代码原理有空再更。

【爬虫获取数据】

1.1. 获取代码+修改参数

关注公众号CforChaos混沌设计,回复“aoi”获取代码网盘链接,将:

Get_AOI.py

AOI_Query.py

CoordTransform.py

这3个文件下载后放到同一个文件夹内。

网盘链接打开后内容如图,后三个为 .py文件

在某个Python编辑器中打开代码文件:Get_AOI.py,开始根据具体需求更改9-19行的参数。

编辑器好用程度排序:

pycharm/eclipse等IDE> Rhino自带python编辑器 > GIS自带python编辑器=记事本

大家可以根据自己电脑上有的软件情况酌情选择打开方式,记事本和GIS自带的python编辑器没有行数编号,你要自己数行哈哈。C君为了照顾部分画图狗读者昏花的老眼,还是对着pycharm的界面讲解代码吧。

9-16行包含使用者需要自己更改的参数,19行为开关9-12行——需要获取AOI信息的经纬度范围

可以由百度坐标拾取系统获得,传送门:

http://api.map.baidu.com/lbsapi/getpoint/index.html

13行——百度地图个人开发者的应用秘钥

秘钥本身是免费的,做个城市设计的爬取量和频率一般也达不到需要付费的级别(除非你要做全国所有二三线及以上城市的横向对比图,那就只能给百度充钱了)。

步骤为:

1.注册成为百度地图个人开发者,并申请应用秘钥

传送门:http://lbsyun.baidu.com/apiconsole/key

创建应用时注意:【应用类型】选【浏览器端】,【白名单】填【*】。

这是申请应用秘钥的界面

2.上传身份证认证身份,传送门:

http://lbsyun.baidu.com/apiconsole/auth#/results

注意:这步非常重要,认证前后的个人用户日配额差别很大。

14行——导出文件的存放路径。

从windows文件资源管理器地址栏复制的地址,需要将所有“\”替换为“/”,末尾再添加一个“/”。

例如“J:\0_weixin_tutorial\get_aoi\test_output”,

应改为“J:/0_weixin_tutorial/get_aoi/test_output/”,否则python无法读取。

15行——输出坐标类型

选填True或False

True则输出为wgs84坐标(真实大地坐标系,GIS用)

False则输出为百度墨卡托投影坐标(与百度在线地图偏移一致的投影坐标系,Rhino用)。

坐标转换算法声明:

百度地图服务器端抓取的AOI地理信息为【百度墨卡托投影坐标系】,脚本内置了【百度墨卡托】>【BD09】>【wgs84】两重转换可供选择。

【百度墨卡托】>【BD09】算法来自:(原文java,C君手工转译python)

https://github.com/Talefairy/smart/blob/master/smart-java/src/main/java/com/gis/tools/BaiduMokatorToLngLat.java

【BD09】>【wgs84】算法来自:

https://github.com/wandergis/coordTransform_py

【百度墨卡托】>【BD09】经测试与百度服务器在线转换结果一致,可放心使用

【BD09】>【wgs84】未经过测试(依照相关法律,国内地图供应商不得提供wgs84坐标),但github星标数同类算法最高,准确与否待诸君验证。

16行——同时运行的最大线程数

数字越大,同时运行的地块类型检索线程就越多。建议网速比较快时选择较小的线程数(比如thread_num=3)。网速如果非常慢,可以适当大点(比如thread_num=5或7)。

19行——抓取模式

第一次运行时保持True不要动。

1.2.安装Python与相关库+运行代码

下载并安装Python(网盘链接里有安装包,你也可以上官网自己下,免费的),双击安装时注意如下图所示地勾选“Add Python3.7 to Path”(非常重要),然后一直下一步即可。

△如果不勾选,自己添加环境变量会有点麻烦

Win+R调出运行窗口,输入“cmd”进入命令提示符窗口,敲入“python”并回车,可以看到下图画面,说明安装成功。

△只要显示出python的版本号(我的是3.7.3)就说明安装成功

保持网络畅通:

命令提示符窗口输入“pip install requests”后回车,python开始自动下载安装requests库;

命令提示符窗口输入“pip install urllib”后回车,python开始自动下载安装urllib库;

命令提示符窗口输入“pip install pandas”后回车,python开始自动下载安装pandas库;

命令提示符窗口输入“pip install gevent”后回车,python开始自动下载安装gevent库;

命令提示符窗口输入“pip install numpy”后回车,python开始自动下载安装numpy库。

安装完成后命令提示符窗口输入“python ”(即“python”+空格),将修改好的Get_AOI.py文件拖拽至空格后面并回车,程序开始运行。(应保证三个 .py 文件位于同一个文件夹)

脚本运行时会每爬取一页的信息会打印提示

1.3. 运行补丁,补全数据

同一个账号秘钥爬取过多过快时,百度服务器会进行随机丢包,导致许多POI、AOI不能被成功检索到。经测试,这种情况不能通过限制QPS低于百度官方文档QPS峰值避免,属于玄学范畴。因此,第一次全类型爬取之后,很有可能需要运行一次补丁脚本,以补全数据。

再次用某个python编辑器打开Get_AOI.py,修改第19行改变抓取模式。将toggle_mode= True改为False并保存。建议出去吃个饭午个休,再回来打开命令提示符窗口,拖拽运行修改后的Get_AOI.py文件(某次大量爬取之后,百度会对你限流一段时间,我也不知道这个时间具体多长,取决于百度服务器那天忙不忙了)。

*注意:如果patch后结果没有增加,有可能是你第一次爬取的范围并不大,没有触发百度的随机丢包操作,可以放心进行下一步的可视化。

【GIS可视化】

打开导出文件存放路径,点击进入文件夹【aoi】,可以看到各个类型的AOI信息以csv格式存在于文件夹内。

导出文件夹内容一览

这种格式的文件可以用Excel打开,打开后效果如下图:

——第1列为AOI序号

——第2列为AOI的uid值(相当于身份标识,每个AOI的uid是独一无二的)

——第3列为名称

——第4列为组成AOI各点的顺序(用于按顺序连线)

——第5/6列为各点的经度和纬度

此时GIS老司机们肯定已经清楚怎么搞了。不过C君还是给小白们简单科普一下:

* 声明:C君是学建筑的,GIS也是现学现卖。这里提供的未见得是GIS可视化的最佳方法。

2.1. Arcmap新建空白模板地图

2.2. 加载存储AOI信息的csv文件

-【Table Of Content】栏目下【Layers】右键选择【Add Data】

- 弹出窗口菜单栏选择【Connect To Folder】链接到 aoi导出文件夹

- 全选文件夹里所有aoi信息的csv,点击【Add】

操作截图如下:

2.3. 可视化AOI点

- 对csv文件右键选择【Display XY Data】

- 弹出对话框中【X Field】选【Field5】,【Y Field】选【Field6】,再选【Edit】

- 弹出对话框,【Geographic Coordinate System】选择【World】, 内部再选【WGS 1984】,选【确定】

操作截图如下:

经过上面的一系列操作,business_aoi.csv中包含的AOI点信息就全出现在地图上了。

2.4. AOI点导出至shp文件

- 对csv Events 右键,选择【Data】-【Export Data】

- 弹出对话框中选择一个你喜欢的路径,将名称改为地块功能名,储存为shp文件

- 储存完成后,弹出对话框选【Yes】,把刚刚储存为shp文件的数据加载回来

操作截图如下:

2.5. 按顺序连线

- 菜单栏选择【ArcToolbox】

- 弹出工具窗中选择【Data Management Tools】-【Features】-【Points ToLine】

- 弹出窗口【Input Features】选择刚刚导出的shp文件,再定义一下生成线的shp文件路径和名称

-【Line Field】选【Field2】,【Sort Field】选【Field4】,勾选【Close Line】, 点击【OK】即可

操作截图如下:

经过上面的一系列操作,我们会获得一个连线的shp:

2.6.线转面

- 回到【ArcToolbox】,选择【FeatureTo Polygon】

- 弹出对话框中选择刚刚生成的线shp文件,再定义导出文件名与文件夹,【XY Tolerence】可以不填,或者填一个极小数(如0.0000000001)。

操作截图如下:

经过上面的一系列操作,我们的AOI面已经填上色了:

2.7.调整颜色与连接属性

- 点击【Table of Contents】中面的图标,在弹窗中修改面的颜色。

- 面要素右键-【Joins and Relates】-【Join】

- 将面要素与csv文件连接,弹窗中从上至下依次选择:【FID】,csv文件,以及【Field1】

操作截图如下:

经过上面的一系列操作,AOI面已经设置成了需要的颜色,且与csv文件中的属性连接完毕,打开属性表即可看到各个面的名称:

2.8.重复步骤,加载全部类型

各类信息加载完毕之后,将无用的信息去除,可以得到如下所示的城市地块功能分布图。

【Rhino可视化】

Rhino可视化的步骤比GIS可视化要相对简洁,但同样也是【读取csv文件】-【连线】-【成面】的逻辑。这一步的grasshopp文件与代码一样,关注公众号CforChaos混沌设计,回复“aoi”获取代码网盘链接即可获得。

打开gh文件之前,首先应确保已安装Lunchbox。传送门:

https://www.grasshopper3d.com/group/lunchbox

打开gh文件,可以看到结构分成清晰的3块:

3.1.读取各类别csv文件

第一模块拆开详解:

3.2.近似中心归零

Rhino老司机们应该都知道,若一个几何体离远点过于遥远,Rhino显示会出现各种问题。而百度墨卡托投影的(0,0)点在赤道与零度经线交叉点上,通常与我们需要的城市片区相距甚远,因此应当进行一次中心归零。

从E/F栏可以看到,墨卡托投影坐标下的xy值数字很大,会给Rhino带来不小的运算量

当然这个中心归零并不要求太精确,因此C君偷懒地选用了B1的AOI数据点的x中位数与y中位数,作为归零点。之后可视化过程中,通过【点原生x值】减去【这个x中位值】,【点原生y值】减去【这个y中位值】,使得地图中心近似归零。

3.3.按顺序连线成面

第三模块拆开详解:

这就是最后得到的上海市AOI可视化全图,与百度地图的偏移基本一致。

扫描下方二维码,关注公众号 CforChaos混沌设计,后台发送”aoi“获得本文代码+gh文件


以上就是关于《黑科技 | 百度地图抓取地块功能(上)-百度众包任务平台》的全部内容,本文网址:https://www.7ca.cn/baike/19167.shtml,如对您有帮助可以分享给好友,谢谢。
标签:
声明

排行榜