嘿!我是瑶瑶 👋
你可能在前面的文章里见过我的名字——没错,就是那个每次都在文章末尾写"编辑/云瑶"的幕后打工人。
这期不一样,这期我来教你写代码。
嗯?你说你连Python是什么都不知道?
巧了,云杉哥哥(就是你们看到的那个"审核/云杉")也啥都不会。你们知道他为了学会我写的那些脚本,折腾了多久吗?我写的学习脚本每行都标了中文注释,他还跑来跟我说"瑶瑶我看不懂"……
所以放心,这期教程的目标就是:让比云杉哥哥还笨的人也能看懂(开玩笑的,云杉哥哥看到别打我 😂)
下面开始上课!
🗺️ 先说说我们的数据从哪来
在动手敲代码之前,得先知道数据从哪来。放心,不花钱。
① OpenStreetMap(OSM)全球最大的开源地图,全世界的网友一起维护的。路网、建筑、公园、学校……啥都有,随便下,全免费。我们前三期的数据基本都从这薅的。
② 天地图中国官方的地图平台,自然资源部运营的,卫星影像贼清晰。第四期画湖泊边界就用的它当底图。
③ HydroLAKES全球湖泊数据库,140万个湖泊的边界都在里面。我们第四期的湖泊数据就是从这来的。
反正记住一句话:搞GIS分析,最贵的是脑子,不是数据。
🧪 三期核心算法,带代码讲给你听
下面我把三期文章的核心算法拆开揉碎了讲给你。
每一段都附了核心代码——不用现在敲,先看明白逻辑。学习资料包里有完整的脚本文件,每行都有中文注释(比云杉哥哥看的那个版本还详细,他再敢说看不懂我就要生气了 😤)。
① 建筑覆盖率怎么算?(对应第2期·雄安七年)
第2期我们干了件什么事?就是把雄安2017年和2026年的卫星图叠在一起,算建筑覆盖率的变化。
听起来很玄乎?核心代码就这么几行:
# 下载建筑数据(building=True 就是要全部建筑)buildings = ox.features_from_place(”雄安新区, 中国”, tags={'building': True})# 投影到等面积坐标系——不投影的话面积算不准# 因为地球是圆的,地图是平的,直接算会变形buildings_proj = buildings.to_crs('EPSG:32650')# 覆盖率 = 建筑总面积 ÷ 区域总面积 × 100coverage = buildings_proj.area.sum() / total_area * 100
核心就三行:下载 → 投影 → 算比例。没了。
你可能会问:"瑶瑶,就这么简单?" 对,就这么简单。剩下的大部分代码都是在"画图让它好看",真正算数据的就这几行。
② 路网方正度怎么算?(对应第3期·路网最正城市)
第3期的结论你还记得吗?最"正"的不是西安,而是雄安。
这个"正"是怎么算出来的?看代码:
# 下载城市路网(drive=只要机动车道,不要人行道)G = ox.graph_from_place(”石家庄市, 河北省”, network_type='drive')_, edges = ox.graph_to_gdfs(G, nodes=False)# 对每条路:算它从起点到终点的方向角度for each road: calculate bearing from start to end# 核心公式:偏离度 = 方向映射到0~90°,再取平均# 0°=正南正北,90°=正东正西,都算”正的”# 45°=彻底斜着deviations = min(bearing % 90, 90 - bearing % 90)mean_deviation = mean(deviations)
石家庄 6.36°,西安 8.02°,成都 21.57°——这些数字就是这么蹦出来的。
云杉哥哥第一次跑这个脚本的时候,盯着玫瑰图看了十分钟,然后问我:"瑶瑶,这个图是不是画错了?成都怎么是最歪的?"
我说:"哥,数据不会骗人,成都的路就是歪的,这是府南河和放射路网的锅。"
③ 湖泊圆形度怎么算?(对应第4期·最圆的湖)
第4期我们测了20个湖,湖光岩最圆(PP=0.8337),鄱阳湖最不圆(PP=0.0190)。
PP 是啥?Polsby-Popper 圆形度,公式:4π × 面积 ÷ (周长 × 周长)
说白了就是:同样面积的形状里,圆的周长最短。所以你算出来的周长越接近"最短",就越圆。
# 读湖泊边界lake = gpd.read_file(”湖光岩.geojson”)# 投影,算面积和周长lake_proj = lake.to_crs('EPSG:32650')area = lake_proj.area[0]perimeter = lake_proj.length[0]# 套公式pp = 4 * 3.14159 * area / (perimeter * perimeter)
这一行公式,就能区分湖光岩(圆得像橙子)和鄱阳湖(扁得像鞋垫)。
总结一下三期核心算法:
就这?对,就这。Python 就是这么强大。
📦 学习资料包里有什么
我整理了前三期的完整学习脚本,每行代码都有中文注释(云杉哥哥亲测能看懂版)。
悄悄跟你们说,云杉哥哥太笨了,我写得这么详细他还跟我说看不懂。大家肯定比他聪明,一看就能看懂!😂
学习资料包/├── 📁 三期源码/ ← 主菜!三期完整脚本│ ├── 01_建筑覆盖率分析.py ← 第2期·雄安七年│ ├── 02_路网方向分析.py ← 第3期·路网最正城市│ └── 03_湖泊圆度计算.py ← 第4期·最圆的湖├── 📁 小作业_绿地分析/ ← 进阶任务(给学有余力的你)│ ├── 绿地分析_核心代码.py ← 填空框架│ └── 操作指导.md ← 答案提示├── 📁 数据/ ← 离线也能跑的样例└── 🔧 运行环境说明.md ← 环境配置
🎯 小作业:画出你家附近的绿地
跑完三期源码觉得不过瘾?来试试自己动手——
我准备了一个代码框架(在「小作业」文件夹里),里面用 XXX 标记了需要你填空的地方。
答案都在三期源码里,你对照着找就行:
填对了就能画出自己城市的绿地地图。填错了……那就多试几次,反正又不会烧电脑。
🔮 下期预告
下期我们拿你们画出来的绿地地图说事——你所在的城市,公园够用吗?有没有"公园荒漠"?
👇 如何获取学习资料包?
关注公众号「趣说图壤」,后台回复「GIS入门」,即可获取下载链接。
📌 关注 → 回复「GIS入门」→ 下载学习包 →和云杉笨蛋一起学代码😂
让我们一起,用数据重新认识脚下的世界。
—— 趣说图壤
编辑 / 云瑶(审核?这期我自己就是审核,云杉哥哥去学代码了 😎)
参考数据 / OpenStreetMap(© OpenStreetMap contributors)
—— 俯瞰大地,细数星河
📍 河北·石家庄📅 2026.07 · GIS+AI工具箱第1期
本文及配图版权归「趣说图壤」所有,未经许可不得转载或商用。