【GIS】GeoPandas:Python矢量数据处理

GeoPandas 是 Python 中处理矢量地理数据的强大工具。它结合了 Pandas 的数据处理能力和 Shapely 几何对象的处理功能,使得空间数据的处理和分析变得简单而高效。本文将详细介绍如何使用 GeoPandas 创建数据、操作几何对象、进行空间查询以及可视化展示,帮助您快速上手并掌握地理数据处理。

数据结构

以下是对 PointLineStringPolygonDataFrameGeoDataFrame 的简单介绍,包括它们的内置方法和常见用法。

Point

Point 表示二维空间中的一个坐标点。

from shapely.geometry import Point# 创建一个点对象
point = Point(1, 2)

常用方法:

  • x: 获取点的 x 坐标。
  • y: 获取点的 y 坐标。
  • distance(other): 计算当前点到另一个点的距离。
  • buffer(radius): 创建一个以当前点为中心的缓冲区。

LineString

LineString 表示由一系列点连接成的线段。

from shapely.geometry import LineString# 创建一个线对象
line = LineString([(0, 0), (1, 2), (2, 1)])

常用方法:

  • length: 获取线的长度。
  • coords: 获取线的坐标点列表。
  • intersects(other): 判断当前线是否与其他几何对象相交。
  • buffer(radius): 创建线的缓冲区。

Polygon

Polygon 表示由多个点围成的多边形。

from shapely.geometry import Polygon# 创建一个多边形对象
polygon = Polygon([(0, 0), (4, 0), (4, 3), (0, 3)])

常用方法:

  • area: 获取多边形的面积。
  • perimeter: 获取多边形的周长。
  • contains(other): 判断多边形是否包含另一个几何对象。
  • intersection(other): 计算与另一个几何对象的交集。

DataFrame

DataFrame 是 Pandas 中的核心数据结构,用于存储表格数据。

import pandas as pd# 创建一个简单的 DataFrame
data = {'Name': ['A', 'B'], 'Value': [10, 20]}
df = pd.DataFrame(data)

常用方法:

  • head(n): 返回前 n 行数据。
  • describe(): 生成描述性统计信息。
  • groupby(by): 按指定列进行分组。
  • filter(): 根据条件筛选数据。

GeoDataFrame

GeoDataFrame 是 GeoPandas 中的扩展数据结构,专门用于存储地理数据。

import geopandas as gpd# 创建 GeoDataFrame
gdf = gpd.GeoDataFrame({'geometry': [point, line, polygon]})

常用方法:

  • set_crs(crs): 设置坐标参考系统(CRS)。
  • to_crs(crs): 转换坐标参考系统。
  • sjoin(other, op): 进行空间连接。
  • plot(): 可视化 GeoDataFrame。

地理数据操作

创建新数据

您可以通过手动创建几何对象和相关属性来新建一个 GeoDataFrame。以下是一个简单的示例:

import geopandas as gpd
from shapely.geometry import Point, LineString, Polygon# 创建几何对象
point = Point(1, 2)  # 一个点
line = LineString([(0, 0), (1, 2), (2, 1)])  # 一条线
polygon = Polygon([(0, 0), (2, 0), (2, 2), (0, 2)])  # 一个多边形# 创建 GeoDataFrame
gdf = gpd.GeoDataFrame({'geometry': [point, line, polygon]})# 打印 GeoDataFrame
print(gdf)

从地理数据导入

您可以从文件中读取地理数据,例如 Shapefile 或 GeoJSON 等格式。

# 导入 GeoDataFrame
gdf = gpd.read_file("path/to/your/file.shp")
print(gdf.head())

从表格导入

如果您的数据存储在 Excel 或 CSV 文件中,可以轻松导入并转换为 GeoDataFrame

import pandas as pd# 从 CSV 文件读取数据
df = pd.read_excel("path/to/your/file.csv")# 创建 GeoDataFrame,指定经纬度列
point = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df.lng, df.lat))
point.crs = 'EPSG:4326'  # 设置坐标系

导出数据

处理完成后,您可以将 GeoDataFrame 导出为多种地理数据格式。

# 导出 GeoDataFrame
gdf.to_file("path/to/save/file.geojson", driver='GeoJSON')

数据查看

查看数据

使用描述性统计和可视化方法对数据进行探索。

# 查看数据的前几行
print(gdf.head())# 查看数据的列名
print(gdf.columns)# 查看数据的几何类型
print(gdf.geom_type)

绘制基本图形

您可以使用 GeoPandas 内置的绘图功能来可视化数据。

import matplotlib.pyplot as plt# 绘制 GeoDataFrame
gdf.plot()
plt.title("Basic GeoDataFrame Plot")
plt.show()

