当前位置: 首页 > news >正文

网格矢量如何计算莫兰指数

网格矢量如何计算莫兰指数

引言

遇到一个问题,计算矢量网格的莫兰指数。

概念解释

莫兰指数

莫兰指数(Moran’s Index)是一种空间自相关指标,用于衡量空间数据的相似性和聚集程度。它可以用来描述一个区域与其邻近区域之间的属性值的相关性。莫兰指数的取值范围通常在-1到1之间。

  • 当莫兰指数接近1时,表示空间数据呈现出正相关,即相似的值倾向于聚集在一起。
  • 当莫兰指数接近-1时,表示空间数据呈现出负相关,即不同的值倾向于聚集在一起。
  • 当莫兰指数接近0时,表示空间数据呈现出随机分布,没有明显的空间自相关性。

knearst=4?

knearst=4矩阵是一种空间权重矩阵,用于定义空间数据中每个观测点的邻域。在这种矩阵中,每个观测点的邻域由其最近的4个点组成。

示意图,这个用距离小时

解决思路

计算矢量数据中每个要素(网格)的局部莫兰指数,并将计算结果添加到矢量数据的属性表中。我做了一个示意矢量,如图所示:

因为需要涉及到矢量数据的操作,这里我们使用gdal

还涉及到莫兰指数,我们使用pysal,这个包用于空间权重矩阵的构建、空间自相关指标的计算、空间回归模型的估计等。

初始化和读取矢量数据

import numpy as np
import pysal
from osgeo import ogrdriver = ogr.GetDriverByName('ESRI Shapefile')
SHP_PATH = r"矢量数据.shp"
dataset = driver.Open(SHP_PATH, 1) 
layer = dataset.GetLayer()
  1. 使用 ogr 库打开矢量数据文件(ESRI Shapefile),以读写模式打开。
  2. 获取矢量数据的图层。

提取属性值和坐标

values = []
coords = []
for feature in layer:geom = feature.GetGeometryRef()centroid = geom.Centroid()coords.append([centroid.GetX(), centroid.GetY()])values.append(feature.GetField('singlearea'))values = np.array(values)
coords = np.array(coords)
  1. 遍历图层中的每个要素(feature)。
  2. 获取要素的几何体(geometry),并计算其质心坐标。
  3. 将质心坐标添加到 coords 列表中。
  4. 将指定字段(‘singlearea’)的属性值添加到 values 列表中。
  5. 将属性值和坐标转换为 NumPy 数组。

创建权重矩阵

knn = pysal.lib.weights.KNN(coords, k=4)
knn.transform = 'r'
  1. 使用 pysal 库的 KNN 函数创建 k 最近邻权重矩阵,设置 k=4
  2. 对权重矩阵进行行标准化。

计算局部莫兰指数

local_moran = pysal.explore.esda.Moran_Local(values, knn)
print("局部莫兰指数:", local_moran.Is)# 标准化局部莫兰指数
min_value = np.min(local_moran.Is)
max_value = np.max(local_moran.Is)
normalized_local_moran = (local_moran.Is - min_value) / (max_value - min_value) * 2 - 1
print("标准化后的局部莫兰指数:", normalized_local_moran)
  1. 使用 pysal 库的 Moran_Local 函数计算每个网格的局部莫兰指数。
  2. 打印计算得到的局部莫兰指数。

将局部莫兰指数添加到矢量数据属性表

lisa_field = ogr.FieldDefn('LISA_I', ogr.OFTReal)
layer.CreateField(lisa_field)dataset = None
dataset = driver.Open(SHP_PATH, 1)
layer = dataset.GetLayer()for i in range(layer.GetFeatureCount()):feature = layer.GetFeature(i)feature.SetField('LISA_I', float(local_moran.Is[i]))layer.SetFeature(feature)
  1. 创建一个新的字段(‘LISA_I’)来存储局部莫兰指数。
  2. 重新打开矢量数据集并获取图层。
  3. 遍历图层中的每个要素。
  4. 使用 layer.GetFeature(i) 获取要素,并将对应的局部莫兰指数赋值给新字段。
  5. 更新要素的属性表。

关闭数据集并销毁数据源

dataset.Destroy()
dataset = None
print("局部莫兰指数已成功添加到矢量数据属性表中。")
  1. 关闭矢量数据集。
  2. 销毁数据源以释放资源。
  3. 打印提示信息,表示局部莫兰指数已成功添加到矢量数据的属性表中。

完整代码

