使用gdal均匀筛选点矢量

news2024/9/25 21:26:46

使用gdal均匀筛选点矢量

作用:

通过计算各点之间的欧式距离,筛选出符合目标的、均匀发布在空间中的N个数据点。

效果示意图

运行环境

python 3.10
安装:tqdm、numpy和tqdm这三个库

完整代码

import numpy as np
from osgeo import ogr, osr
from tqdm import tqdm

# 代码作用:通过计算各点之间的欧式距离,筛选出符合目标的、均匀发布在空间中的N个数据点。



# 定义需要采样的个数
n_samples = 100
input_path = r"测试数据\村点.shp"
output_path = r"测试数据\samples.shp"

# 1. 读取原始点数据
driver = ogr.GetDriverByName('ESRI Shapefile')
inds = driver.Open(input_path, 0)
layer = inds.GetLayer()

# 2. 提取点坐标和属性
coords = []
attrs = []
for feature in layer:
    geom = feature.GetGeometryRef()
    coords.append((geom.GetX(), geom.GetY()))
    attrs.append([feature.GetField(i) for i in range(feature.GetFieldCount())])
coords = np.array(coords)
attrs = np.array(attrs)

# 3. 定义距离函数
def distance(p1, p2):
    return np.sqrt(np.sum((p1 - p2)**2))

# 4. 随机选择第一个点
idx = np.random.choice(coords.shape[0], 1)
samples = coords[idx]
sample_attrs = attrs[idx]

# 5. 选择空间均衡的采样点
for _ in tqdm(range(n_samples - 1)):
    dists = np.array([np.min(np.array([distance(p, s) for s in samples])) for p in coords])
    idx = np.argmax(dists)
    samples = np.append(samples, [coords[idx]], axis=0)
    sample_attrs = np.append(sample_attrs, [attrs[idx]], axis=0)
    coords = np.delete(coords, idx, axis=0)
    attrs = np.delete(attrs, idx, axis=0)

# 6. 将采样点转为gdal几何对象
out_samples = []
for sample in samples:
    point = ogr.Geometry(ogr.wkbPoint)
    point.AddPoint(sample[0], sample[1])
    out_samples.append(point)

# 7. 创建新的矢量层并写入采样点
out_driver = ogr.GetDriverByName('ESRI Shapefile')
out_ds = out_driver.CreateDataSource(output_path)
out_layer = out_ds.CreateLayer('samples', layer.GetSpatialRef(), ogr.wkbPoint)

# 添加属性字段
for i in range(len(layer.schema)):
    field_defn = layer.schema[i]
    out_layer.CreateField(field_defn)

# 写入采样点要素
for i, sample in enumerate(out_samples):
    feature = ogr.Feature(out_layer.GetLayerDefn())
    feature.SetGeometry(sample)
    for j, attr in enumerate(sample_attrs[i]):
        feature.SetField(j, attr)
    out_layer.CreateFeature(feature)

out_layer = None
out_ds = None

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1615622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

291个地级市资源错配指数、劳动和资本相对扭曲指数(2006-2021年)

01、数据介绍 资源错配指数(Misallocation Index)是一个用于衡量资源配置效率的指标,它衡量的是生产要素的配置是否合理,是否达到了最优的状态。资源错配指数越高,资源的利用效率越低。资源错配指数主要用于衡量各种生…

没想到打脸这么快,AI程序员已经出发了!