自定义可视化

您可以根据需要自定义绘图样式,以增强可视化效果。

# 自定义绘图样式
gdf.plot(color='lightblue', edgecolor='black')
plt.title("Custom GeoDataFrame Plot")
plt.show()

空间分析

缓冲区

您可以生成几何对象的缓冲区,以创建一定范围的区域。

# 生成缓冲区
gdf['buffer'] = gdf.geometry.buffer(0.5)# 可视化缓冲区
gdf.set_geometry('buffer').plot()
plt.title("Buffer Zones")
plt.show()

几何操作

创建两个示例 GeoDataFrame

# 创建示例多边形
poly1 = Polygon([(0, 0), (2, 0), (2, 2), (0, 2)])  # 多边形 1
poly2 = Polygon([(1, 1), (3, 1), (3, 3), (1, 3)])  # 多边形 2# 创建 GeoDataFrame
gdf1 = gpd.GeoDataFrame({'geometry': [poly1]})
gdf2 = gpd.GeoDataFrame({'geometry': [poly2]})

使用 gpd.overlay 函数进行不同的几何操作,只需更改 how 参数:

  • 交集(Intersection):

    result = gpd.overlay(gdf1, gdf2, how='intersection')
    
  • 并集(Union):

    result = gpd.overlay(gdf1, gdf2, how='union')
    
  • 异或(Symmetrical Difference):

    result = gpd.overlay(gdf1, gdf2, how='symmetric_difference')
    
  • 剪去(Difference):

    result = gpd.overlay(gdf1, gdf2, how='difference')
    

可视化结果的方法相同,可以使用以下代码展示结果:

result.plot()
plt.title("Result Title")  # 根据具体操作修改标题
plt.show()

融合

您可以将多个几何对象融合为一个复合几何对象,这在处理相邻区域时特别有用。

# 创建多个几何对象
polygons = [Polygon([(0, 0), (1, 0), (1, 1), (0, 1)]),Polygon([(1, 0), (2, 0), (2, 1), (1, 1)])]# 创建 GeoDataFrame
gdf_polygons = gpd.GeoDataFrame({'geometry': polygons})# 融合几何对象
merged = gdf_polygons.unary_union# 可视化融合结果
gpd.GeoSeries([merged]).plot()
plt.title("Merged Geometry")
plt.show()

空间查询

除了通过 gpd.overlay 进行的几何操作,GeoPandas 还支持多种空间查询操作,包括:

  • 相交查询(Intersects):
    检查哪些几何对象相交。

    intersects = gdf1[gdf1.geometry.intersects(gdf2.geometry.iloc[0])]
    
  • 包含查询(Contains):
    检查哪些几何对象包含其他几何对象。

    contains = gdf1[gdf1.geometry.contains(gdf2.geometry.iloc[0])]
    
  • 相离查询(Does Not Intersect):
    检查哪些几何对象不相交。

    disjoint = gdf1[gdf1.geometry.disjoint(gdf2.geometry.iloc[0])]
    
  • 重叠查询(Overlaps):
    检查哪些几何对象部分重叠。

    overlaps = gdf1[gdf1.geometry.overlaps(gdf2.geometry.iloc[0])]
    
  • 触碰查询(Touches):
    检查哪些几何对象相接触但不重叠。

    touches = gdf1[gdf1.geometry.touches(gdf2.geometry.iloc[0])]
    

对于每种查询,您可以使用类似的可视化方法:

intersects.plot(color='blue')
plt.title("Intersecting Geometries")
plt.show()

空间连接

在使用 sjoin 进行空间连接后,返回的 GeoDataFrame 会包含两个 GeoDataFrame 的所有列,同时会增加一个用于表示空间关系的列(例如,index_right,指向右侧 GeoDataFrame 的索引)。以下是 sjoin 的基本使用示例和结果分析。

import geopandas as gpd
from shapely.geometry import Point, Polygon# 创建第一个 GeoDataFrame
gdf1 = gpd.GeoDataFrame({'name': ['A', 'B', 'C'],'geometry': [Point(1, 1), Point(2, 2), Point(3, 3)]
})# 创建第二个 GeoDataFrame
gdf2 = gpd.GeoDataFrame({'name': ['Zone 1', 'Zone 2'],'geometry': [Polygon([(0, 0), (2, 0), (2, 2), (0, 2)]), Polygon([(2, 2), (4, 2), (4, 4), (2, 4)])]
})# 进行空间连接
joined = gpd.sjoin(gdf1, gdf2, how='inner', op='intersects')# 打印结果
print(joined)

在上述代码中,sjoin 会返回一个新的 GeoDataFrame,结果可能类似于:

  name_left     geometry_left name_right                  geometry_right
