GeoPandas在地理空间数据分析中的应用

news2024/11/13 9:07:07

GeoPandas是一个开源的Python库,专门用于处理和分析地理空间数据。它建立在Pandas库的基础上,扩展了Pandas的数据类型,使得用户能够在Python中方便地进行GIS操作。GeoPandas的核心数据结构是GeoDataFrame,它是Pandas的DataFrame的子类,可以存储几何列并执行空间操作。此外,GeoPandas还依赖于Shapely库来执行几何操作,依赖于pyogrio进行文件访问,以及依赖于matplotlib进行绘图。

以下是GeoPandas的一些主要特性:

  1. 读取和写入多种地理空间数据格式:如Shapefile、GeoJSON、PostGIS、KML等。
  2. 支持地理空间几何图形的创建、编辑和分析:包括点、线、面等。
  3. 提供空间连接、缓冲区分析、几何运算等地理空间操作
  4. 具备数据可视化能力:可以绘制地理空间数据的地图。

一:数据读取

以下是各种地理空间数据格式的简单介绍及示例:

1:Shapefile

Shapefile 是一种常见的地理空间数据格式,由多个文件组成,包括主文件(.shp)、索引文件(.shx)、属性表文件(.dbf)等。

Shapefile 的主文件(.shp文件)是一种二进制文件,用于存储地理要素的几何形状和属性信息。以下是关于 Shapefile 主文件的一些特点:

Shapefile 的主文件由固定长度的文件头和一系列可变长度的记录组成。

  1. 文件头:包含有关 Shapefile 的总体信息,如文件代码、版本号、文件长度、几何类型等。文件头的长度为 100 字节。
  2. 记录:每个记录代表一个地理要素,记录的长度取决于几何类型和属性信息的复杂性。记录由记录头和几何形状数据组成。
  3. 坐标系统信息:Shapefile 本身不包含坐标系统信息,但通常会与一个投影文件(.prj文件)一起使用,该文件描述了 Shapefile 中地理要素的坐标系统。

总的来说,Shapefile 的主文件是一种复杂的二进制文件格式,用于存储地理要素的几何形状和属性信息。要正确读取和处理 Shapefile 文件,需要使用专门的地理信息系统软件或库,如 geopandas

数据读取操作:

import geopandas as gpd

gdf = gpd.read_file('path_to_shapefile.shp')

以下是一个用geopandas读取一个 Shapefile 文件后,GeoDataFramegdf)可能的输出样例:

import geopandas as gpd

# 假设读取一个表示城市边界的 Shapefile 文件
gdf = gpd.read_file('cities.shp')

print(gdf.head())

输出可能如下:

   id        name geometry
