概述最近一位小伙伴私信我,说他在处理卫星影像时遇到一个需求:需要将大范围的栅格影像按固定网格(比如 1000x1000 米)分割成小块瓦片,确保接边无缝,还要保存为 PNG 格式方便查看。他希望有一个简单易用的工具,最好不用装一堆环境。于是,我写了一个 Python 脚本 split_raster_into_tiles.py,用 GDAL 实现了这个功能,并用 Pyinstaller 打包成了一个独立的 .exe 文件。这篇文章就来介绍一下这个工具的用法,希望能帮到有类似需求的朋友!
需求背景小伙伴的需求很明确:输入:一张大范围的卫星影像(比如 TIFF 格式)。处理:按 1000x1000 米网格分割,边缘无缝对接。输出:生成多个小瓦片,保存为 PNG 格式(方便查看),同时保留地理信息。额外要求:最好是个独立程序,不用折腾 。
基于这个需求,我开发了 split_raster_into_tiles.py,并用 Pyinstaller 打包成了 split_raster_into_tiles.exe。下面就来详细介绍怎么用它。
功能简介split_raster_into_tiles. ...
概述论文提出了SAM-Road,一种基于Segment Anything Model(SAM)改进的算法,用于从卫星图像中高效、高精度地提取大规模矢量化道路网络图。该方法在几何形状和拓扑结构的联合建模上实现了创新,无需复杂后处理,显著提升了速度与准确性。
网络结构分析SAMRoad是项目核心模型,基于PyTorch Lightning框架构建。网络结构主要包含三个部分:1 SAM的ViT图像编码器提取特征;
2 自定义卷积解码器生成道路/交叉口掩膜;
3 拓扑网络TopoNet预测节点连接性。
训练时结合双线性采样和Transformer处理空间关系,配置文件控制不同版本的ViT模型和训练参数。
SAMRoad网络结构解析(适合初学者):
特征提取层 :
采用SAM预训练的ViT模型(支持B/L/H三种规模)
输入256/512/1024尺寸的遥感图像
输出256维的特征图(保持1/16原图分辨率)
掩膜预测层 :
4级转置卷积构成解码器(128→64→32→2通道)
每层包含LayerNorm和GELU激活
最终输出道路/交叉口二值掩膜
拓扑推理层 :
双线性采样器 ...
from osgeo import ogr
# 打开SHP文件
driver = ogr.GetDriverByName("ESRI Shapefile")
data_source = driver.Open("example.shp", 1)
layer = data_source.GetLayer()
OGR Layer 常用方法手册
图层信息获取
# 获取图层名称
print(layer.GetName())
# 获取要素总数
count = layer.GetFeatureCount()
# 获取地理范围(minX, maxX, minY, maxY)
extent = layer.GetExtent()
# 获取空间参考坐标系
spatial_ref = layer.GetSpatialRef()
print(spatial_ref.ExportToWkt())
# 获取字段定义
layer_defn = layer.GetLayerDefn()
for i in range(layer_defn.GetFieldCount()):
field_defn ...
大家好!今天我要和大家聊聊一个我写的代码——create_unique_segment_field 函数。
这是一个用 Python 和 GDAL(一个强大的地理空间数据处理库)编写的函数,专门用来给 Shapefile(一种常见的地理信息系统文件格式,简称 SHP 文件)中的某个字段创建“唯一值分段”。
如果你对编程或者 GIS(地理信息系统)不太熟悉,别担心,我会尽量用大白话一步步讲解这个函数的来龙去脉,以及它背后的技术思路。
为什么要写这个函数?故事得从我的一个实际需求说起。有一天,我拿到了一份土地使用数据的 SHP 文件,里面有个字段叫 TYPE,记录了不同的土地类型,比如“农田”、“森林”、“建筑用地”等等。
我想把这些类型变成数字编号,比如“农田”是 1,“森林”是 2,“建筑用地”是 3,方便后续在分析软件里做统计或者可视化。
手动改?太累了!这份数据有几千条记录,手动处理不仅费时间,还容易出错。于是,我决定写一个自动化工具来解决这个问题。
这个需求听起来简单,但实际操作时有几个挑战:
数据不规则:字段里的值可能是字符串、数字,甚至还有空值,怎么统一处理?
效率问题:如果 ...
在地理信息系统(GIS)中,坐标系转换是常见的操作,尤其在处理历史数据或特定区域测绘数据时。本文将介绍如何使用 Python 和 GDAL/OGR 库,将矢量文件(如 Shapefile)从任意坐标系重投影到基于 Krasovsky 1940 椭球的 Albers 等面积圆锥投影坐标系(简称 Krasovsky_1940_Albers)。该方法适用于需要处理中国或其他使用 Krasovsky 1940 椭球数据的场景,具有较强的实用性。
背景Krasovsky_1940_Albers 是一种基于 Krasovsky 1940 椭球的投影坐标系,结合 Albers 等面积圆锥投影的特点,广泛用于保持面积精确的测绘任务。Krasovsky 1940 椭球(长半轴 6,378,245 米,扁率 1/298.3)曾是苏联及中国早期测绘的基础,而 Albers 投影通过指定标准纬线和中央经线,适用于中纬度地区的长条形区域。
由于 Krasovsky_1940_Albers 并非 EPSG 数据库中的标准坐标系,其具体参数(如标准纬线、中央经线)需根据数据来源定义。本文提供一个通用的实现方案,并 ...
一个人开发一款记忆单词的App虽然工作量不小,但完全可行。
1. 明确目标和核心功能首先要想清楚这款App的目标用户是谁(比如英语初学者、考试备考者),以及核心功能是什么。记忆单词App的核心通常是帮助用户高效记住单词并复习,所以可以围绕以下功能设计:
单词库:提供单词列表(可以按难度、主题分类,如日常用语、学术词汇等)。
学习模式:展示单词、发音、释义、例句。
记忆方法:结合记忆技巧(如联想、图片、间隔重复)。
测试模式:小测验巩固记忆(如选择题、拼写题)。
复习提醒:根据遗忘曲线推送复习通知。
一个人开发时,建议从最小可行产品(MVP)开始,先实现最基础的功能,再逐步扩展。
2. 技术选型考虑到你独自开发,选择熟悉且高效的工具很重要:
前端开发:
如果你擅长移动端开发,可以用Flutter或React Native,跨平台兼容iOS和安卓。
如果倾向于简单上手,Android Studio(Kotlin)或Xcode(Swift)也可以,但只能单平台。
后端(可选):
如果单词数据量不大,可以直接用本地存储(如SQLite或JSON文件),避免服务器成本。
如果需要在 ...
原始版本功能概述该脚本通过以下步骤实现矢量范围与卫星影像的有效区域叠加分析:
1.数据输入:读取矢量边界(.shp)与卫星影像(.tif)。
2.栅格矢量化:提取卫星影像的非空值区域(有效覆盖范围),将其转为多边形矢量。
3.坐标系对齐:统一矢量与栅格的坐标参考系统(CRS)。
4.空间叠加分析:计算矢量与影像有效区域的空间交集(Overlay Intersection)。
5.成果输出:将重叠区域保存为新的矢量文件。
代码#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2025/2/26 20:24
# @File : overlay_tif_shp.py
'''
'''
from osgeo import gdal, ogr
import numpy as np
import rasterio
from rasterio.features import shapes
import geopandas as gpd
from shapely.geometry import shape
import numpy ...
以下是一份结构化的 Flutter 教程整理,适合新手逐步学习,覆盖核心知识点和实战项目:
1. 环境搭建
安装 Flutter SDK
下载并配置 Flutter SDK(Windows/macOS/Linux)
配置环境变量
安装 IDE
推荐使用 Android Studio 或 VS Code(安装 Flutter/Dart 插件)
验证安装
运行 flutter doctor 检查依赖项(可能需要安装 Android/iOS 模拟器)
2. Dart 语言基础
语法速览
变量与数据类型(int, String, bool, dynamic)
函数与箭头语法
类与对象(构造函数、继承、Mixins)
异步编程(async/await, Future, Stream)
学习资源
Dart 官方文档
3. Flutter 核心概念基础组件
Widget 分类
StatelessWidget vs StatefulWidget
常用组件
MaterialApp, Scaffold, AppBar, Text, Image ...
之前写了相同的主题,但是所用的代码python。而今天写一个坐标系转换到wgs1984的c++代码的版本。首先说一下为什么要用c++写,直接用python通杀一切不好嘛?
1 为什么要用 C++ 编写坐标系转换代码?之前我曾用 Python 实现过相同的功能——将矢量数据转换为 WGS84 坐标系。Python 凭借其丰富的库(如 GDAL 的 Python 绑定)和简洁的语法,确实在快速原型开发和小型任务中表现出色。然而,随着数据规模的增加或对性能要求的提升,Python 的局限性逐渐显现,尤其是效率问题。
Python 虽然能“通杀一切”,但它本质上是解释型语言,运行时存在较大的性能开销。特别是对于地理空间数据处理这种计算密集型任务,涉及大量坐标变换和几何操作时,Python 的单线程执行和 GIL(全局解释器锁)会导致效率瓶颈。而 C++ 作为编译型语言,可以直接生成高效的机器码,充分利用多核处理器和内存管理,显著提升性能。对于需要处理大规模矢量数据或实时性要求较高的场景,C++ 是更优的选择。
此外,使用 C++ 调用 GDAL 的原生接口,可以避免 Python 绑定带来的 ...
PNG(Portable Network Graphics)是一种广泛使用的无损压缩位图格式,因其支持多种颜色类型和色深而备受青睐。这种灵活性使得PNG在图像处理、网络传输以及各种应用场景中表现出色。本文将详细介绍PNG规范中的颜色类型和色深,并结合Python编程展示如何处理和创建不同类型的PNG图像。
PNG的颜色类型PNG规范定义了五种颜色类型(Color Type),每种类型决定了像素的颜色表示方式。以下是详细说明:
颜色类型0(灰度)
每个像素由单一灰度值表示,表示亮度。
适用于黑白或灰度图像,例如扫描文档、医学影像等。
颜色类型2(RGB)
每个像素由红(R)、绿(G)、蓝(B)三个颜色通道组成。
适用于全彩色图像,例如照片或彩色图形。
颜色类型3(索引色)
每个像素是一个索引值,指向调色板(Palette)中的颜色。
调色板存储实际的RGB值。
适用于颜色数量有限的图像,例如图标或简单的图形。
颜色类型4(灰度+Alpha)
每个像素包含一个灰度值和一个Alpha通道(透明度)。
适用于需要透明度的灰度图像。
颜色类型6(RGB+Alpha)
每个像 ...