python 计算两个经纬度的距离_一个失败但好玩的python实验:【寻找 世外桃源】

上周六从迪庆到稻城(西景线-国道214-省道217-省道216),三百多公里山路风景绝美,体验了春夏秋冬(据说秋天会更美),但这儿大多数人都没听说过,网上也很少有,因为太太太偏僻了...

c1bf7ac8018436b5856533b8832a35c6.png

78dde5ea26640eb32e4ebc5d4e53666d.png

92adee30693e10422082f186b91c2d52.png

4cefcaca6796e035697bca5b3facf997.png

847052e274c8f2d05e5f96e5d51d7dea.png

54cc08515970d119be0f7edfb6d7ea4e.png

d71d2c09d9a5ee210149a03186b75fa7.png

有些村庄藏在大峡谷里,在非工业时代用人力挖掘出他们用数十公里的沿山路对外沟通,简直和世外桃源一样。

8c249a6a4518f20cfb07704ca9918757.png

(不知名村落1)

63f2d6722d76a431eb5d18b464c30fc9.png

(不知名村落2)

4d28187be35a97ffd03056affde0d3a5.png

(不知名村落3)

5f73acbe75fd2a88a33a550a0a68a124.png

(图里的痕迹是延绵数十公里的小道)

那,我能不能找到更多类似世外桃源和它们沿路绝美的风景呢?

一方面我想去,另一方面我也觉得这是个不错的编程实例,让大家意识到python可以干什么,更加感同身受。(普及python这事纯粹是我的个人爱好,不是为了有利可图)

步骤0、抽象目标:

既然是世外桃源,我开始想的是,简化问题:把村看成平面上的点,对比点点之间的直线距离,找到最偏僻的村(它的邻居村落都很远),就是世外桃源了吧。

步骤1、准备数据:

我得知道全国所有村落和它的经纬度,百度了下,国家统计局就有,还是有结构的:省-市-县-镇-村,但需要爬,麻烦,但前人很可能已经爬过(搜索同理心)

09fe9b99ef1f4d1d8a6e21d599444210.png

果然有,还有经纬度的数据库文件(省了我至少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、结果分析:

花了五分钟(我做了些算法优化),结果出来了:

a07ed532a8d09ecb66c7a1451b2028ef.png

看起来好像是这么回事,可是 稻城-香格里拉怎么排名一千多呢,失败了。

bebfe82364831edccd2ac4b28aa3ee7c.png

4、反思:

最偏僻的村落只能反应的镇密集度,密集度最低的可能是西伯利亚,几千公里都可能一个景色,很单调称不上世外桃源,得好看、景色多变才行。

另,最近村落(简单)也不完全反应密集度,比如两个很近的村落在一起,离其他村落都很远。

其实也不难,就是麻烦了点,把找最近的点改成找邻居点(未必是最近点),再加上点与点的开车距离(百度和高德都有现成额api)

如果直线距离近,但开车距离远,说明路是崎岖的,很可能这儿是海拔多变,山河阻挡

5、延伸:

根据这个,给公路、高速规划提供依据(添加经济、资源、人口等指标),哪儿更适合优先建高速、高架桥等等等等。

借用python、网上现成的数据,一个小民也可以把世界看得更明白,甚至能提供数千数万人所在组织也未必具备的思考策略。

---

ps 反而稻城亚丁景区没有这么美,好像更适合天气好的时候看星星

---

纯爱好,偶尔更新一些可以感同身受的python实例(为什么值得学)和观点(不应该怎样入门),更多动机在上一篇里。

不常更新,但仍然欢迎关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值