0   1     New York  POLYGON ((-74.006011 40.7127281, -74.0059741...
1   2       London  MULTIPOLYGON (((-0.127592 51.5073219, -0.127...
2   3      Paris  POLYGON ((2.3477772 48.8588587, 2.3478284 48.8...
3   4     Tokyo  MULTIPOLYGON (((139.741229 35.681199, 139.741...
4   5  Los Angeles  MULTIPOLYGON (((-118.243683 34.0522342, -118...

在这个例子中,假设 Shapefile 文件有idname两个属性字段和表示几何形状的geometry列。geometry列中的值可以是点、线、多边形等不同的几何对象,具体取决于数据的内容。例如,这里显示了一些城市的名称以及对应的多边形几何形状表示城市边界。

2:GeoJSON

GeoJSON 是一种基于 JSON 的开放标准格式,用于表示地理空间数据。示例如下:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [10, 20]
      },
      "properties": {
        "name": "Sample Point"
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [[[11, 21],[12, 22],[13, 21],[11, 21]]]
      },
      "properties": {
        "name": "Sample Polygon"
      }
    }
  ]
}

数据读取操作:

import geopandas as gpd

gdf = gpd.read_file('path_to_geojson.json')

3:PostGIS

PostGIS 是 PostgreSQL 数据库的一个空间扩展,它在数据库中存储和处理地理空间数据。

示例(在 PostgreSQL 数据库中的查询结果):

-- 查询一个表中的几何列和属性列
SELECT geom, name FROM my_table;

假设表中有一个点和一个多边形对象,结果可能如下:

geomname
POINT(10 20)Point Object
POLYGON((11 21,12 22,13 21,11 21))Polygon Object

首先安装必要的库:psycopg2sqlalchemy(如果使用 SQLAlchemy 连接数据库),其中,usernamepasswordhostportdatabase_name分别为数据库的用户名、密码、主机地址、端口号和数据库名称。your_table是要查询的表名,geometry_column_name是包含几何数据的列名。数据读取方式如下:

import geopandas as gpd
from sqlalchemy import create_engine

# 创建数据库连接引擎
engine = create_engine('postgresql://username:password@host:port/database_name')

# 查询数据库表并读取为 GeoDataFrame
sql = "SELECT * FROM your_table"
gdf = gpd.read_postgis(sql, engine, geom_col='geometry_column_name')

4:KML

KML(Keyhole Markup Language)是一种用于表示地理信息的 XML 格式,常用于 Google Earth 等软件。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Placemark>
    <name>Sample Point</name>
    <Point>
      <coordinates>10,20,0</coordinates>
    </Point>
  </Placemark>
  <Placemark>
    <name>Sample Polygon</name>
    <Polygon>
      <outerBoundaryIs>
        <LinearRing>
          <coordinates>11,21,0 12,22,0 13,21,0 11,21,0</coordinates>
        </LinearRing>
      </outerBoundaryIs>
    </Polygon>
  </Placemark>
</kml>

数据读取方式如下:

import geopandas as gpd

gdf = gpd.read_file('path_to_kml.kml', driver='KML')

二:数据可视化

1:用Python标记世界地图

import geopandas as gpd
import matplotlib.pyplot as plt
import contextily as ctx
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体等中文字体
# 获取自然地球数据集(包含世界各国的边界等信息)
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# 定义要标记的固定经纬度点
latitude = 40.7128  # 例如纽约市纬度
longitude = -74.0060  # 例如纽约市经度

# 创建地图
fig, ax = plt.subplots(figsize=(15, 10))

# 绘制世界地图
world.plot(ax=ax)

# 绘制标记点
ax.scatter(longitude, latitude, color='red', s=100)

# 添加地图背景图
ctx.add_basemap(ax, zoom=2, source=ctx.providers.Stamen.Terrain)

plt.title('全球地图及标记点', size=15)
plt.show()

在这个示例中,首先读取世界地图数据集,然后定义了一个固定的经纬度点(这里以纽约市为例),在地图上绘制世界地图后,使用scatter绘制标记点。最后添加地图背景图。可以根据实际需求修改标记的经纬度点和标签内容。标记后的世界地图如下:

2:用Python标记我国城市

import geopandas as gpd
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体等中文字体

# 读取中国行政区划的 GeoDataFrame
china = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
china = china[china['iso_a3'] == 'CHN']

# 创建地图
fig, ax = plt.subplots(figsize=(10, 8))

# 绘制中国地图
china.plot(ax=ax)

# 定义一些城市的经纬度和名称
cities = {
    '北京': (116.4074, 39.9042),
    '上海': (121.4737, 31.2304),
    '广州': (113.2644, 23.1291),
    '深圳': (114.0579, 22.5431),
    '成都': (104.0657, 30.5723)
}

# 在地图上标记城市位置
for city_name, (longitude, latitude) in cities.items():
    ax.scatter(longitude, latitude, color='red', s=50)

plt.show()

以上操作可以根据经纬度上标记一些城市位置,例如北京,上海,广州,深圳和成都,标记后的大致的地理位置演示图如下:

想要探索多元化的数据分析视角,可以关注之前发布的相关内容。

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

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

相关文章

【PCB工艺】表面贴装技术中常见错误

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 1、什么是SMT和SMD2、表面贴装技术的优势是什么&#xff1f;3、通孔和表面贴装技术之间的区别是什么&#xff1f;4、焊…

【Qt网络】—— Qt网络编程

目录 &#xff08;一&#xff09;UDP Socket 1.1 核心API概览 1.2 代码示例 1.2.1 回显服务器 1.2.2 回显客户端 &#xff08;二&#xff09;TCP Socket 2.1 核心API概览 2.2 代码示例 2.2.1 回显服务器 2.2.2 回显客户端 &#xff08;三&#xff09;HTTP Client 3…

如何在麒麟操作系统中限制SSH远程登录而不影响FTP

如何在麒麟操作系统中限制SSH远程登录而不影响FTP 1、禁止SSH远程登录1.1 禁止Root用户1.2 禁止特定用户1.3 禁止特定用户组 2、重启SSHD服务3、注意事项 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在服务器管理中&#xff0c;出于安全…

灵办AI工具(科研学术,代码编程,学习辅导,图书报告)功能介绍

灵办AI最新添加的大模型 小灵助手&#xff1a; 功能&#xff1a;综合各种基础对话场景&#xff0c;提供高效精准的解答。 作用&#xff1a;能够快速响应用户的问题&#xff0c;帮助用户解决日常生活中的疑问&#xff0c;提升用户体验。 科研学术深度解读&#xff1a; 功能&a…

超低能耗 万物互联——光耦助力超低功率WiFi智能连接

随着物联网技术的快速发展&#xff0c;超低功率WiFi设备正逐渐成为智能化生活和工作的重要组成部分。超低功率WiFi是一种针对电池供电设备设计的无线网络技术&#xff0c;旨在降低设备功耗、延长电池寿命&#xff0c;并在需要长时间运行而不需要频繁充电或更换电池的应用中发挥…

el-popover自定义类名添加样式和手动关闭

el-popover自定义类名添加样式和手动关闭 <el-popover popper-class"popver_account" style"padding-right: 0px !important;" ref"popover" placement"bottom" width"260" trigger"click"><div class&…

Java集成开发环境(IDE)之 => “IntelliJ IDEA“ 安装

一、软件介绍 IntelliJ IDEA 是一款由 JetBrains 公司开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它主要用于 Java 语言的开发&#xff0c;但同时也支持多种其他编程语言&#xff0c;如 Kotlin、Groovy、Scala、Python、Ruby、PHP、JavaScript、TypeScript 等…

【PCB测试】最常见的PCB测试方法

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 一、PCB测试的好处1.发现错误2.降低成本3.节省时间4.减少退货率5.提高安全性 二、PCB测试内容1.孔壁质量2.电镀铜3.清…

uniapp使用高德地图设置marker标记点,后续根据接口数据改变某个marker标记点,动态更新

最近写的一个功能属实把我难倒了,刚开始我请求一次数据获取所有标记点,然后设置到地图上,然后后面根据socket传来的数据对这些标记点实时更新,改变标记点的图片或者文字, 1:第一个想法是直接全量替换,事实证明这样不行,会很卡顿,有明显闪烁感,如果标记点比较少,就十几个可以用…

孩子们的游戏(约瑟夫环问题)

孩子们的游戏 题目描述 每年六一儿童节&#xff0c;牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中&#xff0c;有个游戏是这样的&#xff1a;首先&#xff0c;让 n 个小朋友们围成一个大圈&#xff0c;小朋友们的编号是0~n-1。然后&#xff0c;随机指定一个数 m…

WebGL入门(029):WEBGL_depth_texture 简介、使用方法、示例代码

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

Machine Learning: A Probabilistic Perspective 机器学习:概率视角 PDF免费分享

下载链接在博客最底部&#xff01;&#xff01; 之前需要参考这本书&#xff0c;但是大多数博客都是收费才能下载本书。 在网上找了好久才找到免费的资源&#xff0c;浪费了不少时间&#xff0c;在此分享以节约大家的时间。 链接: https://pan.baidu.com/s/1erFsMcVR0A_xT4fx…

Harmony Next 文件命令操作(发送、读取、媒体文件查询)

查询文件位置 hdc shell mediatool query IMG_20240902_204224.jpg 输出示例 拉取文件 hdc file recv /storage/cloud/100/files/Photo/4/IMG_1725281044_036.jpg aa.jpg 发送文件 hdc file send aa.jpg /storage/media/100/local/files/Docs/Download/ab.jpg 下载目录位置…

Qt信号和槽【1】

文章目录 信号和槽概念connect函数自定义信号和槽自定义槽自定义信号 信号和槽概念 在Linux当中有信号signal&#xff0c;是系统内部的通知机制&#xff0c;也可以认为是进程的通知机制。这里需要注意三要素&#xff1a; 信号源&#xff1a;谁发的信号信号的类型&#xff1a;…

耗时一个月,我做了一个网页视频编辑器

最近又肝了一个多月&#xff0c;终于把这个网页视频编辑器做好了&#xff0c;下面我来简单介绍一下如何使用 注意目前该功能还处在测试阶段&#xff0c;可能会有很多问题&#xff0c;后续我会不断修复 体验地址 app.zyjj.cc 界面介绍 整个剪辑界面包括4个区&#xff0c;左边是…

Java毕业设计选题推荐之基于SpringBoot+Vue的校园互助帮平台【提供源码+答辩PPT+参考文档+项目部署】

&#x1f6a9;如何选题&#xff1f; 如何选题、让题目的难度在可控范围&#xff0c;以及如何在选题过程以及整个毕设过程中如何与老师沟通&#xff0c;这些问题是需要大家在选题前需要考虑的&#xff0c;具体的方法我会在文末详细为你解答。 &#x1f6ad;如何快速熟悉一个项目…

Ubuntu 下载软件包时,提示 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

解决办法&#xff1a; 打开 软件和更新 先更新一下&#xff1a; sudo apt-get update 接下来再次安装你需要的软件包&#xff0c;例如&#xff1a; sudo apt install libsdl2-dev

C++奇迹之旅:快速上手Priority_queue的使用与模拟实现

文章目录 &#x1f4dd;priority_queue的介绍和使用&#x1f320; priority_queue的介绍&#x1f309;priority_queue的使用 &#x1f320;仿函数的使用&#x1f320;C语言有趣的模仿push_back&#x1f320;priority_queue的模拟实现&#x1f6a9;总结 &#x1f4dd;priority_q…

小型企业如何利用人工智能的生产力

尽管生产力低下是一个长期存在的问题&#xff0c;但最近严峻的经济逆风加剧了这一问题&#xff0c;企业清算数量同比增长了 19&#xff05;。 Xero 的报告《小企业生产力&#xff1a;趋势、影响和战略》反映了这些宏观经济变化&#xff0c;显示 2023 年新西兰小企业生产力与 …

水平仪激光模组热了就不亮了怎么维修?

在建筑施工、装修设计或是精密测量等领域&#xff0c;水平仪作为不可或缺的工具&#xff0c;其准确性和稳定性直接关乎到工作的质量与效率。然而&#xff0c;许多用户在使用过程中会遇到这样一个问题&#xff1a;水平仪的激光模组在长时间使用或环境温度升高后&#xff0c;突然…