GeoPandas实操:读取数据

GeoPandas 支持读取和写入多种地理空间数据格式,如 ESRI Shapefile、GeoJSON、GeoPackage 等,以及与其他 GIS 软件兼容的格式。

1. 读取数据

1.1. 读取ESRI Shapefile数据

ESRI Shapefile(简称 Shapefile 或 .shp 文件)是一种常见的空间矢量数据存储格式,用于存储地理空间数据。Shapefile 文件通常由多个文件组成,包括 .shp.shx.dbf 等格式,它们一起描述了矢量空间数据的几何形状、属性信息和空间索引。

以下是 Shapefile 文件的主要组成部分:

  1. .shp 文件

    • .shp 文件存储矢量几何形状信息,如点、线、多边形的坐标和形状数据。
  2. .shx 文件

    • .shx 文件包含 Shapefile 的空间索引,用于加快在 .shp 文件中的记录检索和访问。
  3. .dbf 文件

    • .dbf 文件是一个 dBASE 格式的表格文件,存储了与空间几何形状相关联的属性数据。每个几何对象都可以有与之相关联的属性信息。
  4. 其他附加文件

    • Shapefile 文件可能还包括其他附加文件,如 .prj 文件(存储投影信息)、.sbn.sbx 文件(用于空间索引加速)等。

Shapefile 是一种广泛使用的空间矢量数据格式,常用于存储地理信息系统(GIS)中的地理空间数据,例如点、线、多边形等空间要素数据。它被许多 GIS 软件(如 ArcGIS、QGIS 等)所支持和使用。

虽然 Shapefile 是一个通用的标准格式,但它也有一些限制,比如不支持存储拓扑关系和只能存储一个几何类型等。随着时间的推移,一些现代的地理空间数据格式(如 GeoJSON、Geopackage 等)正在逐渐取代 Shapefile,以满足更复杂的地理空间数据需求。

1.1.1 代码实现

import geopandas as gpd
import matplotlib.pyplot as plt

# 读取 Shapefile 文件
gdf = gpd.read_file('D:\\BaiduNetdiskDownload\\湖北省数据\\矢量数据\\第二种路网\\湖北省_road.shp')

# 根据字段值 'layer' 进行筛选
# 假设 'layer' 的值为 0 和 1 时分别使用红色和蓝色线渲染,线宽为2
gdf_0 = gdf[gdf['layer'] == 0]
gdf_1 = gdf[gdf['layer'] == 1]

# 创建绘图对象并设置输出图片大小
fig, ax = plt.subplots()

# 绘制不同图层并设置不同颜色和线宽
gdf_0.plot(ax=ax, color='red', linewidth=2)
gdf_1.plot(ax=ax, color='blue', linewidth=2)

# 设置图片大小为宽10英寸、高8英寸
plt.figure(figsize=(10, 8))  

# 显示地图
plt.show()

# 保存地图图片到指定位置(例如保存为 PNG 格式的图片)
plt.savefig(r'C:\Users\HTHT\Desktop\1\map_image.png', bbox_inches='tight') 

在这里插入图片描述

1.2. 读取OGC标准数据:WKT、GeoJson

