利用 Python 中的地理空间数据与 GeoPandas

推荐:使用 NSDT编辑器快速搭建3D应用场景

空间数据的真正潜力在于它能够连接数据点及其各自的位置,为高级分析创造无限的可能性。地理空间数据科学是数据科学中的一个新兴领域,旨在利用地理空间信息并通过空间算法和机器学习或深度学习等先进技术提取有价值的见解,以得出有关已发生的事件及其原因的有意义的结论。地理空间数据科学让我们深入了解事件发生的位置以及发生的原因。

GeoPandas是一个开源的Python软件包,专门用于处理信息。它通过提供对几何对象的空间操作来扩展pandas的数据类型数组 - 这有助于使用pandas的数据操作工具pandas在Python中进行空间分析。由于GeoPandas是基于Pandas构建的,它为熟悉Python语法的专业人士提供了一条快速熟悉GeoPandas语法的简单途径。

1. 安装GeoPandas

我们必须安装 GeoPandas 软件包才能使用它。但是,重要的是要注意GeoPandas依赖于必须安装的其他库才能毫无问题地使用它。这些依赖项是 shapelyFionapyproj 和 rtree。

有两种方法可以下载GeoPandas软件包。首先,您可以使用 conda 来安装 GeoPandas conda 软件包。建议使用此方法,因为它将提供GeoPandas的依赖项,而无需自行安装它们。您可以运行以下命令来安装 GeoPandas:

conda install geopandas

第二种方法是使用 pip,它是 Python 中的标准包安装程序。但是,使用此方法将需要安装其余提到的依赖项。

pip install geopandas

安装 GeoPandas 包后,您可以使用以下命令将其导入到 Python 代码中:

import geopandas as gpd

2. 读取和写入空间数据

GeoPandas用于读取空间数据并将其转换为GeoDataFrame。但是,请务必注意,有两种主要类型的空间数据:

  • 矢量数据:矢量数据使用以下术语点、线和面,使用离散几何描述地球位置的地理要素。
  • 栅格数据:栅格数据将世界编码为由格网表示的表面。此网格的每个像素都由连续值或分类类表示。

GeoPandas主要处理矢量数据。但是,它可以与其他 Python 包结合使用来处理栅格数据,例如栅格数据。 您可以使用强大的 geopandas.read_file() 函数来读取大多数基于矢量的空间数据。基于矢量的部分数据有两种主要数据类型:

  • 形状文件: Shapfile 是最常见的数据格式,被认为是行业级数据类型。它由三个压缩文件组成,通常作为zip文件提供:

这。shp 文件:此文件包含形状几何图形。

.dbf文件:此文件包含每个几何的属性,

.shx 文件:这是形状索引文件,可帮助将属性链接到形状。

  • GeoJSON: 这是 2016 年发布的地理空间数据的新文件格式。由于它仅包含一个文件,因此与 Shapefile 相比,它更容易使用。

在本文中,我们将使用 geopandas.read_file() 函数读取托管在 GitHub 中的 GeoJSON 文件,其中包含有关巴塞罗那市不同地区的地理空间数据。

让我们首先加载数据并使用下面的代码打印其中的前五列:

url = 'https://raw.githubusercontent.com/jcanalesluna/bcn-geodata/master/districtes/districtes.geojson'
districts = gpd.read_file(url)
districts.head()

利用 Python 中的地理空间数据与 GeoPandas



接下来,要将数据写入文件,我们可以默认使用 GeoDataFrame.to_file() 函数将数据写入 Shapefile,但您可以使用驱动程序参数将其转换为 GeoJSON

districts.to_file("districts.geojson", driver="GeoJSON")

3. 地理数据帧属性

由于GeoDataFrames是pandas DataFrame的子类,因此它继承了许多属性。但是,存在一些差异,主要区别在于它可以存储几何列(也称为GeoSeries)并执行空间操作。GeoDataFrame 中的几何列可以包含各种类型的矢量数据,包括点、线和面。但是,只有一列被视为活动几何,并且所有空间操作都将基于该列。

