01_初识GeoParquet数据集

news2024/11/23 1:56:57

概述

在这里插入图片描述

GeoParquet是一种用于存储地理空间数据的文件格式,基于Apache Parquet。它支持高效地存储和查询大型地理空间数据集,具有良好的压缩性能和**列式**存储结构。GeoParquet还与许多地理信息系统(GIS)和大数据处理工具兼容,使得地理数据处理更加灵活和高效。

  • 基础概念:GeoParquet基于Apache Parquet,是一种列式存储格式,适用于大规模数据集。它使用了高效的压缩算法,减少了存储需求并提高了读取速度。
  • 地理空间支持:GeoParquet扩展了Parquet,以支持地理空间数据类型,如点、线、面等。它符合OGC(开放地理空间联盟)的标准,使得GIS应用可以直接处理这些数据。
  • 数据模型:在GeoParquet中,数据通常以“属性-几何”的形式存储,属性包含特征的信息,而几何则描述空间位置。这样可以方便地进行复杂的空间查询和分析。
  • 优势
    • 高效存储:由于采用列式存储,读取特定列的数据时速度更快,尤其在处理大规模数据时。
    • 灵活性:支持多种数据类型和复杂结构,适用于多样化的GIS应用场景。
    • 兼容性:与多种大数据框架(如Apache Spark、Flink)和GIS工具(如QGIS、PostGIS)兼容,方便集成和使用。
  • 应用场景:GeoParquet适用于大数据分析、机器学习、实时数据处理等场景,特别是在需要处理大量地理空间数据时。
  • 学习和使用:可以通过实际项目来深入了解GeoParquet,比如使用Apache Spark进行数据处理,或者将其与GIS工具结合,进行可视化和分析。

相关网站

  • geoparquet.org
  • Github-GeoParquet

与常见矢量存储格式的异同

GeoParquet与常见的SHP(Shapefile)和GeoJSON文件在几个关键方面有所不同:

  1. 存储格式
    • SHP:基于二进制格式,通常由多个文件(.shp、.shx、.dbf等)组成,适合存储简单的几何和属性数据,但不支持复杂数据结构。
    • GeoJSON:基于文本格式(JSON),易于阅读和编辑,适合小型数据集,但在存储和处理大型数据时效率较低。
    • GeoParquet:基于列式存储格式,支持高效的压缩和查询,适合大规模数据集。
  2. 数据类型支持
    • SHPGeoJSON:支持常见的几何类型,但在复杂数据结构(如多几何体)支持上有限。
    • GeoParquet:支持更丰富的地理空间数据类型,符合OGC标准,可以处理复杂的几何结构。
  3. 性能
    • SHP:读取速度较快,但文件大小较大,且支持的数据量有限。
    • GeoJSON:便于交换和使用,但在处理大数据集时效率较低。
    • GeoParquet:由于其列式存储特性,读取和查询大型数据集时性能优越,适合大数据分析。
  4. 兼容性与应用
    • SHPGeoJSON:广泛支持于各种GIS软件和工具,易于使用和共享。
    • GeoParquet:与大数据处理框架(如Apache Spark)兼容,适合进行大规模数据分析。

有关生态

目前GeoParquet生态已有很多工具与库供外部使用,具体可参考GeoParquet官网首页下方链接。