在 OGC(Open Geospatial Consortium)标准中,WKT(Well-Known Text)和 GeoJSON 是两种常用的地理空间数据格式,用于描述和表示地理空间几何对象。

  1. WKT(Well-Known Text)

    • 定义:WKT 是一种用于表示地理空间几何对象的文本表示形式。它是一种简单、人类可读的格式,用于描述点、线、多边形等地理空间数据的几何形状。
    • 特点:WKT 使用文本字符串来描述几何对象,通过一系列坐标点或者其他几何构造描述空间几何形状。例如,一个点可以表示为 POINT(30 10),线可以表示为 LINESTRING(30 10, 10 30, 40 40),多边形可以表示为 POLYGON((35 10, 45 45, 15 40, 10 20, 35 10))
    • 用途:WKT 通常用于在各种地理信息系统和数据库之间进行地理空间数据的交换和传输。
  2. GeoJSON

    • 定义:GeoJSON 是一种基于 JSON(JavaScript Object Notation)的地理空间数据格式。它提供了一种简洁的方式来表示地理空间数据,包括点、线、多边形、集合等地理特征。
    • 特点:GeoJSON 使用 JSON 格式来描述地理空间对象,可以包含几何形状(坐标点集合)和其他属性信息。例如,一个点可以表示为 {"type": "Point", "coordinates": [30, 10]},线可以表示为 {"type": "LineString", "coordinates": [[30, 10], [10, 30], [40, 40]]},多边形可以表示为 {"type": "Polygon", "coordinates": [[[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]]]}
    • 用途:GeoJSON 是一种常见的用于在 Web 环境中交换和呈现地理空间数据的格式,被广泛用于 Web 地图服务和地理信息可视化中。

1.2.1. 读取WKT并绘制

import geopandas as gpd
import matplotlib.pyplot as plt
from shapely import wkt

# Example WKT strings
wkt_strings = [
    'POINT (0 0)',
    'LINESTRING (1 1, 2 2, 2 3)',
    'POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'
]

# Construct a GeometryArray using from_wkt
geometry_array = gpd.GeoSeries.from_wkt(wkt_strings)

# Display the GeometryArray
print(geometry_array)

# 创建一个空的 GeoDataFrame,将 GeometryArray 赋值给 'geometry' 列
data = gpd.GeoDataFrame(geometry=geometry_array)

# 绘制地理空间数据
data.plot()

# 显示图形
plt.show()

在这里插入图片描述

1.2.2. 读取GeoJson数据并绘制

import geopandas as gpd
import matplotlib.pyplot as plt

# 示例的 GeoJSON 字符串
geojson_string = '{"type":"Polygon","crs":{"type":"name","properties":{"name":"EPSG:4490"}},"coordinates":[[[115.816729382,29.917458261],[115.816729382,29.92010116],[115.817519894,29.92010116],[115.817519894,29.917458261],[115.816729382,29.917458261]]]}'

# 直接从字符串读取 GeoDataFrame
data = gpd.read_file(geojson_string, driver='GeoJSON')

# 提取几何列为 GeoSeries
geometry_series = data.geometry

# 显示数据
print(geometry_series)


# 创建一个空的 GeoDataFrame,将 GeometryArray 赋值给 'geometry' 列
data = gpd.GeoDataFrame(geometry=geometry_series)

# 绘制地理空间数据
data.plot()

# 显示图形
plt.show()

在这里插入图片描述

1.3. 读取ArcGIS GDB数据

ArcGIS Geodatabase(GDB)是 Esri 公司开发的一种专门用于管理和存储地理空间数据的数据库格式。它是一种包含多种不同类型数据集的文件集合,允许用户在同一个数据库中存储多种不同的地理空间数据和相关信息。

ArcGIS Geodatabase 主要有两种类型:

  1. 文件型地理数据库 (File Geodatabase)

    • 文件型地理数据库是以文件夹的形式存储在磁盘上的地理数据库。它是 Esri 开发的一种用于存储、管理和共享地理空间数据的文件系统。文件型地理数据库通常包括 .gdb 扩展名的文件夹,里面包含了多个文件,用于存储不同的数据集和图层信息。这种格式的数据库对于小型到中型项目非常适用,并且具有优秀的性能和可扩展性。
  2. 企业型地理数据库 (Enterprise Geodatabase)

    • 企业型地理数据库是通过 ArcSDE(Spatial Database Engine)技术与关系数据库(如 PostgreSQL、Oracle、SQL Server 等)结合而成的地理数据库。它允许多用户同时访问、编辑和管理大规模的地理空间数据,并提供了更高级别的安全性、可扩展性和管理功能。企业型地理数据库通常用于大型组织或需要处理大量地理空间数据的项目中。

