如果你的gdal版本是3.2.2及以上,那么只能:
from osgeo import gdal
ds = gdal.Open(data)
rows = ds.RasterYSize
cols = ds.RasterXSize
bandnum = ds.RasterCount
transform = ds.GetGeoTransform()
ds是一个对象,rows是影像的行,也是Y轴长度。对应的,cols则是影像的列,X轴的长度。bandnum代表影像的波段数。
transform是一个list,存储着栅格数据集的地理坐标信息。
#transform[0] /* top left x 左上角x坐标(经度)*/
#transform[1] /* w--e pixel resolution 东西方向上的像素分辨率*/
#transform[2] /* rotation, 0 if image is "north up" 如果北边朝上,地图的旋转角度*/
#transform[3] /* top left y 左上角y坐标(纬度)*/
#transform[4] ...
用 Python 把矢量等高线转成栅格网格——顺便聊聊乐高地形模型空间数据主要有矢量和栅格两种形式。矢量擅长精确描述点、线、面,比如城市边界、道路或等高线;栅格则用规则的网格像素来表示,每个像素带一个值,常用于高程、温度之类的连续数据。实际分析时,经常需要把两者结合起来,比如把矢量等高线转成高程栅格。
今天拿杭州为例,演示怎么用 Python 把等高线(矢量)转成规则网格(栅格),最后再离散化成几个高度级别——这样就能想象用不同颜色的乐高砖来搭一个迷你杭州地形模型了。整个过程主要靠 GeoPandas 和 OSMnx,代码简单,几分钟就能跑通。
数据准备杭州公开的等高线数据不太好找,我这里用一个常见的替代方案:从公开 DEM(数字高程模型)生成等高线,或者直接用开源高程数据。这里为了演示方便,我们先用 OSMnx 下载杭州市行政边界,然后假设有一份等高线数据(实际项目可以从自然资源部门或开源平台获取 DEM 后生成)。
先看边界:
import osmnx as ox
import matplotlib.pyplot as plt
# 下载杭州市行政边界
city = ox.geoc ...
[{"place_id":208441986,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. http://osm.org/copyright","osm_type":"relation","osm_id":3221112,"lat":"30.2489634","lon":"120.2052342","class":"boundary","type":"administrative","place_rank":10,"importance":0.6742110419554537,"addresstype":"city","name":"Hangzhou City","display_name":"Hangzhou City, Zhejiang, China","boundingbox":["29.1888286","30.5648514","118.3396948","120.7254851"],"geojson":{"type":"Polygon","coordinates":[[[118.3396948,29.4774 ...
地理空间数据主要分成栅格和矢量两大类。今天我们先聊矢量数据,它用点、线、多边形这些坐标集合来描述真实世界。点适合标记具体位置,比如城市或景点;线用来表示道路、河流;多边形则描绘区域边界,如省份或湖泊。这种数据特别适合处理那些位置和形状都很重要的离散特征,在农业、城市规划、交通、环境监测等领域到处都能用到。
在 Python 生态里,处理矢量数据的王牌工具就是 GeoPandas。它基于 Pandas 扩展而来,又融入了 Shapely 的几何运算能力,让你既能像用 Pandas 那样轻松操作表格数据,又能顺手做各种空间计算,简直是空间分析的利器。
下面分享我平时最常用的 10 个 GeoPandas 操作技巧,帮助你快速处理、合并和转换矢量数据。
1. 从外部加载中国地图数据
GeoPandas 早期版本有内置数据集,但现在(2026 年)已经移到独立的 geodatasets 包里。我们直接用公开的 GeoJSON 数据加载省份边界,非常方便。
import geopandas as gpd
# 从阿里云 DataV 公开接口加载中国省份边界(包含香港、澳门、台湾)
gdf_ch ...
今天是2025年12月31日,祝大家2026、2027……(省略很多年份)……开开心心,身体健康。
今天简单来写一写近况。
2025年,在写代码方面,我偷懒了很多,一整年在github的提交次数是962次。
在2024年、2023年的提交次数在1500次左右。
2025年,在下班后,不想写代码的时间大大增加。
偶尔看看抖音的乌萨奇(没看过正版的),偶尔出门骑车逛逛,偶尔看看B站视频。
2026年的计划,我这几天在思考。
主要有三点目标。
1、继续搞主业,遥感数据处理、深度学习
2、三维重建
3、硬件
第一点,主业是我能在城市立足谋生的根本,对应的专业技能必须好好打磨维系,这是安身立命的基础。
第二点,关于三维重建。这个领域难度不低,我不敢保证一定能钻研透彻,打算从点云技术入手,循序渐进地摸索,慢慢向高斯泼溅这类前沿方向靠近。
第三点是硬件学习。我买51开发板都大半年了,至今还没正式开始学习,最近又打算再入手一块32开发板——说起来也符合“差生文具多”的调侃。
其实原本还有第四、第五个计划,但我很清楚自己的精力有限,与其贪多嚼不烂,不如果断放弃后两点,把核心精力放在前三项 ...
在测绘、GIS、工程建设等领域,“国家 2000 坐标系(CGCS2000)” 早已成为高频词汇。作为我国自主的高精度大地坐标系,它不仅是现代测绘体系的基础,更支撑着从城市规划到资源勘探的各类核心应用。而在实际使用中,“投影分带” 和 “带号” 是绕不开的关键知识点 —— 今天我们就以常用的epsg 4513 和 epsg 4534 带号为例,用通俗的语言拆解国家 2000 投影坐标系的核心逻辑。
先搞懂基础:为什么需要投影分带?地球是一个不规则的椭球体,而我们日常使用的地图、工程图纸都是平面的。把三维的地球表面 “压平” 到二维平面上,这个过程就是 “地图投影”。但直接投影会产生严重的变形,导致距离、面积、角度等信息失真,无法满足高精度测绘需求。
为了解决这个问题,就有了 “投影分带” 技术:把地球表面按经线划分成一个个 “竖条区域”,每个区域单独投影。这样能把变形控制在极小范围,保证局部区域的测量精度。国家 2000 坐标系最常用的是 “3 度分带” 模式 —— 从赤道开始,每隔 3 度划一个带,全球共 120 个带,每个带都有专属的 epsg标识。
重点解析:4513 与 453 ...
我以前喜欢用gdal,不喜欢用rasterio。
因为rasterio在打包的时候存在很多问题。
但是,近一个月来,我使用rasterio的次数越来越多,主要原因还是rasterio包装了很多实用的api接口。
至于打包的问题,我后续会专门写一篇公众号去介绍怎么解决rasterio打包的问题。
今天给大家分享一段Python代码,它的功能很简单: 读取原始影像将影像的 0 值转换为 NoData 值。
import numpy as np
import rasterio
def fix_no_data_value(input_file, output_file, no_data_value=0):
with rasterio.open(input_file, "r+") as src:
src.nodata = no_data_value
with rasterio.open(output_file, 'w', **src.profile) as dst:
for i in range(1, src.count + ...
《断舍离》是一本书,2017年我买了它。但是我一直学不会断舍离。
原因很简单:例如物品A扔了就可惜,万一以后用得上呢?然后这件物品A,就被我留下来,被我放到某个角度,直到后来我并没有用到它。
我这两天在搬家,整理东西的时候才发现,我还有三张手机贴膜。分别是不同的时间购买的。
因为我需要用到手机贴膜的时候,我不知道它被我放到哪里了。甚至我已经忘了我有没用完的手机贴膜。
也是真的我需要用到它,我会打开购物软件软件,再买一次。
为什么会再买一次呢?因为我已经忘记了之前我有这个东西。
我的记性是不太好的。有次,我问我的朋友,我问她有没有容貌焦虑,她说没有。
我跟着说:我也没有,但是我有记忆焦虑。
我明明和自己的脑子说,记住XX事情,然后过了一会就忘了。
我迫切需要一个物品清单,记录了我家里有什么东西,放在了哪里。
现在我买了两个收纳箱子,后面记录清楚物品的位置。
这个需求是否可以制作成一个app,我正在思考。
我在搬家的时候,喊了一个搬家师傅,我问他:你的车能不能一车拉走,他看到我的东西后,直摇头:你东西太多了,这样不行。
他顿了一顿说:除非加钱。
他说要额外给80元。
我一听不行!我在平台上 ...
我是忘记了今天是2025年考研第一天,时间过得真快,记忆模糊到忘记了第一天要考什么科目。
难怪昨晚老妹发信息给我:考古。
她昨晚翻了翻我的朋友圈,然后给我发信息说:考古。
当时我在加班,一时之间不知道她为何说起考古的意思。
因为老妹连续几年都去当志愿者,今天也不例外。她今天六点多天没亮就出门了,给我们发了一张天色渐亮的照片。我八点半起床耍手机,看到群信息,才意识到今天是考研的第一天。
能在大学里,做一些有意思的事情,以后大学毕业了,出来工作回想以前大学生活总不至于全是灰色记忆。
每年考研的日子都是很有规律的,那就是在圣诞节附近的那个周末。
不知不觉间,距离我的考研,快十年过去了,时间是最无情的杀手。
我记得我考研分数是344分,数学考了九十多,然后其他科目分数都忘了。
由于我是临时考研的,报的学校不是优质学校,当时的想法就是“有书继续读就行,不干测量就行”。
乃至于,到9月份我才知道是先报学校,再去考试。
说起来,我是不后悔,因为当时大一大二大三,打游戏是真的“开心快乐,无忧无虑”。每天都是打游戏。
当然啦,这种无忧无虑的苦果,也是自己吃下:考不到好点的学校。
说起来也很奇怪,当年 ...
大家好,我是小白。
最近处理国产卫星数据(比如高分、吉林一号这些),经常遇到一个痛点: 拿到的原始数据(L1级)是不带地理坐标的 。
直接拖进ArcGIS或QGIS里?arcgis就自动使用同一个目录下的rpc文件对金字塔文件进行几何校正。如果你想看它到底覆盖了地球上哪块地,通常的做法是做“正射纠正”——但这玩意儿费时费力啊,几百景数据跑下来,电脑风扇都能起飞。
其实,如果我们只是想“知道它在哪”,完全不需要处理图像像素,只需要读懂它的“身份证”—— RPC文件 就够了。
今天给大家分享一段Python代码,逻辑很硬核,但用起来很爽。它的功能很简单: 读取原始影像的RPC参数,直接算出影像的四个角点坐标,生成一个Shapefile框框。
为什么要搞这么复杂?很多同学会问:“直接读Tiff里的元数据不行吗?”
对于已经纠正过的产品(L2级以上),当然可以。但对于原始影像,相机和地面的关系是非常复杂的几何投影,并没有简单的Affine Transform(仿射变换),而是通过有理多项式系数(RPC)来描述的。
简单说,RPC就是一个超级复杂的数学公式,告诉我们: 图像上的第几行第几列,对应 ...