0        A      POINT (1 1)     Zone 1  POLYGON ((0 0, 2 0, 2 2, 0 2))
1        B      POINT (2 2)     Zone 1  POLYGON ((0 0, 2 0, 2 2, 0 2))
2        C      POINT (3 3)     Zone 2  POLYGON ((2 2, 4 2, 4 4, 2 4))
  • 列名: name_leftname_right 分别表示左侧和右侧 GeoDataFrame 的列。
  • 几何对象: geometry_leftgeometry_right 分别表示两个 GeoDataFrame 中的几何对象。
  • 索引: index_right 列指向与左侧对象相交的右侧 GeoDataFrame 的索引。

坐标系操作

GeoPandas 提供了方便的坐标系操作功能,帮助您轻松管理和转换不同的地理数据坐标系。

定义与转换坐标系

您可以为 GeoDataFrame 定义坐标参考系统 (CRS),并进行转换。

# 定义 CRS
gdf.crs = "EPSG:4326"  # WGS84# 转换为另一 CRS
gdf_transformed = gdf.to_crs("EPSG:3857")  # Web Mercator
print(gdf_transformed.head())

处理坐标系问题

确保在进行空间操作前,所有 GeoDataFrame 使用相同的 CRS,以避免潜在问题。

# 检查 CRS
print(gdf.crs)
print(gdf_transformed.crs)

常用坐标系

在 GeoPandas 中,常用坐标系通过 EPSG(欧洲规范化地理信息系统)代码来表示。以下是一些常用坐标系及其在 GeoPandas 中的表示方式:

坐标系名称EPSG 代码描述
WGS 844326全球通用坐标系,使用经纬度表示。
Web Mercator3857常用于网络地图(如 Google Maps),单位为米。
CGCS 20004490中国地理坐标系统。
UTM Zone 33N32633通用横轴墨卡托投影,适用于小范围区域(例如欧洲)。
国家测绘局坐标系4547用于中国地理数据,特别是在一些国家级项目中。
BD-09N/A百度地图使用的坐标系,无法直接用 EPSG 表示。

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

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

相关文章

vulnhub靶场Matrix-win全流程

Matrix-Breakout 2 Morpheus(win操作) 如果靶场出现发送数据包无响应的情况,请重启服务器 靶机下载地址: https://download.vulnhub.com/matrix-breakout/c-2-morpheus.ova攻击机:win11(192.168.5.1) 信息收集 本…

React学习笔记(四)——React 组件生命周期

目录 1. 生命周期-概览 2. 生命周期-挂载阶段 3. 生命周期-更新阶段 4. 生命周期-卸载阶段 5. setState扩展-发现问题 6. setState扩展-更多用法 7. setState扩展-异步 1. 生命周期-概览 了解react类组件生命周期整体情况 大致步骤: 什么是生命周期React类组…

C盘空间不足--WizTree(管理空间)

WizTree:高效的磁盘空间分析工具 在日常使用电脑的过程中,磁盘空间的管理常常成为一个棘手的问题。随着文件的不断增加,我们的硬盘空间逐渐被占满,而这些文件中有很多其实并不重要。为了帮助用户更好地管理磁盘空间,Wi…

已存在的Python项目使用依赖管理工具UV

1. 文档 uv文档 2. 如何转换 初始化 uv initrequirements.txt转换成pyproject.toml uv add $(cat requirements.txt)删除requirements.txt 如果更新pyproject.toml之后,使用命令 uv sync替换项目环境 如果有库没有加入依赖,自己手动加一下&am…

美化网页,特效

当阅读博客园的文章时,经常看到精美的特效 博客园美化 - 凌云 - 博客园 (cnblogs.com) 简直不要太好看 自己写了一个前后端分离的网站后,想着应用这些特效,毕竟别人看到特效后逼格还是挺高的 于是,我F12把代码拿了下来 【手动狗…

普通人想自学AI产品经理,我劝你谨慎!

随着大模型技术的快速发展,市面上涌现出了大量的大模型产品岗位,那么想要进入AI行业的产品经理同学,需要提前做好哪些准备工作呢?这篇文章里,作者总结了入行AI的必备知识,包括市场调研、产品底层逻辑等内容…

逆概率加权(R和Python案例)

逆概率加权(Inverse Probability Weighting, IPW)是一种统计技术,用于观察性研究中调整混杂变量的影响,以便更准确地估计因果关系。这种方法特别有用于在无法进行随机化实验的情况下,通过给予不同个体不同的权重&#…

2024年9月最新web3开发人员薪资情况(包括不同语言、各个国家)