它的另一个关键特征是,每列都带有相关的CRS信息,告诉我们候选人在地球上的位置。此功能至关重要的原因是,如果您需要组合两个空间数据集,则需要确保它们以相同的 CRS 表示,否则将得到错误的结果。CRS信息存储在GeoPandas的crs属性中:

districts.crs

利用 Python 中的地理空间数据与 GeoPandas

现在我们已经设置了正确的投影 CRS,我们准备探索地理数据帧的属性。

4. 探索地理数据帧

GeoPandas 有四种有用的方法和属性可用于浏览数据。我们将探讨这四种方法:

  • 面积
  • 质心
  • 边界
  • 距离

4.1. 面积

面积属性返回几何图形的计算面积。在下面的示例中,我们将以 km2 为单位计算每个区的面积。

districts['area'] = districts.area / 1000000
districts['area']

 

4.2. 质心

第二个属性是回心,它返回几何图形的中心点。在下面的代码片段中,我们将添加一个新列并保存每个地区的质心:

districts['centroid']=districts.centroid
districts['centroid']

利用 Python 中的地理空间数据与 GeoPandas

4.3. 边界

第三种方法是边界属性,用于计算每个地区的面边界。下面的代码返回它并将其保存到单独的列中:

districts['boundary']=districts.boundary

利用 Python 中的地理空间数据与 GeoPandas

4.4. 距离

距离法计算从特定几何到特定位置的最小距离。因此,例如在下面的代码中,我们将计算从圣家堂到巴塞罗那每个地区的质心的距离。之后,我们将以 km2 为单位添加距离并将其保存在新列中。

from shapely.geometry import Pointsagrada_fam = Point(2.1743680500855005, 41.403656946781304)
sagrada_fam = gpd.GeoSeries(sagrada_fam, crs=4326)
sagrada_fam= sagrada_fam.to_crs(epsg=2062)
districts['sagrada_fam_dist'] = [float(sagrada_fam.distance(centroid)) / 1000 for centroid in districts.centroid]

 

5. 用GeoPandas绘制数据

绘制和可视化数据是更好地了解数据的关键步骤。用GeoPandas绘图与用Pandas绘图一样,非常简单且超级向前。这是通过基于 matplotlib python 包构建的 GeoDataFrame.plot() 函数完成的。

让我们从探索巴塞罗那开始,为其地区绘制一个基本地块:

ax= districts.plot(figsize=(10,6))

利用 Python 中的地理空间数据与 GeoPandas

这是一个非常基本的情节,并没有告诉我们很多信息。但是,我们可以通过为每个地区涂上不同的颜色来使其更具信息性。

ax= districts.plot(column='DISTRICTE', figsize=(10,6), edgecolor='black', legend=True)

利用 Python 中的地理空间数据与 GeoPandas

最后,我们可以通过添加各区的质心来向图中添加更多信息。

import contextily
import matplotlib.pyplot as pltax= districts.plot(column='DISTRICTE', figsize=(12,6), alpha=0.5, legend=True)
districts["centroid"].plot(ax=ax, color="green")
contextily.add_basemap(ax, crs=districts.crs.to_string())
plt.title('A Colored Map with the centroid of Barcelona')
plt.axis('off')
plt.show()

接下来,我们将探讨GeoPandas的一个非常重要的特征,即空间关系以及它们如何相互关联。

6. 定义空间关系

地理空间数据在空间中相互关联。GeoPandas使用熊猫和形状包装来建立空间关系。本节介绍常见操作。合并GeoPandas数据帧有两种主要方法,即属性和空间连接。在本节中,我们将探讨它们。

6.1.属性连接

属性联接允许您使用非几何变量联接两个 GeoPandas 数据帧,这使其类似于 Pandas 中的常规联接操作。连接操作是使用 pandas.merge() 方法完成的,如下例所示。在此示例中,我们将巴塞罗那人口数据联接到我们的地理空间数据,以向其添加更多信息。

import pandas as pd
pop =pd.read_csv('2022_padro_sexe.csv', usecols=['Nom_Districte','Nombre'])
pop = pd.DataFrame(pop.groupby('Nom_Districte')['Nombre'].sum()).reset_index()
pop.columns=['NOM','population_22']
districts = districts.merge(pop)
districts

利用 Python 中的地理空间数据与 GeoPandas

