01_初识GeoParquet数据集

概述

在这里插入图片描述

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与常见的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文件的readingwriting
  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或RloadsaveGeoParquet。
  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

使用示例

使用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双击文件添加到图层

飞思卡尔智能车竞赛是一项备受关注的科技赛事,旨在激发学生的创新和实践能力,尤其是在嵌入式系统、自动控制和机器人技术等关键领域。其中的“电磁组”要求参赛队伍设计并搭建一辆能够自主导航的智能车,通过电磁感应线圈感知赛道路径。本压缩包文件提供了一套完整的电磁组智能车程序,这是一套经过实战验证的代码,曾在校级比赛中获得第二名的优异成绩。 该程序的核心内容可能涉及以下关键知识点: 传感器处理:文件名“4sensor”表明车辆配备了四个传感器,用于获取环境信息。这些传感器很可能是电磁感应传感器,用于探测赛道上的导电线圈。通过分析传感器信号的变化,车辆能够判断自身的行驶方向和位置。 数据采集与滤波:在实际运行中,传感器读数可能受到噪声干扰,因此需要进行数据滤波以提高精度。常见的滤波算法包括低通滤波、高斯滤波和滑动平均滤波等,以确保车辆对赛道的判断准确无误。 路径规划:车辆需要根据传感器输入实时规划行驶路径。这可能涉及PID(比例-积分-微分)控制、模糊逻辑控制或其他现代控制理论方法,从而确保车辆能够稳定且快速地沿赛道行驶。 电机控制:智能车的驱动通常依赖于直流电机或无刷电机,电机控制是关键环节。程序中可能包含电机速度和方向的调节算法,如PWM(脉宽调制)控制,以实现精准的运动控制。 嵌入式系统编程:飞思卡尔智能车的控制器可能基于飞思卡尔微处理器(例如MC9S12系列)。编程语言通常为C或C++,需要掌握微控制器的中断系统、定时器和串行通信等功能。 软件架构:智能车软件通常具有清晰的架构,包括任务调度、中断服务程序和主循环等。理解和优化这一架构对于提升整体性能至关重要。 调试与优化:程序能够在比赛中取得好成绩,说明经过了反复的调试和优化。这可能涉及代码效率提升、故障排查以及性能瓶颈的识别和解决。 团队协作与版本控制:在项目开发过程中,团队协作和版本控制工具(如Git)的应用不可或缺,能够保
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值