进行城市更新设计时,常常需要对于现有城市各个地块的功能属性进行分析。这样一张图片可谓是简明扼要地概括了整个城市的功能分布:
而且这张图在GIS / Rhino的矢量空间内,可以无限放大,且每个地块均携带有相应的地理信息。
想知道如何通过抓取在线地图数据,自动生成这样的一张城市地块功能分布图,你首先需要了解两个在线地图的重要概念:POI和AOI。POI(point ofinterest),即在线地图检索的对象之一 “兴趣点”,大家或许都知道。但AOI(area of interest)又是什么呢?
百度地图搜索“清华大学东门”,你会得到一个【带数字的小图钉】;而搜索“清华大学”,则会得到一个【蓝色区域面】+【带数字的小图钉】。小图钉是POI,是地图上的一个点。而蓝色区域面是AOI,是地图上的许多个点按顺序连成的区域面。
一般面积比较大的地点都有AOI信息,比如学校,小区,购物中心,医院,政府机构大院,公园,甚至一些大的写字楼也会有AOI。越是大城市信息越全面。
理论上,只要AOI信息足够多,可以生成一张描述城市各个地块功能属性的色块图,极大节约读者做城市设计时前期分析的时间和精力。
本文不需要代码基础,但适合喜欢动手研究的朋友。如果你没有这个闲心,还有3条免费获取国内城市AOI的方法:
1. C君之前写过一篇推送 提供了一个年久失修不反爬的入口。里面提供:地铁/医疗设施/教育设施/景区 四个类别的AOI数据,可以参照推送文章,举一反三自行获取。缺点是AOI类别较少,且不带文本信息。
2. GIS大师兄有个地图信息下载器,其免费版可以下载2km x 2km范围内的aoi 信息,缺点是对于大面积城市规划来说范围太小。而付费版1k+,对于非公司报销的使用者来说还是太贵了。
3. 百度/高德地图开放平台自定义编辑+矢量化(Rhino矢量化方法见推送 )。缺点也是单次获取范围太小,且不带文本信息。
干货部分的主体结构如下:
因为内容较多,且小硬核,分为上下两篇。本文只包含【我只想用】的内容,代码原理有空再更。
1.1. 获取代码+修改参数
关注公众号CforChaos混沌设计,回复“aoi”获取代码网盘链接,将:
这3个文件下载后放到同一个文件夹内。
在某个Python编辑器中打开代码文件:Get_AOI.py,开始根据具体需求更改9-19行的参数。
大家可以根据自己电脑上有的软件情况酌情选择打开方式,记事本和GIS自带的python编辑器没有行数编号,你要自己数行哈哈。C君为了照顾部分画图狗读者昏花的老眼,还是对着pycharm的界面讲解代码吧。
可以由百度坐标拾取系统获得,传送门:
秘钥本身是免费的,做个城市设计的爬取量和频率一般也达不到需要付费的级别(除非你要做全国所有二三线及以上城市的横向对比图,那就只能给百度充钱了)。
1.注册成为百度地图个人开发者,并申请应用秘钥
创建应用时注意:【应用类型】选【浏览器端】,【白名单】填【*】。
2.上传身份证认证身份,传送门:
注意:这步非常重要,认证前后的个人用户日配额差别很大。
从windows文件资源管理器地址栏复制的地址,需要将所有“\”替换为“/”,末尾再添加一个“/”。
True则输出为wgs84坐标(真实大地坐标系,GIS用)
False则输出为百度墨卡托投影坐标(与百度在线地图偏移一致的投影坐标系,Rhino用)。
百度地图服务器端抓取的AOI地理信息为【百度墨卡托投影坐标系】,脚本内置了【百度墨卡托】>【BD09】>【wgs84】两重转换可供选择。
【百度墨卡托】>【BD09】算法来自:(原文java,C君手工转译python)
【百度墨卡托】>【BD09】经测试与百度服务器在线转换结果一致,可放心使用
【BD09】>【wgs84】未经过测试(依照相关法律,国内地图供应商不得提供wgs84坐标),但github星标数同类算法最高,准确与否待诸君验证。
数字越大,同时运行的地块类型检索线程就越多。建议网速比较快时选择较小的线程数(比如thread_num=3)。网速如果非常慢,可以适当大点(比如thread_num=5或7)。
第一次运行时保持True不要动。
下载并安装Python(网盘链接里有安装包,你也可以上官网自己下,免费的),双击安装时注意如下图所示地勾选“Add Python3.7 to Path”(非常重要),然后一直下一步即可。
Win+R调出运行窗口,输入“cmd”进入命令提示符窗口,敲入“python”并回车,可以看到下图画面,说明安装成功。
安装完成后命令提示符窗口输入“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后结果没有增加,有可能是你第一次爬取的范围并不大,没有触发百度的随机丢包操作,可以放心进行下一步的可视化。
打开导出文件存放路径,点击进入文件夹【aoi】,可以看到各个类型的AOI信息以csv格式存在于文件夹内。
这种格式的文件可以用Excel打开,打开后效果如下图:
——第1列为AOI序号
——第2列为AOI的uid值(相当于身份标识,每个AOI的uid是独一无二的)
——第4列为组成AOI各点的顺序(用于按顺序连线)
——第5/6列为各点的经度和纬度
此时GIS老司机们肯定已经清楚怎么搞了。不过C君还是给小白们简单科普一下:
* 声明:C君是学建筑的,GIS也是现学现卖。这里提供的未见得是GIS可视化的最佳方法。
- 全选文件夹里所有aoi信息的csv,点击【Add】
经过上面的一系列操作,business_aoi.csv中包含的AOI点信息就全出现在地图上了。
- 弹出对话框中选择一个你喜欢的路径,将名称改为地块功能名,储存为shp文件
- 储存完成后,弹出对话框选【Yes】,把刚刚储存为shp文件的数据加载回来
- 弹出窗口【Input Features】选择刚刚导出的shp文件,再定义一下生成线的shp文件路径和名称
经过上面的一系列操作,我们会获得一个连线的shp:
- 弹出对话框中选择刚刚生成的线shp文件,再定义导出文件名与文件夹,【XY Tolerence】可以不填,或者填一个极小数(如0.)。
经过上面的一系列操作,我们的AOI面已经填上色了:
2.7.调整颜色与连接属性
- 点击【Table of Contents】中面的图标,在弹窗中修改面的颜色。
- 将面要素与csv文件连接,弹窗中从上至下依次选择:【FID】,csv文件,以及【Field1】
经过上面的一系列操作,AOI面已经设置成了需要的颜色,且与csv文件中的属性连接完毕,打开属性表即可看到各个面的名称:
2.8.重复步骤,加载全部类型
各类信息加载完毕之后,将无用的信息去除,可以得到如下所示的城市地块功能分布图。
Rhino可视化的步骤比GIS可视化要相对简洁,但同样也是【读取csv文件】-【连线】-【成面】的逻辑。这一步的grasshopp文件与代码一样,关注公众号CforChaos混沌设计,回复“aoi”获取代码网盘链接即可获得。
打开gh文件之前,首先应确保已安装Lunchbox。传送门:
打开gh文件,可以看到结构分成清晰的3块:
Rhino老司机们应该都知道,若一个几何体离远点过于遥远,Rhino显示会出现各种问题。而百度墨卡托投影的(0,0)点在赤道与零度经线交叉点上,通常与我们需要的城市片区相距甚远,因此应当进行一次中心归零。
当然这个中心归零并不要求太精确,因此C君偷懒地选用了B1的AOI数据点的x中位数与y中位数,作为归零点。之后可视化过程中,通过【点原生x值】减去【这个x中位值】,【点原生y值】减去【这个y中位值】,使得地图中心近似归零。
3.3.按顺序连线成面
这就是最后得到的上海市AOI可视化全图,与百度地图的偏移基本一致。
扫描下方二维码,关注公众号 CforChaos混沌设计,后台发送”aoi“获得本文代码+gh文件
mtu设置可以优化不同的网络速度,但是每个用户需要根据自己的本机网络环境来进行修改,达到最佳网速设置,很多用户想要了解自己的mtu设置多少最好,基本看过本篇文章就可以了解到mtu设置最佳网速方法了。
MTU也不是越大越好,因为MTU越大, 传送一个数据包的延迟也越大;并且MTU越大,数据包中 bit位发生错误的概率也越大。
MTU越大,通信效率越高而传输延迟增大,所以要权衡通信效率和传输延迟选择合适的MTU。
即使是光纤线路,用户每次拨号后的MTU值都会不一样(电话线、网线等入户的偏差值可能更大些),所以最优值要经过实际测试才能得到。
如果不是线路存在比较严重问题和出现大范围网页打不开的情况的话,不建议用户自行修改默认MTU数值。
总结:没有固定的最好,只有根据网络环境最合理的就是最好(不会设置的默认即可,想要增加网速的可以继续看文章)。
MTU(Maximum Transmission Unit)最大传输单元,不考虑设备、线路等因素的情况下,当然是越大传输效率越高,
因为协议数据单元的包头和包尾长度是固定值,MTU越大,则一个协议数据单元的承载的有效数据就越长,传送相同的用户数据所需的数据包个数也越低。
在Windows系统中,默认MTU值也是1500字节,但是“不同的接入方式、不同地区的网络运营商、不同的路由器”有着不同的MTU设置。
例如:ADSL接入时MTU为1492字节,假设A需要给B传输3000字节数据,如果整个传输过程中各个环节的MTU都是1500,那么2个数据包就可以传输完成。
可是偏偏这时ADSL接入方式的MTU是1492字节,数据包就因为这个MTU差异额外拆分为3个(为了便于理解,暂时不将“数据包报头”纳入考虑范围)
显然这额外增加了需要传输的数据包数量,而且拆包组包的过程也浪费了时间。如果从本地到网络采用一致的MTU就可以避免额外拆包。
以电信4M带宽为例,将操作系统的MTU值改为1492,再将路由器的MTU值从1460改为1492后,下载速度从原本的435KB/s提升到了450KB/s,提升了15KB/s。电信的带宽检测工具的检测结果也从4.09M提升到了4.19M。
1、本地MTU值大于网络MTU值时,本地传输的数据包过大导致网络会拆包后传输,不但产生额外的数据包,而且消耗了“拆包、组包”的时间。
2、本地MTU值小于网络MTU值时,本地传输的数据包可以直接传输,但是未能完全利用网络给予的数据包传输尺寸的上限值,传输能力未完全发挥。
这样我们就知道,所谓合理的设置MTU值,就是让本地的MTU值与网络的MTU值一致,既能完整发挥传输性能,又不让数据包拆分。
接下来最重要的就是要找出对于你的网络环境来说MTU多少才是合理的。
1、按Win+R组合键,调出“运行”菜单,输入“cmd”然后回车
2、在出现的“命令提示符”窗口中输入“ping -l 1472 -f ”然后回车
ping:发起一个探测请求;
-l(L的小写):限制探测包大小;
-f:禁止路由器拆分数据包
(1)如果收到了回复,那么说明你的网络允许最大MTU值就是1500字节,与系统默认值相同,只需要将路由器的MTU值也设置为1500即可;
(2)如果出现需要拆分数据包但是设置 DF。或是Packer needs to be fragmented but DF set.的提示,那就说明数据包大小超过了网络限定的MTU大小。需要减小探测包大小再次尝试。(为了截效果图,我将探测包改为1473了)
4、按“上箭头”恢复刚才输入的命令,然后以5为跨度减小包大小为1467字节,再次回车探测。
5、这时同样也有两种可能:
(1)、如果有返回,说明数据包小于MTU限制,就将包大小+3再次探测,如果+3之后没有返回,那就以1为跨度降低数据包大小进行探测。
(2)、如果还是没有返回,就继续以5为跨度减小包大小,直至有返回后进行5(1)中的操作。
6、直至你发现数据包-1后,有了返回,就说明你探测到了MTU允许的准确数据包大小。(例如从1465降低到1464就有了返回,那么允许的数据包大小就是1464)
7、不过上面得到的值还不能设置为操作系统或路由器的MTU,你找到的数据包大小需要加上28字节的“数据包报头”,才是完整的数据包尺寸。
(例如:探测到的数据包大小是1464,那么加上28字节,最终MTU=1492字节)
8、最后,只需要将路由器和操作系统中的MTU值设置为你得出的结果即可。
一、XP操作系统设置方法:
1、 按Win+R组合键,调出“运行”菜单,输入regedit,然后回车;
3、在 interface 中下可能有很多项,需要逐个观察键值,会有一个项与你的网卡IP一致,选中该项;
4、然后在该项上点击右键,选择“编辑>新建>DWORD值”,然后在右侧将其命名为“MTU”;
5、右键点击MTU,选择“修改”,在弹出的窗口中选择“十进制”,填入你得出的合理MTU值即可。
二、Vista、Win7操作系统设置方法:
三、win10操作系统设置方法:
其中,需修改的连接名 和 值 要用相应的值来代替。例如,我这里需要输入:
在这里,我已经把要修改的地方用粗体字标出来了。
另外,请大家注意,修改 MTU 值与查看不同,需要以管理员身份运行命令提示符。
当以管理员身份运行命令提示符时,输入以上命令即可成功设置。友情提示:敲击回车键之后出现“确定”二字即代表已经设置成功。
1.在 Win8.1/10 中以管理员身份运行命令提示符的方法,右击屏幕左下角的Win徽标,在弹出的右键菜单中点击“命令提示符(管理员)”。
2.Win7点击开始菜单,在所有程序找到“命令提示符(管理员)”点击运行就可以了。
以上就是mtu设置多少最好的详细内容了,设置方法其实非常简单。大家看一下就可以设置好最佳网速了,需要的用户关注下系统家园哦。
MTU,即Maximum Transmission Unit(最大传输单元),此值设定TCP/IP协议传输数据报时的最大传输单元。设置合适的MTU值可以解决“部分网站打不开”、“上网速度慢”等问题,并且可以适当提升上网速度。
设置多大的MTU值取决于你的上网方式,不同的上网方式支持不同的MTU,下面列出了一些上网方式的MTU值:
问题一:知道了我的上网方式,如何设置MTU值?
1. 在 『开始』>『运行』中,键入regedit,点确定;
3. 在 interface 底下可能有很多的选项,你一个一个的去看,会有一个选项与你的网卡的 IP 相同,那个就是你要挑选的选项啦!然后同样的在该选项上选择『编辑』>『新建』>『DWORD值』之后,建立一个名为『MTU』的DWORD,然后双击修改,选择十进制,填入合适 MTU 值,确定!大功告成!
问题二:我不知道自己的上网方式,如何确定MTU值呢?
找出 MTU 值:利用上面这个方法找到的数值还不是 MTU 喔!由于一些封包上面的问题,上面这个值再加上 28 才是我们所需要的 MTU 值!所以,在上面的例子中,我们所需要的 MTU 值是 2!
一般来讲,设计好本机的MTU值,可以解决部分网站打不开的情况,但是如果你的共享主机或路由器的MTU设置有问题,有时问题仍然存或,或者出现网速过慢的情况。合理的设置路由器与本机的MTU值,就可以完全解决上述问题,使上网速度达到最大化。
设置多大的MTU值取决于你的上网方式,不 同的上网方式支持不同的MTU,下面列出了一些上网方式的MTU值:EtherNet(一般上网方式,默认值):1500PPPoE/ADSL:1492 Dial Up/Modem:576问题一:知道了我的上网方式,如何设置MTU值?1. 在『开始』>『运行』中,键入regedit,点确定;2. 相同,那个就是你要挑选的选项啦!然后同样的在该选项上选择『编辑』>『新建』>『DWORD值』之后,建立一个名为『MTU』的 DWORD,然后双击修改,选择十进制,填入合适 MTU 值,确定!大功告成!问题二:我不知道自己的上网方式,如何确定MTU值呢?ping -f -l .0.1 C:\WINDOWS>ping -f -l 1500
使用arcswat遇到以下问题,哪位大神知道该如何解决?