import numpy as np
import pysal
from osgeo import ogr# 打开矢量数据文件(以读写模式打开)
driver = ogr.GetDriverByName('ESRI Shapefile')
SHP_PATH = r"矢量数据 - 副本.shp"
dataset = driver.Open(SHP_PATH, 1)  
layer = dataset.GetLayer()# 提取属性值和坐标
values = []
coords = []
for feature in layer:geom = feature.GetGeometryRef()centroid = geom.Centroid()coords.append([centroid.GetX(), centroid.GetY()])values.append(feature.GetField('cenlan'))# 将属性值和坐标转换为NumPy数组
values = np.array(values)
coords = np.array(coords)# 创建k最近邻权重矩阵(knearst=4)
knn = pysal.lib.weights.KNN(coords, k=4)# 行标准化权重矩阵
knn.transform = 'r'# 计算每个网格的局部莫兰指数
local_moran = pysal.explore.esda.Moran_Local(values, knn)
print("局部莫兰指数:", local_moran.Is)# 标准化局部莫兰指数
min_value = np.min(local_moran.Is)
max_value = np.max(local_moran.Is)
normalized_local_moran = (local_moran.Is - min_value) / (max_value - min_value) * 2 - 1
print("标准化后的局部莫兰指数:", normalized_local_moran)# 将标准化后的局部莫兰指数添加到矢量数据属性表,使用有效的字段名称
lisa_field = ogr.FieldDefn('LISA_I', ogr.OFTReal)
layer.CreateField(lisa_field)# 重新打开数据集并获取图层
dataset = None
dataset = driver.Open(SHP_PATH, 1)
layer = dataset.GetLayer()# 使用 layer.GetFeature(i) 获取要素并更新,使用更新后的字段名称
for i in range(layer.GetFeatureCount()):feature = layer.GetFeature(i)feature.SetField('LISA_I', float(normalized_local_moran[i]))layer.SetFeature(feature)# 关闭数据集并销毁数据源
dataset.Destroy()
dataset = Noneprint("标准化后的局部莫兰指数已成功添加到矢量数据属性表中。")

效果展示

运行完代码,效果为:

总结

使用gdal负责空间数据处理,使用pysal完成莫兰指数的计算,然后把计算结果写入到属性表里,

相关文章:

网格矢量如何计算莫兰指数

网格矢量如何计算莫兰指数 引言 遇到一个问题,计算矢量网格的莫兰指数。 概念解释 莫兰指数 莫兰指数(Moran’s Index)是一种空间自相关指标,用于衡量空间数据的相似性和聚集程度。它可以用来描述一个区域与其邻近区域之间的属…...

《containerd原理剖析与实战》大模型时代下如何学习云原生

大模型与云原生 近年来,大语言模型的热度可谓是愈发高涨,尤其是今年年初 Sora 的出现,更是让全球再次看到了AIGC 的巨大威力。 Sora 生成实例视频---几头巨大的长毛猛犸踏着积雪的草地而来 在当前大模型流行的时代下,云原生技术…...

【实用工具】使用飞书机器人监控工程日志

1.创建一个飞书群聊,设置-->群机器人-->添加机器人-->自定义机器人-->修改机器人名称-->添加 2.复制webhook地址 3.编写日志请求代码 import logging import requests import json import os from datetime import datetime import time import sub…...

NIKKE胜利女神PC怎么设置中文 手把手教你设置中文教程

这个游戏中的妮姬分四个企业,其中朝圣者这个派别的妮姬很少而且不在愿望单理,朝圣者的所有姐姐都很哇塞,红莲更是其中的大姐大。一般想抽朝圣者只能靠歪或者出限定卡池,举个栗子,我入坑的时候 朝圣者 神罚 是限定卡池&…...

