Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Geo Parquetの仕様を追ってみた
Search
KentarouSuzuki
June 28, 2022
Technology
870
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Geo Parquetの仕様を追ってみた
現在、GitHubで議論されているGeoParquetがv0.4.0まで仕様が公開されたので、どのような仕様になっているのか、追ってみました。
KentarouSuzuki
June 28, 2022
More Decks by KentarouSuzuki
See All by KentarouSuzuki
Discrete Global Grid System(DGGS) について調べた
kentarousuzuki
0
900
空間データのためのRツリー
kentarousuzuki
0
1.5k
Magnet Pattern と Method Overload
kentarousuzuki
0
430
shapelessと代数的データ型
kentarousuzuki
0
400
Other Decks in Technology
See All in Technology
V8コントリビュート超入門
riyaamemiya
0
130
Genie Code ワークショップ 基礎編 / Genie-Code-Workshop-fundamental
databricksjapan
PRO
0
320
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
750
[RSJ26] Hierarchy-Aware Multimodal Retrieval-Augmented Generation for Embodied Question Answering
keio_smilab
PRO
1
160
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
2
1.3k
Claude Codeの体系的な理解と知識のフック
oikon48
10
6.6k
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
120
現場に行くだけでは足りない——プロダクトエンジニアが業務の流れを捉える観点と、その鍛え方
takumiengineering
0
190
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
3
3.3k
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
12
9.6k
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
360
IDperturb: Enhancing Variation in Synthetic Face Generation via Angular Perturbation
sansantech
PRO
0
110
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.3k
Typedesign – Prime Four
hannesfritz
42
3.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
550
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.9k
It's Worth the Effort
3n
188
29k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
560
Balancing Empowerment & Direction
lara
6
1.3k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
The Invisible Side of Design
smashingmag
301
52k
Transcript
Geo Parquetの仕様について追ってみた 1
本日のお話 1. Geo Parquetとは? 2. v0.4.0 時点で決まっている仕様 3. Spatial Index
2
Geo Parquetとは? https://github.com/opengeospatial/geoparquet Geo Parquetとは? 3
ベクタ形式の地理情報データをApach Parquetで扱えるようにした仕様 バージョン 2022年3月9日にv0.1.0が公開 2022年6月28日現在、v0.4.0まで公開されている Geo Parquetとは? 4
代表的な参加会社・団体 azavea CARTO FORSQUARE GeoPandas Microsoft Unfolded Geo Parquetとは? 5
実装 名前 言語 ライブラリ側の対応バージョン GeoPandas Python 0.8.0 sfarrow R GDAL/OGR
C++ 3.5 GeoParquet.jl Julia geoarrow R Parquet-WASM WASM Geo Parquetとは? 6
Motivation 大量のデータをさばくサービスが普及してきている今日の状況で、Parquetといった列志向の データフォーマットでも地理情報を使いたいニーズが増えてきた。 しかし、現状ではParquetで地理情報を効率良く蓄積する方法が定まっていない。 Geo Parquetとは? 7
ゴール Establish a great geospatial format for workflows that excel
with columnar data Introduce columnar data formats to the geospatial world Enable interoperability among cloud data warehouses Persist geospatial data from Apache Arrow (GeoParquetリポジトリのREADMEより) Geo Parquetとは? 8
v0.4.0 時点で決まっている仕様 v0.4.0 時点で決まっている仕様 9
1.地理情報のフォーマット GeoParquetでは地理情報を表すフォーマットはWKB (Well-known binaly) と呼ばれるフォー マットを使い、Parquetの型は BYTE_ARRAY を使用する。 そして、このWKBをParquetのファイルメタデータの primary_column
で指定した、カラム に格納する。 v0.4.0 時点で決まっている仕様 10
また、地理情報の種類としては以下のものをサポートしている。 Point LineString Polygon MultiPoint MultiLineString MultiPolygon GeometoryCollection v0.4.0 時点で決まっている仕様
11
2.座標参照系 カラムのメタデータにはCRS(Coodinate Reference System, 座標参照系)を設定することがで きる。 この時、CRSのフォーマットはPROJJSONと呼ばれるフォーマットで示す。 もしも、この値がなかった場合は、デフォルトでCRS84が選択される。 v0.4.0 時点で決まっている仕様
12
v0.4.0 時点で決まっている仕様 13
座標参照系についてちょっと説明 v0.4.0 時点で決まっている仕様 14
地理情報の世界では、基本的に情報は座標で表す。 例) EASTオフィスの位置: POINT(139.7035426 35.6655141) v0.4.0 時点で決まっている仕様 15
この時、座標の表し方はたくさんあり、用途によって使い分ける。 それを表したのが、座標参照系。 例) EASTオフィスの座標を表す場合 GPSデータ: POINT(139.7035426 35.6655141) WEB上の地図, 厳密さが要求されていない距離計算: POINT(15551727.2242484
4254693.69910994) v0.4.0 時点で決まっている仕様 16
3.Bounding Box v0.4.0 時点で決まっている仕様 17
GeoParquetでは、地理情報を効率的に読み込むために、地理情報を表すカラムのメタデータ にBounding Boxを設定している。 Bounding Box(Bbox)とは? 選択した、Point or LineString or Polygonを全てを含む最小の長方形。
例)山手線の駅とBboxの例 v0.4.0 時点で決まっている仕様 18
このBounding Boxが次に説明するSpatialIndexへとつながります。 v0.4.0 時点で決まっている仕様 19
Spatial Index Spatial Index 20
Spatial Index(空間インデックス)とは、地理情報の検索を高速にするためのインデック ス。 例えば、PostgreSQLを拡張したPostGISでは、空間インデックスをR-Treeを使って実現して いる。 Spatial Index 21
GeoParquetでは、v0.5.0で空間インデックスの実現方法を発表できるように議論が進められ ている。 GitHubのIssue (https://github.com/opengeospatial/geoparquet/issues/13) Spatial Index 22
現在、Spatial Indexの有力な実装方法の一つは、先ほど取り上げたBounding Boxを使って実 現する。 Spatial Index 23
Parquetでは、右の図のようにいくつか の行をまとめたRow GropとPageがあ る。 この時、行ごとのBounding Boxは新し くX(経度)とY(緯度)の値を格納する 画像はParquetのGitHubより引用 Spatial Index
24
表で表すイメージはこんな感じ Name geom MBR.x MBR.y hoge WKB [135, 137] [34,
36] fuga WKB [136, 139] [37, 40] MBR.xとMBR.yが行ごとに作成されたBounding Box Spatial Index 25
行ごとにでBounding Boxを作成し、 Row GroupとPage単位でさらに Bounding Boxを作成する。 イメージ的にはこんな感じ 1. 黒: ファイル単位のB
Box 2. 青: Row Group単位のB Box 3. 赤: Page単位のB Box 画像はWikipediaのR-Treeより引用 Spatial Index 26
CARTOがこちらの方法をSparkのUDFsで定義して、位置の絞り込みを実装したところ、 10minかかっていたクエリが2secにまで短縮した...? https://github.com/opengeospatial/geoparquet/issues/13#issuecomment-1097993976 実装はCartoDB/analytics-toolbox-databricksで公開されています。 Spatial Index 27
他にも、空間充填曲線やParquetで新しく空間データを定義してあげる方法もあげられている ようですが、まだ絶賛議論中っぽそうです。 Spatial Index 28