6.2. 空间连接

另一方面,空间联接基于空间关系合并数据帧。在下面的示例中,我们将确定具有自行车道的地区。 我们将首先加载数据,如下面的代码所示:

url = 'https://opendata-ajuntament.barcelona.cat/resources/bcn/CarrilsBici/CARRIL_BICI.geojson'
bike_lane = gpd.read_file(url)
bike_lane = bike_lane.loc[:,['ID','geometry']]
bike_lane.to_crs(epsg=2062, inplace=True)

利用 Python 中的地理空间数据与 GeoPandas

要在空间上连接两个数据帧,我们可以使用 sjoin() 函数。sjoin() 函数有四个主要参数:第一个是 GeoDataFrame,第二个参数是我们将添加到第一个 GeoDataFrame 的 GeoDataFrame,第三个参数是连接类型,最后一个参数是定义我们想要用来匹配两个 GeoDataFrame 的空间关系的谓词。最常见的部分关系是相交包含内部。在此示例中,我们将相参数。

lanes_districts = gpd.sjoin(districts, bike_lane, how='inner', predicate='intersects')
lanes_districts

在本文中,我向您介绍了使用开源GeoPandas库进行地理空间数据分析。我们从下载GeoPandas软件包开始,然后讨论了不同类型的地理空间数据以及如何加载它们。最后,我们将探讨基本操作,以掌握地理空间数据集。尽管在地理空间数据分析方面仍有探索,但此博客可作为您学习之旅的起点。

原文链接:利用 Python 中的地理空间数据与 GeoPandas (mvrlink.com)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法通关村第十九关:白银挑战-动态规划高频问题

白银挑战-动态规划高频问题 1. 最少硬币数 LeetCode 322 https://leetcode.cn/problems/coin-change/description/ 思路分析 尝试用回溯来实现 假如coins[2,5,7],amount27,求解过程中,每个位置都可以从[2,5,7]中选择,因此可以…

error:Failed building wheel for XXX

解决方案适用于大多数的pip 安装时出现的Failed building wheel for XXX 出现问题 按以往快速安装包的经验,第一反应当然是使用简单又快捷的terminal命令加上镜像,如下: pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple结…

关闭训练过程中的wandb

训练的过程中反复提醒wandb的账户,自动化执行的话,不是很方便,因此需要关闭这个wandb的功能 提醒的方式是这样的: 解决办法1、注释掉wandb相关的代码,并且添加关闭命令:wandb None 参考: 训…

儿童折叠式和非折叠式椅子和凳子加拿大认证标准要求介绍 ASTM F2613-21

儿童折叠式和非折叠式椅子和凳子是带有刚性框架的座椅家具,用于支撑儿童的身体,使其可以直立或倾斜的姿势坐立或休息。 此次合规要求更新适用于儿童折叠式和非折叠式椅子和凳子。这类产品可以折叠起来,以便运输或储存。儿童椅是带有刚性框架的…

05JVM_类加载阶段

一、类加载阶段 1.加载 1.1介绍 ①Java源代码经编译生成字节码文件,通过类加载阶段将字节码载入方法区。 ②类加载阶段内部是C的instanceKlass描述java类,重要的域field有: _java_mirror,java类镜像。例如对String来说,就是St…

OpenCV(四十):图像分割—漫水填充

1.漫水填充原理 图像分割中的漫水填充(Flood Fill)算法是一种基于区域增长的像素分类方法。其原理是在图像中从种子点开始,逐渐向周围扩展,并根据一定的条件决定是否将相邻的像素归属于同一区域。 漫水填充的基本原理如下&#x…

通过数据模板自动生成表格table

1.数据模板中的主要几个参数需要注意下(需要加样式可自由设置参数): title:填入表格的内容 col:1,占一列,row: 3,占3行 align:center居中对齐, pdL:14,padding-left:14, bold:true,加粗 width:100&#xff…

第十五届全国大学生数学竞赛报名快要截止了,你报上名了吗?

关于组织参加 第十五届全国大学生数学竞赛的通知 01 为了培养人才、服务教学、提高大学生学习数学的兴趣,培养学生分析问题、解决问题的能力,发现和选拔数学创新人才,为学生提供一个展示基础知识和思维能力的舞台,我校决定组织参…