Tools

  1. Browser-based converter(基于浏览器的转换器):由GPQ库驱动,可在浏览器中实现GeoJSON与GeoParquet之间的互相转换。
  2. GeoPandas** (Python) **:扩展了pandas的数据类型,支持几何类型的空间操作,并支持GeoParquet文件的reading与writing。
  3. QGIS:Windows和Linux版本原生支持GeoParquet。Mac用户可以通过conda安装支持(在激活的conda环境中运行以下命令:
conda config --add channels conda-forge  
conda install qgis libgdal-arrow-parquet  
qgis

然后直接在终端中输入qgis运行软件)。

  1. Scribble Maps:一个功能全面的Web应用,支持GeoParquet的导入和导出。
  2. BigQuery Converter:提供Python脚本,用于与Google BigQuery交互,读取和写入GeoParquet文件。
  3. CARTO:一个地理空间平台,支持GeoParquet的supports import。
  4. gpq:提供一个命令行界面,用于验证和描述任何GeoParquet文件,还可以将GeoParquet转换为GeoJSON,反之亦然。
  5. stac-geoparquet:将STAC目录(SpatioTemporal Asset Catalogs)转换为GeoParquet。
  6. Apache Sedona:一个用于处理大规模空间数据的集群计算系统,可扩展Apache Spark和Apache Flink。它支持通过Scala、Java、Python或Rload和saveGeoParquet。
  7. Esri’s ArcGIS GeoAnalytics Engine:通过扩展Apache Spark,提供空间分析功能和工具。它的Python库或Spark插件支持加载或保存GeoParquet文件。详见其GeoParquet page。
  8. FME: by Safe Software:一个无需编写代码的平台,从version 23.1开始支持GeoParquet文件的读写。
  9. SeerAI’s** **Geodesic Platform:一个云原生的、全球规模的时空数据网格和数据融合平台。其Boson服务网格原生支持GeoParquet,并能通过API以兼容格式向其他分析系统和地理空间软件暴露大规模GeoParquet数据集。所有表格和要素数据输出均以Parquet/GeoParquet格式保存。
  10. Wherobots:一个完全托管的云空间数据湖仓(data lakehouse),支持任何规模的地理空间数据管理和分析。所有数据可保存为GeoParquet格式,并使用其Havasu Spatial Table Format进行目录管理。
  11. pygeoapi:OGC API标准套件的Python服务器实现,支持一个Parquet数据提供程序,将GeoParquet文件发布为OGC API - Features集合。

Libraries

  • geoarrow ®
  • sfarrow ®
  • GDAL/OGR (C++, bindings in several languages)
  • GeoParquet.jl (Julia)
  • gpq (Go and WASM)
  • Fiona (Python - as of version 1.9.4. Note the GeoParquet driver will only be available if your system’s GDAL library links libarrow; fiona wheels on PyPI do not include libarrow as it is rather large.)
  • .NET 6 library (.NET)
  • C++ example code - see this discussion topic for more info.

使用示例

使用GeoPandas完成GeoParquet文件的生成、读取、编写;使用QGIS完成GeoParquet文件的加载渲染。

  1. Conda虚拟环境创建(可选)
conda create -n geoparquet_env python=3.9
conda activate geoparquet_env
  1. Python库安装
conda install -c conda-forge pyarrow geopandas
  1. 编写示例代码
import geopandas as gpd
import pandas as pd
from shapely.geometry import Point
import numpy as np

# GeoParquet-创建数据
# 创建示例数据
data = {
    'sensor_id': [
        'sensor_001', 'sensor_002', 'sensor_003', 'sensor_004', 'sensor_005',
        'sensor_006', 'sensor_007', 'sensor_008', 'sensor_009', 'sensor_010'
    ],
    'traffic_flow': [120, 150, 90, 200, 180, 120, 110, 140, 160, 170],
    'timestamp': [
        '2024-10-22T08:30:00Z', '2024-10-22T08:30:00Z', '2024-10-22T08:30:00Z',
        '2024-10-22T08:45:00Z', '2024-10-22T08:45:00Z', '2024-10-22T09:00:00Z',
        '2024-10-22T09:00:00Z', '2024-10-22T09:15:00Z', '2024-10-22T09:15:00Z',
        '2024-10-22T09:30:00Z'
    ],
    'geometry': [
        Point(116.397128, 39.916527), Point(116.405285, 39.925818),
        Point(116.403122, 39.917989), Point(116.410000, 39.918000),
        Point(116.420000, 39.920000), Point(116.430000, 39.921000),
        Point(116.440000, 39.922000), Point(116.450000, 39.923000),
        Point(116.460000, 39.924000), Point(116.470000, 39.925000)
    ]
}

# 创建GeoDataFrame
gdf = gpd.GeoDataFrame(data, crs="EPSG:4326")

# 保存为GeoParquet文件
gdf.to_parquet('traffic_data.parquet', engine='pyarrow')


# GeoParquet-读取数据
# 读取GeoParquet文件
gdf = gpd.read_parquet('traffic_data.parquet')
# 过滤出8号传感器的车流量数据
sensor_8_data = gdf[gdf['sensor_id'] == 'sensor_008']
print(sensor_8_data[['timestamp', 'traffic_flow']])