大家好啊,我是豆小匠。 先介绍一下本期的主角:Devin,世界上第一位AI程序员,由2023年11月成立的10人初创公司Cognition AI开发。 1. AI程序员已经能做到什么程度 3月13日,Cognition AI公司在X平台(原推特&…

监控员工上网记录软件 三款超好用监控员工上网的软件

监控员工上网记录软件 三款超好用监控员工上网的软件 监控员工上网聊天、打游戏、看小说等特定行为的软件通常属于员工监控或上网行为管理软件类别。这类软件旨在帮助企业或组织管理者监督员工在工作时间内对计算机及互联网资源的使用情况,确保工作效率,…

进阶C语言-文件操作

文件操作 🎈1.为什么使用文件🎈2.什么是文件🔭2.1程序文件🔭2.2数据文件🔭2.3文件名 🎈3.文件的打开和关闭🔭3.1文件指针🔭3.2文件的打开和关闭 🎈1.为什么使用文件 ✅ 我…

vue的学习之用vue写一个hello,vue

根据以下步骤下载vue.js 介绍 — Vue.js 创建一个damo.html &#xff0c;引入vue.js即可 <body><div id"app">{{ message }}</div><!-- Vue --><!-- 开发环境版本&#xff0c;包含了有帮助的命令行警告 --><script src"js/vu…

Mysql基础(二)数据类型和约束

一 数据类型 讲解主要的数据类型,不面面俱到,后续遇到具体问题再查询补充扩展&#xff1a; 知识点的深度和广度以工作为导向 ① int float M : 表示显示宽度&#xff0c;M的取值范围是(0, 255)例如: int(5),当数据宽度小于5位的时候在数字前面需要用字符填满宽度说明&…

2元4mm2高精度温度湿度传感器GXHTC3

温湿度传感器芯片GXHTC3 前言&#xff1a; 该温湿度传感器为国产&#xff0c;批量价格约2元&#xff0c;精度较高&#xff0c;DHT11该被淘汰了&#xff0c;这个才是传感器。 特点 超低功耗 宽工作电压范围(1.62 – 5.5 V) 小型 DFN 封装: 2 2 0.75 mm3 典型精度: 湿度 2 %R…

量子城域网系列(五):几种典型的量子密钥分发网络组网结构

在上之前文章中&#xff0c;我们介绍了最基本的点对点量子保密通信网络形式以及组网方案&#xff0c;但是显然在实际的应用中&#xff0c;点对点的通信是比较少的&#xff0c;大多还是需要多个终端进行互联才能构成网络。本文我们就讨论一下几种基础的量子密钥分发网络组网结构…

基于云计算技术的HIS系统,一体化云HIS、云病历、云LIS系统源码,扩展后能够应用于医联体/医共体

医院信息管理系统云HIS系统源码&#xff0c;云计算技术的HIS系统源码 开发技术&#xff1a; 前端&#xff1a;AngularNginx&#xff1b; 后台&#xff1a;JavaSpring&#xff0c;SpringBoot&#xff0c;SpringMVC&#xff0c;SpringSecurity&#xff0c;MyBatisPlus 等&…

使用【node】创建本地接口

在前端开发的过程中&#xff0c;接口相关的信息一般是由后端处理好返回给前端&#xff0c;但是有时候后端不在的时候想自己写个接口进行测试是非常麻烦的。 node是前端一个不错的写接口工具 一 初始化文件 1 在新建一个空的文件夹node 进入空文件夹在&#xff0c;文件夹的地…

《庆余年》开发衍生短剧,阅文迈向短剧市场的一大步

《庆余年》竟然也要拍短剧了。 据悉&#xff0c;《庆余年》衍生短剧《庆余年之少年风流》预计将于5月1日开机&#xff0c;等了五年都没等到《庆余年2》&#xff0c;没想到先等到了衍生短剧。 由组讯消息可知&#xff0c;《庆余年之少年风流》讲述的是少年庆帝李云潜“扮猪吃老…

一道有意思的面试题

面试过程中没有想到合适的数据结构&#xff0c;想了半天&#xff0c;构思没有实践落地。 也是听错了&#xff0c;以为三道题都要做&#xff0c;做出来了两道&#xff0c;这道死活没落地成功。 结果&#xff0c;三道题里面任选一道就行。。。。 好吧 题目&#xff1a;给定一个…

Qt分享一个壁纸页面布局的方式

分享一个壁纸软件的设计思路 在QScrollArea中添加一个总体的垂直布局&#xff0c;创建若干个水平布局&#xff0c;使用垂直布局组合&#xff0c;具体如图。在添加QAbstractButton时设置button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)属性&#xff0c;它会…

自动化测试的7个步骤

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

Linux系统中Nginx的使用

Nginx是一款开源的高性能、高可靠性的Web服务器和反向代理服务器。它在Linux系统中得到了广泛的应用&#xff0c;被用于构建高性能的Web应用和提供反向代理服务。下面将介绍Nginx在Linux系统中的使用以及一些常见的应用案例。 一、Nginx的安装和配置 安装Nginx 在Linux系统中…

mysql 5.7分组报错问题 Expression #1 of ORDER BY clause is not in GROUP BY clause

解决方案&#xff1a; select version(), sql_mode;SET sql_mode(SELECT REPLACE(sql_mode,ONLY_FULL_GROUP_BY,)); 完美的解决方案是&#xff1a; 1 show variables like "sql_mode"; 2 3 set sql_mode; 4 set sql_modeNO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABL…

视频号背后的商机,私域电商悄悄崛起,这次新风口一定要抓住了

大家好&#xff0c;我是电商笨笨熊 随着电商的发展&#xff0c;从传统电商到直播电商&#xff0c;一代人有一代人不同的电商史&#xff1b; 而今年&#xff0c;视频号小店的推出&#xff0c;即将迎来新的电商热潮&#xff1b; 作为腾讯推出的电商项目&#xff0c;自推出之后…

SpringBoot项目启动的时候直接退出了?

SpringBoot项目启动的时候直接退出了&#xff1f; 如下图&#xff1a; 在启动SpringBoot项目的时候仅仅用了1.209s&#xff0c;然后直接退出了&#xff0c;也没有出现启动的项目对应的服务器端口号&#xff1f;为什么会这样呢&#xff1f;因为既然有服务器端口号 那么肯定会有…

【C++】学习笔记——类和对象_4

文章目录 二、类和对象13.运算符重载赋值运算符重载 14. 日期类的实现Date.h头文件Date.cpp源文件test.cpp源文件 未完待续 二、类和对象 13.运算符重载 赋值运算符重载 我们之前学了一个拷贝构造函数&#xff0c;本质上就是创建一个对象&#xff0c;该对象初始化为一个已经…

【智能算法】寄生捕食算法(PPA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年&#xff0c;AAA Mohamed等人受到自然界乌鸦-布谷鸟-猫寄生系统启发&#xff0c;提出了寄生捕食算法&#xff08;Parasitism – Predation Algorithm, PPA&#xff09;。 2.算法原理 2.1算法…