ArcGIS Geodatabase 提供了对空间数据的高级管理和处理功能,例如支持拓扑关系、数据集合的完整性检查、版本控制、地理空间数据的数据字典管理等。这些功能使得 ArcGIS Geodatabase 成为了许多地理信息系统(GIS)和地理空间数据管理应用中的重要组成部分。

1.3.1 代码实现

import geopandas as gpd
import fiona

# GDB 文件路径
gdb_path = r'C:\Users\HTHT\Desktop\1\4\1.gdb'

# 列出 GDB 中的图层
layers = fiona.listlayers(gdb_path)
print("Available layers:", layers)

# 选择要加载的图层
selected_layer = layers[0]  # 选择第一个图层

# 读取选定的图层数据到 GeoPandas DataFrame
data = gpd.read_file(gdb_path, layer=selected_layer)

# 显示数据的前几行
print(data.head())

# 绘制地理空间数据
data.plot()

# 显示图形
plt.show()

在这里插入图片描述

1.4. 读取PostGIS数据

开始读取之前,需要安装

pip install SQLAlchemy
pip install psycopg2

在这里插入图片描述

1.4.1. SQLAlchemy

SQLAlchemy 是一个流行的 Python SQL 工具和 ORM(对象关系映射)库,它提供了对多种关系数据库的抽象和访问。它允许开发者使用 Python 语言来管理数据库,执行 SQL 查询,并与数据库进行交互。

以下是 SQLAlchemy 的一些主要特点和用途:

  1. ORM(对象关系映射)支持:SQLAlchemy 提供了 ORM 功能,允许开发者使用 Python 类来表示数据库表和关系。它将数据库中的表映射为 Python 对象,使得可以直接通过对象操作数据库,而无需编写复杂的 SQL 查询。

  2. 数据库适配器:SQLAlchemy 支持多种主流数据库(如 PostgreSQL、MySQL、SQLite、Oracle 等)的连接和交互,它提供了适配器(dialects)来与不同的数据库引擎交互,使得开发者可以在不同的数据库系统中轻松切换。

  3. 灵活性:SQLAlchemy 提供了高度的灵活性,允许开发者根据需要以不同的抽象级别操作数据库。它支持 SQL 表达式、原始 SQL 查询、ORM 查询等多种方式来处理数据。

  4. 数据库连接池和事务管理:SQLAlchemy 提供了连接池管理和事务管理,有助于更有效地管理数据库连接,减少资源消耗,提高性能。

  5. 完善的文档和社区支持:SQLAlchemy 拥有丰富的文档和活跃的社区,提供了大量示例、教程和文档,有助于开发者更好地使用和理解它的功能。

总的来说,SQLAlchemy 是一个功能强大、灵活且易于使用的 Python SQL 工具,用于简化和管理与数据库的交互,并提供了多种方法来处理和操作数据库。

1.4.2. psycopg2

psycopg2 是一个流行的 PostgreSQL 数据库的 Python 适配器,用于在 Python 中连接和操作 PostgreSQL 数据库。

主要特点包括:

  1. PostgreSQL 适配器psycopg2 允许 Python 开发者通过 Python 与 PostgreSQL 数据库进行交互。它是一个高度优化的库,提供了对 PostgreSQL 数据库的完整访问和控制。

  2. 性能和稳定性:由于 psycopg2 是针对 PostgreSQL 数据库的 C 语言扩展模块,因此具有出色的性能和稳定性。它可以实现高效的数据库连接、查询和数据操作。

  3. 多功能性psycopg2 支持大多数 PostgreSQL 数据库的功能,包括事务管理、预处理语句、类型适配等。它允许执行 SQL 查询、事务控制以及处理查询结果。

  4. 大量文档和社区支持psycopg2 有丰富的文档和活跃的开发者社区。它提供了大量的示例和文档,使开发者能够更好地使用和理解库的功能。

在 Python 中连接 PostgreSQL 数据库时,psycopg2 是一个非常受欢迎且广泛使用的选择,用于处理数据库连接、执行查询以及进行其他与数据库相关的操作。

