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

news2024/12/23 20:28:58
推荐:使用 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 Point

sagrada_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 plt

ax= 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.coloradmin.cn/o/1006628.html

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

相关文章

Android:使用命令行发现keytool不是内部命令解决办法

一、前言:最近在搞引入高德地图的SDK,发现需要给app签名打包。记录一下。 二、当我在命令行中输入keytool的时候说keytool不是内部命令 解决方案: 找到系统属性--------高级----------点击环境变量 双击点开 找到java\jre1.8.0_202\bin新建…

GLTF在线编辑器

GLTF在线编辑器提供了一个内置的模型查看器,可以加载和预览 glTF/glb 文件。用户可以在不用安装任何插件的情况下直接在浏览中快速查看和编辑器3D模型。 它的功能特点如下: 1、打开GLTF模型 用户可以在GLTF编辑器中拖入GLB/GLTF模型或者选择打开本地GL…

Bootstarp4 设计网页轮播组件

很多网站都有广告轮播功能,可使用bootstrap4中的carousel组件非常简单的实现。 目录 下载bootstrap4 轮播功能实现 简单实现轮播组件 增加标识图标 增加标题和说明 切换淡入淡出 设置数据间隔 总结 下载bootstrap4 下载 Bootstrap Bootstrap v4 中文文档 …

Android13 下拉菜单栏中添加快捷截图按钮

Android 13 原生系统下拉状态栏中是没有快捷截图按钮,现在需要添加快捷截图功能。 添加快捷截图功能后的效果图: 涉及修改的文件如下: modified: vendor/mediatek/proprietary/packages/apps/SystemUI/res/values/config.xml modified: vendor/mediatek/proprietary/…

软件测试的流程有哪些?

一、需求调研 1. 委托方提供资料 A. 填写测试委托申请表 B. 操作手册 C. 开发需求规格说明书 D. 开发合同及招标文件等 2. 双方技术沟通确定测试具体内容,如功能性测试、性能效率测试、信息安全性测试、兼容性测试、可靠性测试等。 3. 我方给出测试方案及报价…

SpringMVC学习|Servlet回顾、理解SpringMVC小demo、SpringMVC原理

Servlet回顾 创一个空的maven父工程,导入相关依赖,测试的、spring的、servlet的、jsp以及jstl标签的。 创建一个空的maven子项目,并添加web支持 为了保险起见,在子项目中添加servlet和jsp的依赖 编写一个Servlet类,实…

【Python】从入门到上头—常用内置模块基础应用(13)

文章目录 datetimebase64hashlibhmacurllibXMLHTMLParserrandom小结 datetime datetime是Python处理日期和时间的标准库。 获取当前日期时间 from datetime import datetime now datetime.now() # 获取当前datetime print(now) #2023-09-13 10:28:48.621343 print(type(no…

JSP ssm 网上求职管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP ssm 网上求职管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采…

3900页手册415集视频426G资料迅为RK3568开发板

资料优势 专为3568编写|迅为原创|拒绝网络拼凑 20个手册2800页手册进行结构分层适用于学习与开发 为了方便大家清晰快速的学习,迅为iTOP-3568开发板手册资料全面升级,对手册内容进行了结构分层,共计20个文档,超2800页的资料专为…

sql注入之盲注总结

死在山野的风里,活在自由的梦里 sql注入之盲注总结 布尔 - 逻辑判断时间 - 延时判断报错 - 报错回显(强制性报错 )以DWVA靶场为例 盲注就是在注入的过程中,获取的数据不能显示到前端页面,此时,我们需要利用…

2023年武汉初级、中级、副高工程师职称评审条件是什么?甘建二告诉你

武汉中级职称评审通知已经出来了,武汉市中级、副高申报时间是8月31--9月18号,那么评这些职称需要满足什么条件呢?今天甘建二给大家分享一下评职称学历年限、专业等是怎么计算的,点赞收藏慢慢看。 一、武汉初级职称评审条件&#x…

【MySQL进阶】SQL性能分析

一、SQL性能分析 1.SQL执行频率 MySQL 客户端连接成功后,通过 show [session|global] status 命令可以提供服务器状态信 息。通过如下指令,可以查看当前数据库的 INSERT 、 UPDATE 、 DELETE 、 SELECT 的访问频次: -- session 是查看当…

jvm深入研究文档--整体概念

阿丹: 精通JVM对于一个java工程师非常重要,要是深入了解了jvm就可以有效的面对下面的问题 程序调优:JVM的配置和调优对于程序的运行有着至关重要的影响。不同的业务场景需要不同的JVM配置,比如设置不同的垃圾收集器、调整新生代和…

软考 - 计算机组成与体系笔记

数据的表示 进制转化 二进制转十进制(十进制以D表示) 从右往左,用二进制位上的数字乘以2的n次幂的和(n从0开始1累加) 十进制转二进制(二进制以B表示) 十进制数不断除以2直至到0,得…

电子智能充气泵pcba/芯片方案

智能充气泵是一种常见的气体压缩设备,它可以将空气或其他气体压缩成高压气体,用于充气、输送、压缩等工业和生活领域。智能充气泵的原理是利用机械或电动力量将气体压缩,使其体积减小,压力增大,从而达到充气的目的。电…

【echarts】如何将iconfont转换成echart所需的path路径 echarts折线图、柱状图如何设置自定义svg图标

步骤 下载iconfont图标到本地,用浏览器打开,右键查看源代码,或者用开发IDE软件打开,找到path d...,这个就是我们要传递给echart的icon的值。 代码示例: legend: {data: data?.map((item) > item.comp…

Fiddler抓http数据

目录 参考博客 一、Fiddler配置二、分析Http请求1. Http消息结构简介1.1 Request请求消息1.2 Response响应消息 2. 分析Get接口2.1 请求示例2.2 查看Get请求2.3 查看Get响应 3 分析Post接口 参考博客 一、Fiddler配置 首先需要对Fiddler抓取Https请求进行相关配置&#xff1a…

【九章斩题录】C/C++:判定字符是否唯一

精品题解 🔥 《九章斩题录》 👈 猛戳订阅 面试题 01.01. 判定字符是否唯一 ✅ 模板:C语言 class Solution { public:bool isUnique(string astr) {} }; 💭 思考:《程序员面试金典》里的题,这题和剑指Off…

typescript错误代码 error TS2451: 无法重新声明块范围变量“age”。ts(2451)

今天心血来潮写ts教程的时候发现一个问题,如下 短短的两行代码,竟然都报错,无法重新声明块范围变量age\。明明与其他文件没有相互依赖,却会提示 [ts] 无法重新声明块范围变量“age”。。且该文件目录夹下,也没有其他文件。为什么会有这个报错呢&#xff…

NZ系列工具NZ03:利用右键进行筛选操作

【分享成果,随喜正能量】生活就是这样,别人看的是结果,而自己撑的却是整个过程。曾经的微笑,是一种心情,现在的微笑,只不过是一种表情。如果情绪不能用言语说出来,那就去吹吹风吧。。 我的教程…