# GeoParquet-追加数据并保存
# 读取现有的GeoParquet文件
gdf = gpd.read_parquet('traffic_data.parquet')
# 创建要追加的新数据
new_data = {
    'sensor_id': ['sensor_008', 'sensor_008'],  # 传感器ID
    'traffic_flow': [150, 160],                  # 新车流量数据
    'timestamp': ['2024-10-22T08:11:00Z', '2024-10-22T08:12:00Z'],  # 新时间戳
    'geometry': [Point(116.450000, 39.923000), Point(116.450000, 39.923000)]  # 新位置
}

# 将新数据转换为DataFrame
new_df = gpd.GeoDataFrame(new_data, crs="EPSG:4326")
# 将新数据追加到原有DataFrame
gdf = pd.concat([gdf, new_df], ignore_index=True)
# 保存更新后的GeoDataFrame为GeoParquet文件
gdf.to_parquet('traffic_data_append.parquet', engine='pyarrow')


# GeoParquet-读取数据
# 读取GeoParquet文件
gdf = gpd.read_parquet('traffic_data_append.parquet')
# 过滤出8号传感器的车流量数据
sensor_8_data = gdf[gdf['sensor_id'] == 'sensor_008']
print(sensor_8_data[['timestamp', 'traffic_flow']])
  1. QGIS双击文件添加到图层

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

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

相关文章

SAP B1 登陆报错解决方案 - 系统架构目录服务器选择

背景 登录时出现如下报错,报错显示为【系统架构目录服务器选择】 强行登录会发现过往账套都不见了 出现原因 出于各种原因在开机时没有把 SAP 所有的服务成功启动(上一次启动科学上网后全局代理没关干净之类的)。 解决方案 关机几分钟重启…