1.4.3. 代码实现

import geopandas as gpd
import matplotlib.pyplot as plt
from sqlalchemy import create_engine,text

# 设置数据库连接信息
username = 'user_xxx'
password = 'pwd_xxx'
host = '127.0.0.1'
database = 'dbname_xxx'
port='5432'
schema='schema_xxx'

engine=create_engine(f'postgresql://{username}:{password}@{host}:{port}/{database}?options=-csearch_path={schema}')

# 查询并读取数据到 GeoPandas DataFrame
table_name = 'tbname_xxx' 
query = text(f"SELECT * FROM {table_name}")
data = gpd.read_postgis(query, con=engine.connect(),geom_col='shape')

# 显示数据的前几行
print(data.head())

# 绘制地理空间数据
data.plot()

# 显示图形
plt.show()


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue实现移动端适配

目录 1. 使用vw单位:vw是视窗宽度的百分比,可以根据不同设备的屏幕宽度来进行自适应。在Vue中可以通过设置全局CSS样式,将所有的尺寸单位改为vw。 2. 使用Flexible.js:Flexible.js是一个用于淘宝移动端适配的库,可以…

【lesson11】表的约束(4)

文章目录 表的约束的介绍唯一键约束测试建表插入测试建表插入测试建表插入测试修改表插入测试 表的约束的介绍 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保…

实验7:索引和视图定义

【实验目的】 1、了解索引和视图的含义 2、熟悉索引和视图的创建规则 3、掌握索引和视图的创建和管理 【实验设备及器材】 1、硬件:PC机; 2、软件:(1)Windows7; (2)Microsoft SQL Server 2012。 【主要内容】 索引的创建、删除、重建…

C# Socket通信从入门到精通(14)——多个异步UDP客户端C#代码实现

前言: 在之前的文章C# Socket通信从入门到精通(13)——单个异步UDP客户端C#代码实现我介绍了单个异步Udp客户端的c#代码实现,但是有的时候,我们需要连接多个服务器,并且对于每个服务器,我们都有一些比如异步发送、异步接收的操作,那么这时候我们使用之前单个异步Udp客…

轻松理解 七大排序算法 (C语言实现)

目录 1. 冒泡排序 基本思想: 时间复杂度: 优化: 代码展示: 特性总结: 2. 直接插入排序 基本思想: 时间复杂度: 代码实现: 特性总结: 3. 简单选择排序 基…

披荆斩棘的「矿区无人驾驶」,能否真正打开千亿级市场?

随着2022年备受瞩目的台泥句容矿无人驾驶运输项目硬核落地,以及相关科技公司开放该矿24小时无人矿卡生产运营直播以证明其项目并非在演示,2023年全国开启了大规模矿区无人驾驶商业化落地,堪称矿区无人驾驶元年。虽然我国矿区无人驾驶市场渗透…

MSPM0L1306例程学习-ADC部分(1)

MSPM0L1306例程学习-ADC部分(1) MSPM0L1306例程学习 使用的TI的官方例程,即SDK里边包含的例程代码。 MCU使用的是MSPM0L1306, 对于ADC部分,有10个例程: 例程理解 ADC的转换有多种工作模式,从最简单的单通道单次转换开始入手…

【LeetCode题目拓展】第207题 课程表 拓展(拓扑排序、Tarjan算法、Kosaraju算法)

文章目录 一、拓扑排序题目二、题目拓展1. 思路分析2. tarjan算法3. kosaraju算法 一、拓扑排序题目 最近在看一个算法课程的时候看到了一个比较好玩的题目的扩展,它的原题如下: 对应的LeetCode题目为 207. 课程表 这个题目本身来说比较简单&#xff…

单元测试技术

文章目录 一、单元测试快速入门二、单元测试断言三、Junit框架的常用注解 一、单元测试快速入门 所谓单元测试,就是针对最小的功能单元,编写测试代码对其进行正确性测试。 常规的例如如果在main中测试,比如说我们写了一个学生管理系统&…

