上周六从迪庆到稻城(西景线-国道214-省道217-省道216),三百多公里山路风景绝美,体验了春夏秋冬(据说秋天会更美),但这儿大多数人都没听说过,网上也很少有,因为太太太偏僻了...
有些村庄藏在大峡谷里,在非工业时代用人力挖掘出他们用数十公里的沿山路对外沟通,简直和世外桃源一样。
(不知名村落1)
(不知名村落2)
(不知名村落3)
(图里的痕迹是延绵数十公里的小道)
那,我能不能找到更多类似世外桃源和它们沿路绝美的风景呢?
一方面我想去,另一方面我也觉得这是个不错的编程实例,让大家意识到python可以干什么,更加感同身受。(普及python这事纯粹是我的个人爱好,不是为了有利可图)
步骤0、抽象目标:
既然是世外桃源,我开始想的是,简化问题:把村看成平面上的点,对比点点之间的直线距离,找到最偏僻的村(它的邻居村落都很远),就是世外桃源了吧。
步骤1、准备数据:
我得知道全国所有村落和它的经纬度,百度了下,国家统计局就有,还是有结构的:省-市-县-镇-村,但需要爬,麻烦,但前人很可能已经爬过(搜索同理心)
果然有,还有经纬度的数据库文件(省了我至少5个小时的时间),包含783562万行政单位,其中镇级别(包括台湾)的有48000,村落有七十多万,棒!(数据准备完成)
其中一条数据:
592815,3,627750,0836,香格里拉镇,香格里拉,"四川,甘孜,稻城,香格里拉",XiangGeLiLa,100.278697,28.462889
步骤2、计算数据(以镇为例)
a:我需要有一个公式:给它一个指定的点,它能告诉我这个点最近的同级行政单位是谁,有多少千米?,我们叫它 find_nearest_neighbor 吧(算法题,可粗暴可精细),最粗暴的作为无非是挨个算出 x镇和47999个其他镇的距离,然后排序取最小值(怕什么呢,反正计算机的速度通常都很快,实在等不及了就另说)
b、重复使用find_nearest_neighbor,找到另47999个镇的最近邻居
c:根据a提供的距离排序,找到最偏僻的数据(这个简单excel就能做到)
3、结果分析:
花了五分钟(我做了些算法优化),结果出来了:
看起来好像是这么回事,可是 稻城-香格里拉怎么排名一千多呢,失败了。
4、反思:
最偏僻的村落只能反应的镇密集度,密集度最低的可能是西伯利亚,几千公里都可能一个景色,很单调称不上世外桃源,得好看、景色多变才行。
另,最近村落(简单)也不完全反应密集度,比如两个很近的村落在一起,离其他村落都很远。
其实也不难,就是麻烦了点,把找最近的点改成找邻居点(未必是最近点),再加上点与点的开车距离(百度和高德都有现成额api)
如果直线距离近,但开车距离远,说明路是崎岖的,很可能这儿是海拔多变,山河阻挡
5、延伸:
根据这个,给公路、高速规划提供依据(添加经济、资源、人口等指标),哪儿更适合优先建高速、高架桥等等等等。
借用python、网上现成的数据,一个小民也可以把世界看得更明白,甚至能提供数千数万人所在组织也未必具备的思考策略。
---
ps 反而稻城亚丁景区没有这么美,好像更适合天气好的时候看星星
---
纯爱好,偶尔更新一些可以感同身受的python实例(为什么值得学)和观点(不应该怎样入门),更多动机在上一篇里。
不常更新,但仍然欢迎关注