037集——JoinEntities连接多段线polyline和圆弧arc(CAD—C#二次开发入门)

如图&#xff1a;最终效果 polyline连接&#xff1a; 代码如下&#xff1a; public void joinentities() {Curve pLine Z.db.SelectEntities<Curve>().First().Clone() as Curve;pLine.ChangeEntityColor(1);Curve pLine1 Z.db.SelectEntities<Curve>().First()…

【划分型 DP-约束划分个数】【hard】【阿里笔试】力扣1278. 分割回文串 III

给你一个由小写字母组成的字符串 s&#xff0c;和一个整数 k。 请你按下面的要求分割字符串&#xff1a; 首先&#xff0c;你可以将 s 中的部分字符修改为其他的小写英文字母。 接着&#xff0c;你需要把 s 分割成 k 个非空且不相交的子串&#xff0c;并且每个子串都是回文串…

如何使用 Vivado 从源码构建 Infinite-ISP FPGA 项目

如约介绍源码构建 Infinite-ISP 项目&#xff0c;其实大家等的是源码&#xff0c;所以中间过程简洁略过&#xff0c;可以直接翻到文末获取链接。 开源ISP&#xff08;Infinite-ISP&#xff09;介绍 构建工程 第一步&#xff0c;从文末或者下面链接获取源码 https://github.com/…

JDK、MAVEN与IDEA的安装与配置

1.认识JDK、MAVEN与IDEA JDK 提供了编译和运行Java程序的基本环境。Maven 帮助管理项目的构建和依赖。IDEA 提供了一个强大的开发环境&#xff0c;使得编写、调试和运行Java程序更加高效。 2. 安装与环境配置 2.1 官网地址 选择你需要的版本下载&#xff1a; MAVEN下载传送…

八股(6)——MySQL(概念相关)

八股&#xff08;6&#xff09;——MySQL&#xff08;概念相关&#xff09; 4.2 MySQLMySQL 基础关系型数据库介绍ACIDMySQL 介绍 MySQL 基础架构MySQL 存储引擎MySQL 存储引擎架构了解吗&#xff1f;MySQL 支持哪些存储引擎&#xff1f;默认使用哪个&#xff1f; MySQL索引什么…

CTF--php伪协议结合Base64绕过

Base64绕过 在ctf中&#xff0c;base64是比较常见的编码方式&#xff0c;在做题的时候发现自己对于base64的编码和解码规则不是很了解&#xff0c;并且恰好碰到了类似的题目&#xff0c;在翻阅了大佬的文章后记录一下&#xff0c;对于base64编码的学习和一个工具 base64编码是…

可视化建模与UML《活动图实验报告》

你当像鸟飞往你的山。 一、实验目的&#xff1a; 1、熟悉活动图的基本功能和使用方法。 2、掌握使用建模工具软件绘制协作图的方法 二、实验环境&#xff1a; window7 | 10 | 11 EA15 三、实验内容&#xff1a; <1>绘制学生选课系统中添加课程(Add Course)用例的活动图…

Spring Cloud Alibaba、Spring Cloud 与 Spring Boot各版本的对应关系

参考spring-cloud-alibaba github wiki说明&#xff1a;版本说明 下面截取说明&#xff1a; 2022.x 分支 2021.x 分支 2.2.x 分支 组件版本关系

基于Java Springboot大学校园旧物捐赠网站

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

基于Java Springboot未央商城管理系统

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xf…

小米路由器用外网域名访问管理界面

本文在Redmi AX3000 (RA81)设置&#xff0c;其他型号路由器的管理界面端口可能各不相同。 开始之前需要保证路由器SSH功能正常&#xff0c;如果没有SSH可以参考这里。 1. 给WAN口开放80端口 可以通过下载mixbox的firewall插件或者其他防火墙插件开放端口。 2. 把域名解析到路…

ant-design-vue中table组件多列排序

antD中table组件多列排序 使用前注意实现效果图实现的功能点及相关代码1. 默认按某几个字段排序2. 点击排序按钮可同时对多个字段进行排序3. 点击重置按钮可恢复默认排序状态。 功能实现完整的关键代码 使用前注意 先要确认你使用的antD版本是否支持多列排序&#xff0c;我这里…

Linux开发工具:Vim 与 gcc,打造高效编程的魔法双剑

文章目录 一、初识Vim模式 二、vim基本操作2.1基础操作2.2命令模式/正常模式2.2.1光标定位2.2.2复制粘贴、删除2.2.3撤销2.2.4替换字符2.2.5替换模式 2.3底行模式2.3.1退出vim和**保存文件**2.3.2定位文本字符串2.3.3命令2.3.4实现分屏2.3.5替换指定字符串 2.4补充指令2.4.1视图…

算法.图论-习题全集(Updating)

文章目录 本节设置的意义并查集篇并查集简介以及常见技巧并查集板子(洛谷)情侣牵手问题相似的字符串组岛屿数量(并查集做法)省份数量移除最多的同行或同列石头最大的人工岛找出知晓秘密的所有专家 建图及其拓扑排序篇链式前向星建图板子课程表 本节设置的意义 主要就是为了复习…

云原生之k8s服务管理

文章目录 服务管理Service服务原理ClusterIP服务 对外发布应用服务类型NodePort服务Ingress安装配置Ingress规则 Dashboard概述 认证和授权ServiceAccount用户概述创建ServiceAccount 权限管理角色与授权 服务管理 Service 服务原理 容器化带来的问题 自动调度&#xff1a;…

Atomic原子操作类详解

Atomic原子操作类介绍 在并发编程中很容易出现并发安全的问题&#xff0c;有一个很简单的例子就是多线程更新变量i1,比如多个线程执行i操作&#xff0c;就有可能获取不到正确的值&#xff0c;而这个问题&#xff0c;最常用的方法是通过Synchronized进行控制来达到线程安全的目…

随手记: vue监听路由

随手记&#xff1a;没空记详细 newVal,oldVal 可以查看到最新路由和上一条路由详细 watch: {$route: {handler(newVal,oldVal) {console.log(newVal, oldVal)if(oldVal.path /organization/serviceManagement/list) {if(this.cacheId ! newVal.query.id) {this.cacheId newV…

AndroidStudio与开发板调试时连接失败或APP闪退的解决方案,涉及SELINUX及获取Root权限

现象 用AndroidStudio打开工程代码,点击运行后,报错: 解决方案 具体原因是尝试运行 su(通常用于获取超级用户权限)时失败了,提示 “Permission denied” 通过 CONFIG_SECURITY_SELINUX 变量控制 SElinux 开启或关闭 在vim /rk3568_android_sdk/device/rockchip/rk…

深度学习之One Stage目标检测算法2

我们将对单次目标检测器&#xff08;包括SSD系列和YOLO系列等算法&#xff09;进行综述。我们将分析FPN以理解多尺度特征图如何提高准确率&#xff0c;特别是小目标的检测&#xff0c;其在单次检测器中的检测效果通常很差。然后我们将分析Focal loss和RetinaNet&#xff0c;看看…