【九】spring、springmvc、springboot、springcloud

spring、springmvc 、springboot 、springcloud 简介 从事IT这么些年,经历了行业技术的更迭,各行各业都会有事务更新,IT行业技术更迭速度快的特点尤为突出,或许这也是从事这个行业的压力所在,但另一方面反应了这个行业…

2023年第三季度全球SSD出货量环比增长24%,市场复苏!

根据Trendfocus发布的研究报告显示:2023年第三季度全球SSD出货量环比增长24%,达到9306万pcs,出货容量也增长了21%,达到7769EB。三星出货量市场TOP1,其次是WDC西部数据、金士顿、镁光Micron、海力士等。 由于PC OEM连续…

【精选】小白是如何挖漏洞的(技巧篇)

目录: 怎么找漏洞 找到后如何挖漏洞 关于通杀漏洞N day漏洞的挖掘 漏洞如何提交 每小结都有提供对应的案例,简直不要太nice! 这个月的SRC活动也快开始了,看到群里的小伙伴在问如何找漏洞,SQL注入的漏洞咋找&#x…

jQuery遍历与删除添加节点

个人名片: 😊作者简介:一名大二在校生 🤡 个人主页:坠入暮云间x 🐼座右铭:懒惰受到的惩罚不仅仅是自己的失败,还有别人的成功。 🎅**学习目标: 坚持每一次的学习打卡 文章…

极简壁纸js逆向(混淆处理)

本文仅用于技术交流,不得以危害或者是侵犯他人利益为目的使用文中介绍的代码模块,若有侵权请练习作者更改。 之前没学js,卡在这个网站,当时用的自动化工具,现在我要一雪前耻。 分析 第一步永远都是打开开发者工具进…

接口管理——Swagger

Swagger是一个用于设计、构建和文档化API的工具集。它包括一系列工具,如Swagger Editor(用于编辑Swagger规范)、Swagger UI(用于可视化API文档)和Swagger Codegen(用于根据API定义生成客户端库、server stu…

【FPGA】Verilog:BCD 加法器的实现 | BCD 运算 | Single-level 16 bit 超前进位加法器 | 2-level 16-bit 超前进位加法器

0x00 BCD 运算 在 BCD 中,使用4位值作为操作数,但由于只表示 0 到 9 的数字,因此只使用 0000 到 1001 的二进制数,而不使用 1010 到 1111 的二进制数(dont care)。 因此,不能使用常规的 2complement 运算来计算,需要额外的处理:如果 4 位二进制数的运算结果在 1010 …

Rxjs 学习笔记 - 简化版

RxJS 提供了一套完整的异步解決方案,让我们在面对各种异步行为(Event, AJAX, Animation 等)都可以使用相同的 API 做开发。 前置知识点 同步(Synchronous)就是整个处理过程顺序执行,当各个过程都执行完毕&…

【acwing】92. 递归实现指数型枚举

穿越隧道 递归枚举、位运算 方法① 从1到n&#xff0c;顺序访问每位数&#xff0c;是否选择&#xff0c;每位数有两种状态&#xff0c;选1或不选0. AC代码如下&#xff1a; #include <iostream> using namespace std;const int N 100; // bool st[N]; int n;void dfs(in…

JVM面试

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.JVM 的整体结构2.类加载做了哪些事情?类加载器有哪些&#xff1f;双亲委派和沙箱安全 3.Java虚拟机栈是什么4.方法区的理解HotSpot 中方法区的演进方法区的内部结…

XSS漏洞 深度解析 XSS_labs靶场

XSS漏洞 深度解析 XSS_labs靶场 0x01 简介 XSS原名为Cross-site Sciprting(跨站脚本攻击)&#xff0c;因简写与层叠样式表(Cascading style sheets)重名&#xff0c;为了区分所以取名为XSS。 这个漏洞主要存在于HTML页面中进行动态渲染输出的参数中&#xff0c;利用了脚本语…
最新文章