面矢量转线矢量,当然可以在arcgis上进行,只是速度实在是太慢了。
除了慢之外,还有一个很严重的问题,那就是属性字段丢失。
面矢量的属性字段如下:
在arcgis转换后的线矢量的字段如下:
使用ogr而开发的面矢量转换线矢量则不存在这个问题。对于同一个面矢量文件,arcgis需要2分钟的处理时间,而我们写的代码进行面线转换只需要10秒。这个效率提升是非常惊人的。
我使用的arcgis版本是老版本,10.2. 对于arcgis pro,我没有去测试。
现在,详细讲一讲这个过程。
在自然资源调查项目中,张工遇到了一个棘手的问题:他需要将20万亩农田的矢量面数据转换为边界线,用于后续的田埂路径分析。但当使用常规GIS软件的导出边界功能时,发现带洞的多边形(如果园中的蓄水池区域)总是处理失败,属性信息也丢失严重。这个案例暴露出GIS数据处理中一个常见痛点——如何实现精准的面转线转换?
一、面转线需求背后的技术挑战在国土调查、城市规划、农业遥感等领域,面转线操作存在三大共性需求:
拓扑关系维护:保持相邻多边形的公共边界完全重合
属性继承:保留原始面要素的编号、类型等属性信息
复杂 ...
使用 Nginx/Apache 专业部署
安装 Nginx:
sudo apt update && sudo apt install nginx
2.
创建配置文件 /etc/nginx/sites-available/video:
server {
listen 80;
server_name http://129.204.22.103/;
location / {
root /home/ubuntu/code/h8/video;
autoindex on; # 开启目录列表
# 添加视频流支持(调整浏览器缓存)
location ~ \.(mp4|webm|mov)$ {
add_header Cache-Control "no-store";
add_header X-Content-Type-Options "nosniff";
expires 0;
}
...
概述最近一位小伙伴私信我,说他在处理卫星影像时遇到一个需求:需要将大范围的栅格影像按固定网格(比如 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 ...






