Specification for storing geospatial vector data (point, line, polygon) in Parquet
1,087
stars
128
commits
Python
primary language
Sep 7, 2026
updated
This repository defines a specification for how to store geospatial vector data (point, lines, polygons) in Apache Parquet, a popular columnar storage format for tabular data - see this vendor explanation for more on what that means. Our goal is to further standardize how geospatial data is represented in Parquet to enhance geospatial interoperability among tools using Parquet today, and hopefully help push forward what's possible with 'cloud-native geospatial' workflows. There are now more than 20 different tools and libraries in 7 different languages that support GeoParquet, you can learn more at geoparquet.org.
Contributors include developers from GeoPandas, GeoTrellis, OpenLayers, Vis.gl, Voltron Data, Microsoft, CARTO, Planet & Unfolded. Anyone is welcome to join the project, by building implementations, trying it out, giving feedback through issues and contributing to the spec via pull requests. The geoarrow specification is related to GeoParquet and embraces geospatial in Arrow in a compatible way, with this specification focused solely on Parquet. We are an OGC official Standards Working Group and are on the path to be an OGC standard.
The latest stable specification and JSON schema are published at geoparquet.org/releases/.
The community has agreed on this release, but it is still pending OGC approval. We are currently working on the process to get it officially OGC approved as soon as possible by the OGC Membership. Released versions of GeoParquet will not be changed, so if changes are needed for OGC approval, it will be released with a new version number.
The 'dev' versions of the spec are available in this repo:
The latest version is 2.0.0, which is based on Parquet Geospatial Logical Types. The Parquet format now includes core geometry and geography types and the GeoParquet 2 specification provides guidance for geospatial tools for these types, along with some optional metadata not covered in the core Parquet specification.
There are two tools that validate the metadata and the actual data. It is recommended to use one of them to ensure any GeoParquet you produce or are given is completely valid according to the specification:
validate command generates a report with gpq validate example.parquet.python3 validate_geoparquet.py --check-data my_geo.parquetThere are a few core goals driving the initial development.
And our broader goal is to innovate with 'cloud-native vector' providing a stable base to try out new ideas for cloud-native & streaming workflows.
A quick overview of what GeoParquet supports (or at least plans to support).
It should be noted what GeoParquet is less good for. The biggest one is that it is not a good choice for write-heavy interactions. A row-based format will work much better if it is backing a system that is constantly updating the data and adding new data.
As of version 1.0 the specification follows Semantic Versioning, so at that point any breaking change will require the spec to go to the next major version number, e.g. 1.0.0 to 2.0.0.
Examples of GeoParquet files following the current spec can be found in the examples/ folder. For information on all the tools and libraries implementing GeoParquet, as well as sample data, see the implementations section of the website.
Python
100.0%
Specification for storing geospatial vector data (point, line, polygon) in Parquet
1,087
stars
128
commits
Python
primary language
Sep 7, 2026
updated
This repository defines a specification for how to store geospatial vector data (point, lines, polygons) in Apache Parquet, a popular columnar storage format for tabular data - see this vendor explanation for more on what that means. Our goal is to further standardize how geospatial data is represented in Parquet to enhance geospatial interoperability among tools using Parquet today, and hopefully help push forward what's possible with 'cloud-native geospatial' workflows. There are now more than 20 different tools and libraries in 7 different languages that support GeoParquet, you can learn more at geoparquet.org.
Contributors include developers from GeoPandas, GeoTrellis, OpenLayers, Vis.gl, Voltron Data, Microsoft, CARTO, Planet & Unfolded. Anyone is welcome to join the project, by building implementations, trying it out, giving feedback through issues and contributing to the spec via pull requests. The geoarrow specification is related to GeoParquet and embraces geospatial in Arrow in a compatible way, with this specification focused solely on Parquet. We are an OGC official Standards Working Group and are on the path to be an OGC standard.
The latest stable specification and JSON schema are published at geoparquet.org/releases/.
The community has agreed on this release, but it is still pending OGC approval. We are currently working on the process to get it officially OGC approved as soon as possible by the OGC Membership. Released versions of GeoParquet will not be changed, so if changes are needed for OGC approval, it will be released with a new version number.
The 'dev' versions of the spec are available in this repo:
The latest version is 2.0.0, which is based on Parquet Geospatial Logical Types. The Parquet format now includes core geometry and geography types and the GeoParquet 2 specification provides guidance for geospatial tools for these types, along with some optional metadata not covered in the core Parquet specification.
There are two tools that validate the metadata and the actual data. It is recommended to use one of them to ensure any GeoParquet you produce or are given is completely valid according to the specification:
validate command generates a report with gpq validate example.parquet.python3 validate_geoparquet.py --check-data my_geo.parquetThere are a few core goals driving the initial development.
And our broader goal is to innovate with 'cloud-native vector' providing a stable base to try out new ideas for cloud-native & streaming workflows.
A quick overview of what GeoParquet supports (or at least plans to support).
It should be noted what GeoParquet is less good for. The biggest one is that it is not a good choice for write-heavy interactions. A row-based format will work much better if it is backing a system that is constantly updating the data and adding new data.
As of version 1.0 the specification follows Semantic Versioning, so at that point any breaking change will require the spec to go to the next major version number, e.g. 1.0.0 to 2.0.0.
Examples of GeoParquet files following the current spec can be found in the examples/ folder. For information on all the tools and libraries implementing GeoParquet, as well as sample data, see the implementations section of the website.
Python
100.0%