02目标检测-传统检测方法

目录 一、目标学习的检测方法变迁及对比 二、 基于传统手工特征的检测算法的定义 三、传统主要手工特征与算法 Haar特征与 人脸检测算法 - Viola-Jones(了解) HOG特征与 SVM 算法(了解)(行人检测、opencv实现) SIFT特征与SIFT算法(了解) DPM&#…

[Java] String详解

愿一分耕耘,一份收获 文章目录 前言1. String基础概念2. String对象的比较2.1 与equals()的应用 3. 字符串的转化3.1 数字与字符串的转化3.2 大小写转换3.3 字符串与字符数组转换4. 字符串修改1.引入库2.读入数据 总结 前言 String这部分是面试中常常考到的题.string常量池,Sr…

java复习-线程的同步和死锁

线程的同步和死锁 同步问题引出 当多个线程访问同一资源时,会出现不同步问题。比如当票贩子A(线程A)已经通过了“判断”,但由于网络延迟,暂未修改票数的间隔时间内,票贩子B(线程B)…

带你打穿三层内网-红日靶场七

文章目录 前记环境配置web1信息搜集cve-2021-3129redis未授权|ssh密钥后渗透 Win7(PC1)永恒之蓝 web2docker逃逸 win7(PC2)|DC 前记 所用工具 msfcsvenomfrp蚁剑冰蝎laravel.pyfscan 注意事项 msf的永恒之蓝每次都需要两次才能…

Java 代理模式之静态代理与动态代理

1,代理模式 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 代理模式的目的: (1)通过引入代理对象的方式来间接访问目标对象,防…

geopandas 笔记:geometry上的操作汇总

如无特殊说明,数据主要来自:GeoDataFrame 应用:公园分布映射至subzone_UQI-LIUWJ的博客-CSDN博客 0 读入数据 subzone gpd.read_file(ura-mp19-subzone-no-sea-pl.geojson) subzone subzone_tstsubzone[0:5] subzone_tst subzone_tst.plot…

mingw 编译 curl ,Qt 工程使用

mingw 编译 curl 下载curl 源码 https://github.com/curl/curl 我使用8.3版 CMake-gui 配置 源码路径:D:/workspace/CPP/curl-8.3.0 生成路径: D:/workspace/CPP/curl-8.3.0/mingw-build 点击 Configure ,弹窗配置,选择 MinGW Makefiles 选择 Spec…

【Django】日志设置

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 LOGGING {version: 1,disable_existing_loggers: False,formatters: {verbose: {format: "[%(asctime)s] %(levelname)s [%(name)s:%(l…

探索AIGC人工智能(Midjourney篇)(四)

文章目录 Midjourney模特换装 Midjourney制作APP图标 Midjourney网页设计 Midjourney如何生成IP盲盒 Midjourney设计儿童节海报 Midjourney制作商用矢量插画 Midjourney设计徽章 Midjourney图片融合 Midjourney后缀参数 Midjourney模特换装 关键词生成模特照片 中国女性模特的…

Hadoop的第二个核心组件:MapReduce框架第一节

Hadoop的第二个核心组件:MapReduce框架第一节 一、基本概念二、MapReduce的分布式计算核心思想三、MapReduce程序在运行过程中三个核心进程四、如何编写MapReduce计算程序:(编程步骤)1、编写MapTask的计算逻辑2、编写ReduceTask的…

2023年数维杯数学建模A题河流-地下水系统水体污染研究求解全过程文档及程序

2023年数维杯数学建模 A题 河流-地下水系统水体污染研究 原题再现: 河流对地下水有着直接地影响,当河流补给地下水时,河流一旦被污染,容易导致地下水以及紧依河流分布的傍河水源地将受到不同程度的污染,这将严重影响…

SQL11 高级操作符练习(1)

描述 题目:现在运营想要找到男性且GPA在3.5以上(不包括3.5)的用户进行调研,请你取出相关数据。 示例:user_profile iddevice_idgenderageuniversitygpa12138male21北京大学3.423214male复旦大学4.036543female20北京大学3.242315female23浙…