2024年9月最新web3非开发人员薪资情况(包括不同语言、各个国家) 开发人员的薪水是多少? Web3 开发人员的平均年薪为 14 万至 20 万美元。 量化开发人员每年可赚 20 万至 30 万美元 高级开发人员年薪 16 万至 25.7 万美元 北美开发商年薪 …

了解云计算工作负载保护的重要性,确保数据和应用程序安全

云计算de小白 云计算技术的快速发展使数据和应用程序安全成为一种关键需求,而不仅仅是一种偏好。随着越来越多的客户公司将业务迁移到云端,保护他们的云工作负载(指所有部署的应用程序和服务)变得越来越重要。云工作负载保护&…

可视掏耳勺鸡肋吗?高清可视掏耳勺牌子推荐!

很多人习惯在洗漱完顺手拿一根棉签掏耳朵,但是棉签的表面直径大且粗糙,不易将耳朵深处的耳垢挖出,耳垢堆积在耳道深处长时间不清理会导致堵塞耳道,引起耳鸣甚至感染。而可视掏耳勺作为一种新型的挖耳工具,它的安全性也…

【java常见面试题】

IO 按照流的流向分类:输入流和输出流 按照操作单元分类:可以分为字节流和字符流 按照流的角色划分:节点流和处理流 所有输入流的基类:InputStream/Reader 字节流/字符流 所有输出流的基类:OutputStream/Reader 字…

用友或畅捷通设置外网访问,使用的是神卓互联内网穿透

本文将详细介绍如何使用神卓互联内网穿透技术搭建单位用友软件的访问环境,以实现远程办公和管理的高效便捷。 目录 一、神卓互联内网穿透技术 二、准备工作 1. 注册神卓互联账号 2. 配置用友软件服务器 三、配置神卓互联内网穿透 1. 安装并启动神卓互联客户端…

吉客云与金蝶云星空对接集成分页查询货品信息连通[标准]

吉客云与金蝶云星空对接集成分页查询货品信息连通[标准][付款单新增]-v1(付款单) 对接系统:吉客云 “吉客云”是一站式企业数字化解决方案系统,可实现业务、财务、办公、人事等一体化管理。相对于传统多套软件系统的集成方案,“吉客云”具有业…

【程序员提效】AI助力程序员提效:如何让AI编写代码+调试复杂代码教程

在编程的旅途中,程序员们常常面临各种挑战,尤其是在编写和维护代码时,难题层出不穷。🤔 尽管传统搜索引擎提供了海量信息,但往往让我们在无尽的例子和复杂分析中迷失,难以找到真正适合自己的解决方案。正因…

韦唯出席平遥国际电影展开幕式 中英文歌曲连唱尽显国际范

9月24日,第八届平遥国际电影展在在山西省晋中市平遥古城正式开幕。韦唯作为特邀演出嘉宾,参加开幕式晚会并演唱《黄土地》主题曲《女儿歌》及自己的英文单曲《All there is》两首歌曲。 韦唯刚结束“湾区升明月”2024大湾区电影音乐晚会,就马…

Cloudera 安装不再难:下载安装全流程指南

引言:之前文章《深度挖掘|Cloudera安装不再难!基础环境搭建全解析》中,我们深入探讨了如何在企业环境中精心准备系统环境,为大数据平台Cloudera 搭建奠定坚实基础。今天,我们将正式进行Cloudera Manager的下…

出国留学:如何选对专业,匹配你的职业目标?

在全球化日益加深的今天,出国留学已成为许多青年学子拓宽视野、提升竞争力的重要途径。然而,面对琳琅满目的专业选择,如何找到既符合个人兴趣又能助力未来职业发展的专业,成为了每位准留学生必须面对的挑战。本文将为您详细解析&a…

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建 Jupyter Notebook

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建 Jupyter Notebook Docker 部署 Jupyter Notebook 是一个方便且快速的方式,可以帮助你搭建一个用于数据分析、机器学习和科学计算的环境 华为云端口放行 服务器放行对应端口9955 Docker安装并配置镜…

unraid使用docker安装redis并创建密码

unraid使用docker安装redis并创建密码 一、redis简单介绍 redis基于K-V思路,数据存储在内存中,速度快,高效。 使用时会结合其他数据库如mysql。 二、redis安装 应用市场搜索redis,找下载量最高的一个即可,其中参数只…

大数据Hive组件安装

组件版本 组件版本Hadoop3.3.0JDK1.8.0_241Mysql5.7.25Hive3.1.2 Hadoop集群服务分布 Node1Node2Node3NameNode DataNode DataNodeDataNode NodeManager NodeManagerResourceManagerSecondaryNameNode 安装前请确定Hadoop集群服务全部启动,不然后续测试时会报…