前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >POI的体量 - AOI数据获取脚本分享

POI的体量 - AOI数据获取脚本分享

作者头像
Sidchen
发布2021-04-13 10:30:33
2.3K0
发布2021-04-13 10:30:33
举报
文章被收录于专栏:规划领域技术规划领域技术

摘要:

带体量(面积、体积及其他性质)的POI数据无疑是研究城市功能区域的有力工具。本次编写了一套脚本,辅助人工来完成POI体量信息(AOI)的获取,虽仍然需要人工操作,但简化了不少。

(太长不看,拉到底下3rd-4rd即可)

最终效果:

图 1最终数据效果(自绘)

-1st- 概述

POI(Point of Interest)数据是识别城市区域的有力工具, 以往常用的是点位信息,用来查看各类城市功能的聚集程度,但忽略了功能区的面积、体积、性质等等内容,而很难反映真实。AOI(Area of Interest)数据是对POI数据的有益补充,百度、高德、天地图等电子地图花费了大量的力气将城市各功能做了边界界定(颜色区分),比如高德地图搜索某个医院时,会圈一个红色区域来表达医院范围(还有相应的建筑形态),但是百度、天地图都只是显示点位。

我一直觉得,这个数据是很有必要的,而且是可以获取的。如果是传统方式,那路子就是——下载地图,然后手工描图——因为这是电子地图们公开显示的信息

——但是,你们也知道,我非常,非常,非常不喜欢描图(现在知道一下也可以)

于是一直存了一份要写一个脚本来获取AOI数据的心思。

前几天正好有个同学问我这方面的事情@SKkkkkk,“择日不如撞日”,于是便花了1-2天时间,写了这套脚本——能获取到数据,效率的话,只能说比人工稍微快一点,仍然需要人工操作配合(也是无奈)

获取数据源为仅“开放”的高德地图

(求高德不要不开放这个数据了,学百度、天地图他们,虽然我很可以理解大家对于自己辛苦整理的数据库的保护,但是即使不以边界的形式开放这个数据,但也可以通过下载下来人工描的方式获取到——这不是另一种形式的开放吗?既然如此何必不“与人方便”呢?如果说,怕非正规数据爬取,徒增服务器压力,那可以将这种行为限定在一定范畴之内的,望如是//祈祷表情)

-2nd- 编写思路

网络上有早些年获取AOI数据的接口,比如高德地图的这个:

https://ditu.amap.com/detail/get/detail?id=(……)

但是这个接口,直接调用,没有几次就会返回乱码。

而且你在地图界面上,连续点击10次左右,就会显示滑块让你休息一下,之后再连续点击10次左右,就会显示让你休息一下再访问的页面(没有滑块验证,只能等着)——这个也是脚本编写完才发现的(但是有应对机制,不用担心)

《——这些都是高德地图的反爬取数据的机制

很可惜,没有挡住我“不想描图”的强烈诉求

(受前人经验启发)我按下F12,切换到浏览器后台[网络]监控窗口,随便在地图上点击了某个功能区域,发现仍然是这个接口,它!返回了目标数据(甚至还有更加详细的信息,比如住宅功能区是多层住宅、有多少个停车位等等,后期自行探索好了)。

如天安门

……

Shape: “116.396685,39.910178;116.398139,39.910215;116.398148,39.910211;116.398152,39.910201;116.398206,39.908596;116.398196,39.90859;116.398186,39.908587;116.397976,39.908572;116.397966,39.908561;116.397995,39.908288;116.397987,39.908277;116.397832,39.908257;116.397814,39.908247;116.397841,39.907983;116.397836,39.90797;116.397829,39.907965;116.39717,39.907949;116.397163,39.907956;116.397155,39.907969;116.39714,39.908231;116.397131,39.908235;116.396982,39.90824;116.396973,39.908244;116.39695,39.908515;116.396941,39.90852;116.396769,39.908519;116.396758,39.908525;116.396675,39.910163;116.396677,39.910175;116.396685,39.910178”

……

一切都开始变得简单起来(并不是…………)

这个机制是这个样子的(不要觉得我是傻子)

图 2高德地图网络通信(自绘)

因为不知道怎么批量筛选导出浏览器后台[网络]监控窗口的数据,所以我想到了专门的抓包[1]软件Fiddler。

图 3 Fiddler工作原理

果然不负众望

总结一下数据获取思路:

  1. 确定要获取AOI数据的POI名称
  2. 在高德地图上搜索该名称
  3. 通过人工点击的方式请求AOI数据,并用Fiddler抓包

(↑很累的人工部分,不过你有什么办法呢)

  1. 解析抓包数据
  2. 导入ArcGIS生成形状面

确定了要编写的脚本/制作的工具:

(1-3)步的辅助脚本,希望的是不要不停地切换电脑窗口,来复制POI名称

——可能是一个html

(为此我还去补了CSS语言的知识,欸HTML、JavaScript、CSS这次是学全了,不过仍然是半吊子的,太难啦)

(4)步的解析脚本

——用python解析json

(5)步的ArcGIS模型工具

-3rd- 脚本使用

共享文件夹下包含三个文件:

1-Fiddler Everywhere 1.5.1.exe(安装包)

2-GetAOI.html(辅助脚本)

3-FormatAOIData.exe(解析脚本)

RoutesDraw.tbx(绘制工具)

因为比较复杂,所以录制了一个操作演示:

文字版:

1. 确定要获取边界的POI名称(爬取、地图搜索皆可)

2. 安装并运行Fiddler软件,开启抓包(capture)

* (首次安装需要管理员身份运行,并在右上角设置-HTTPS中点击“trust https root”)

3. 在地图中搜索并点选目标数据(地图需显示选中边界区域)

4. 完成区域选择后,在Fiddler中筛选目标数据,然后导出(保存格式为Raw File)

* (header筛选地址:ditu.amap.com/detail/get)

5. 使用提供的FormatAOIData程序处理导出文件

* (FormatAOIData程序需与导出文件夹在同一目录下(会自动定位到get文件夹下的detail文件,即储存各个AOI数据的文件)

-4th- 获取方式

后台回复“资源素材共建计划

数据获取脚本文件夹下

RoutesDraw.tbx

子文件夹下:AOI数据(POI边界)获取脚本

不知道高德还会开放多久的数据

且用且珍惜

这个思路还能获取很多其他的数据

且行且看看


[1]抓包(packet capture)就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,也用来检查网络安全。抓包也经常被用来进行数据截取等。(百度百科抓包词条)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 规划人在路上 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • -1st- 概述
  • -2nd- 编写思路
  • -3rd- 脚本使用
  • -4th- 获取方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档