【leetcode面试经典150题】2.移除元素(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…...

实现几何对象按照一定距离向外缓冲

1、首先&#xff0c;确保你已经引入了Turf.js库。你可以通过在HTML文件中添加以下代码来引入 <script src"https://cdn.jsdelivr.net/npm/turf/turf6.5.0/turf.min.js"></script>2、使用turf.buffer实现几何对象按照设定距离扩充 let originalCoordinat…...

现代深度学习模型和技术

Transformer模型的理解和应用 Transformer模型自2017年由Vaswani等人在论文《Attention is All You Need》中提出以来&#xff0c;已经彻底改变了自然语言处理&#xff08;NLP&#xff09;领域的面貌。Transformer的核心是自注意力&#xff08;Self-Attention&#xff09;机制…...

go的orm框架-Gorm

官网文档 特点 全功能 ORM 关联 (拥有一个&#xff0c;拥有多个&#xff0c;属于&#xff0c;多对多&#xff0c;多态&#xff0c;单表继承) Create&#xff0c;Save&#xff0c;Update&#xff0c;Delete&#xff0c;Find 中钩子方法 支持 Preload、Joins 的预加载 事务&…...

嵌入式开发学习---(部分)数据结构(无代码)

数据结构 为什么学习数据结构&#xff1f; 1&#xff09;c语言告诉如何写程序&#xff0c;数据结构是如何简洁高效的写程序 2&#xff09;遇到一个实际问题&#xff0c;需要写程序去实现相应功能&#xff0c;需要解决那两个方面的问题&#xff1f; 如何表达数据之间的逻辑规律…...

ChatGPT 之联盟营销

原文&#xff1a;ChatGPT for Affiliate Marketing 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第二章 制定转化对话 制定转化对话是每个营销人员和企业所有者都应该掌握的关键技能。它涉及创建和传递引人入胜的信息&#xff0c;吸引您的受众并激励他们采取行动。…...

1.k8s简介

目录 k8s是什么 k8s不是什么 云原生 微服务 整体式架构与微服务架构 微服务的特性 微服务的优势 k8s是什么 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快…...

go包下载时报proxyconnect tcp: dial tcp 127.0.0.1:80: connectex错误的解决方案

一大早的GoLand就开始抽风了&#xff0c;好几个文件import都红了&#xff0c;于是我正常操作点击提示的sync&#xff0c;但是却报了一堆错&#xff1a; go: downloading google.golang.org/grpc v1.61.1 go: downloading google.golang.org/genproto v0.0.0-20240228224816-df9…...

Vaadin框架是如何处理前后端交互的?列举几个Vaadin中常用的UI组件,并描述它们的作用。如何使用Vaadin的布局管理器来构建复杂的用户界面?

Vaadin框架是如何处理前后端交互的&#xff1f; Vaadin框架处理前后端交互的方式主要基于服务端渲染和事件驱动的编程模型。以下是具体的处理过程&#xff1a; 服务端渲染&#xff1a;Vaadin应用程序的UI组件是在服务器端创建和渲染的。当用户在浏览器中访问应用程序时&#x…...

动态属性的响应式问题和行内编辑的问题

动态属性的响应式问题 通过点击给目标添加动态数据&#xff0c;该数据不具备响应式特性 如下图&#xff1a; 点击编辑&#xff0c;前面的数据框会变成输入框&#xff0c;点取消会消失 // 获取数据 async getList () {const res await xxxthis.list res.data.rows// 1. 获…...

微信小程序第六次课(模块化和绑定事件)

模块化 1.首先 我们在utils里面创建一个新的js文件 2.新的js文件里面写我们要实现的函数功能 3.把新的函数功能 通过 module.export.对外公开文件名 新文件名 的方式把之前的函数公开到其他他模块 &#xff08;类似于public 让别的模块可以…...

【Unity添加远程桌面】使用Unity账号远程控制N台电脑

设置地址&#xff1a; URDP终极远程桌面&#xff1b;功能强大&#xff0c;足以让开发人员、设计师、建筑师、工程师等等随时随地完成工作或协助别人https://cloud-desktop.u3dcloud.cn/在网站登录自己的Unity 账号上去 下载安装被控端安装 保持登录 3.代码添加当前主机 "…...

maven的settings.xml、pom.xml配置文件

1、配置文件 maven的配置文件主要有 settings.xml 和pom.xml 两个文件。 其中在maven安装目录下的settings.xml&#xff0c;如&#xff1a;D:\Program Files\apache-maven-3.6.3\conf\settings.xml 是全局配置文件 用户目录的.m2子目录下的settings.xml&#xff0c;如&#…...

使用MQTT.fx接入新版ONENet(24.4.8)

新版ONENet使用MQTT.fx 模拟接入 目录 新版ONENet使用MQTT.fx 模拟接入开始前的准备创建产品设备获取关键参数 计算签名使用MQTT.fx连接服务器数据流准备与上传数据流准备数据发送与接收 开始前的准备 创建产品 设备下载Token签名工具生成签名 创建产品设备 根据以下内容填写…...

Selenium 自动化遇见 shadow-root 元素怎么处理?

shadow-root是前端的特殊元素节点&#xff0c;其使用了一个叫做shadowDOM的技术做了封装&#xff0c;shadowDOM的作用可以理解为在默认的DOM结构中又嵌套了一个DOM结构&#xff08;和iframe有点类似&#xff0c;只不过iframe内嵌的是HTML&#xff09;&#xff0c;我们遇见shado…...

软件系统质量属性_2.面向架构评估的质量属性

为了评价一个软件系统&#xff0c;特别是软件系统的架构&#xff0c;需要进行架构评估。在架构评估过程中&#xff0c;评估人员所关注的是系统的质量属性。评估方法所普遍关注的质量属性有&#xff1a;性能、可靠性、可用性、安全性、可修改性、功能性、可变性、互操作性。 1.…...

疯了!用 AI 做销售,一人能干三人活,效率直接拉满!

一、AI 秒出全场景话术&#xff0c;告别绞尽脑汁从破冰开场、持续跟进&#xff0c;到异议处理、逼单成交&#xff0c;AI 都能根据产品、客户、场景一键生成专业话术。新人不用死记硬背&#xff0c;复制粘贴就能专业沟通&#xff1b;老人不用反复修改&#xff0c;节省大把时间&a…...

Android Studio 高版本兼容低版本项目配置

AndroidStudio开发工具高版本兼容低版本项目配置&#xff1a;1、 JDK 配置&#xff1a;gradle.properties 文件中指定jdk 版本&#xff1a;org.gradle.java.homeD\:\\ProgramFiles\\JDK\\jdk-11.0.262 配置Gradle 编译版本&#xff1a;3. 显示所有Gradle task 列表设置完成后&a…...

5步快速上手:百度网盘直链解析工具实现高速下载

5步快速上手&#xff1a;百度网盘直链解析工具实现高速下载 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的下载速度限制而烦恼吗&#xff1f;百度网盘直链解…...

GLM-4.1V-9B-Base实战案例:智能客服知识库图片问答模块集成方案

GLM-4.1V-9B-Base实战案例&#xff1a;智能客服知识库图片问答模块集成方案 1. 项目背景与需求分析 在智能客服系统中&#xff0c;用户经常需要上传产品图片、使用场景截图或问题示意图进行咨询。传统客服系统只能依赖人工处理这类图片咨询&#xff0c;效率低下且成本高昂。G…...

如何快速实现Tale博客系统国际化:多语言博客搭建完整指南

如何快速实现Tale博客系统国际化&#xff1a;多语言博客搭建完整指南 【免费下载链接】tale &#x1f984; Best beautiful java blog, worth a try 项目地址: https://gitcode.com/gh_mirrors/ta/tale Tale博客系统是一款优雅的Java博客程序&#xff0c;提供了强大的内…...

CVAT数据标注工具保姆级安装教程:从Docker部署到第一个标注任务

CVAT数据标注工具保姆级安装教程&#xff1a;从Docker部署到第一个标注任务 计算机视觉项目的成功往往始于高质量的数据标注。CVAT&#xff08;Computer Vision Annotation Tool&#xff09;作为英特尔开源的标注工具&#xff0c;凭借其丰富的标注类型支持和灵活的部署方式&am…...

Ostrakon-VL像素终端实战:为盲人顾客生成语音版货架导航

Ostrakon-VL像素终端实战&#xff1a;为盲人顾客生成语音版货架导航 1. 项目背景与价值 在零售场景中&#xff0c;视觉障碍顾客常常面临难以独立寻找商品的困境。传统解决方案依赖人工引导或专用盲道&#xff0c;成本高且灵活性不足。我们基于Ostrakon-VL-8B多模态大模型&…...

鸿蒙应用开发实战:手把手教你封装一个可复用的音乐播放器管理类(ArkTS版)

鸿蒙应用开发实战&#xff1a;构建高可复用的音乐播放器管理类&#xff08;ArkTS版&#xff09; 在鸿蒙应用开发中&#xff0c;音频播放功能是许多应用的核心需求。本文将深入探讨如何设计一个健壮、可复用的音乐播放器管理类&#xff0c;采用ArkTS语言实现&#xff0c;帮助开发…...

DeerFlow2.0 Docker + 本地 Ollama qwen3.5:9b 部署指南

DeerFlow2.0 Docker 本地 Ollama qwen3.5:9b 部署指南 实现 Token 自由&#xff01;&#xff01;&#xff01;本地模型免费 &#xff1a;&#xff09; 1. 前提条件 Windows 11 家庭版&#xff08;版本号 25H2&#xff09;Docker Desktop 已安装并运行WSL2 已安装并配置Olla…...

PP-DocLayoutV3实操手册:display_formula公式块检测准确率提升的3个微调技巧

PP-DocLayoutV3实操手册&#xff1a;display_formula公式块检测准确率提升的3个微调技巧 1. 引言&#xff1a;为什么公式检测这么重要&#xff1f; 在文档数字化处理过程中&#xff0c;数学公式的准确检测一直是个技术难点。传统的OCR系统往往把公式误判为普通文本或图像&…...