Upgrade to Pro — share decks privately, control downloads, hide ads and more …

初めての位置情報エンジニアリング つまずきポイントあるある

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for GO Inc. dev GO Inc. dev
October 17, 2023

初めての位置情報エンジニアリング つまずきポイントあるある

GO TechTalk #23 ジオスペシャル!位置情報活用の現場をお話します! で発表した資料です。

■ YouTube
https://www.youtube.com/live/5V_SVH9wIgE?si=mgZ8M6P5JvrLLi9T&t=380

■ connpass
https://jtx.connpass.com/event/295571/

Avatar for GO Inc. dev

GO Inc. dev

October 17, 2023
Tweet

More Decks by GO Inc. dev

Other Decks in Programming

Transcript

  1. © GO Inc. 2 自己紹介 プロフィール写真 GO株式会社 データエンジニア / 松浦

    慎平 Web地図サービス提供企業、GISソフトウェアベンダー、自動 運転サービス提供企業で GIS エンジニアとして従事 現在は道路情報の自動差分抽出プロジェクトで GIS チョットデ キル データエンジニアとして活躍?中 @PEmugi2
  2. © GO Inc. 6 あるある1: 位置が合わない こんなことありませんか? • 地図データを買ってきて自社システム で表示したら背景地図と少しずれる...

    • 自治体のオープンデータをダウンロードした らどう見ても緯度経度ではないデータで重 ね方がわからない © OpenStreetMap contributors 出典:「国土数値情報(高速道路時系列データ)」(国土交通省)を加工 これは、データ間で位置を表すためのルールが 異なることが原因! ズレてる....
  3. © GO Inc. 代表的な測地系 WGS 84、日本測地系 2000、 日本測地系 2011は総称して 世界測地系ともよばれる

    WGS 84 と 日本測地系 2011の 誤差はごくわずか 測地系 実際の地球の形 地球楕円体モデル 測地系 = 地球上の位置を測るための基準 • 地球の形状をモデル化した楕円体モデルと基準となる原点の位置などで決まる モデル化 日本でよく使われる測地系 世界測地系 旧日本測地系 名称 楕円体モデル 備考 WGS 84 WGS 84 GPSで用いられている 日本測地系 2000 GRS 80 日本で用いられる世界基準の測地系 日本測地系 2011 GRS 80 東日本大震災における地殻変動を考慮したもの (旧)日本測地系 ベッセル楕円体 2001年以前に使われていた日本の測地系 場所によっては世界測地系と数百メートルずれる 玄人向け! 日本
  4. © GO Inc. 座標系 = 位置を座標で表現するための基準 • 座標の原点、単位や平面への投影方法を定めた基準 座標系 地理座標系

    投影座標系 緯度経度を座標としてそのまま扱う 平面に投影して原点からの距離(m)で扱う 投影🔦 X Y 経度 緯度 © OpenStreetMap contributors
  5. © GO Inc. 9 測地系が異なると同じ場所でも座標が異なる 測地系 座標系 座標  世界測地系 地理座標系

    135.0, 35.0 (単位: 度)  旧日本測地系 地理座標系 135.003, 34.996 (単位: 度) © OpenStreetMap contributors 日本へそ公園の座標値(東経135度、北緯35度)を異なる測地系で比べてみる 135.0, 35.0 135.003, 34.996
  6. © GO Inc. EPSGコード = 測地系、座標系など位置を扱うための基準をコード化したもの SRID(Spatial Reference ID)と呼ばれることもある 例

    • EPSG: 4326 ◦ WGS 84 + 地理座標系 • EPSG: 4301 ◦ 旧日本測地系 + 地理座標系 • EPSG: 3857 ◦ WGS 84 + 投影座標系(Pseudo Mercator) ◦ Google MapsやOpenStreetMapなどのWeb地図でよく使用される PostGISやQGISなどのソフトウェアの中での測地系+座標系の組み合わせはこ のコードで管理される 11 EPSGコード
  7. © GO Inc. • 緯度経度を平面座標として距離計算してしまう ◦ 平面座標で用いる距離計算式で緯度経度を 使ってはいけない 距離 =

    (lon1 - lon2)2 + (lat1 - lat2)2 ◦ 1度が表す距離は緯度によって変化する! 13 やってはいけない距離計算方法 • 投影座標系でも原点から遠いと誤差が出る! ◦ 投影座標系(単位:メートル)で計算しているが 計算したい場所が原点(0m, 0m)から離れている ◦ 原点から離れると誤差が大きくなる 玄人向け!
  8. © GO Inc. ではどうすれば正確な距離が計算できるのか • ST_Distance や ヒュべニの公式で測地線距離を計算しよう ◦ ST_Distance

    ▪ PostGIS(PostgreSQLの拡張)の距離計算関数 ST_Distance(from_geom::geography,to_geom::geography) ◦ ヒュベニの公式 ▪ 簡易的な測地線距離計算の公式 ▪ 数百メートルの距離計算であれば十分な精度が得られる 14 測地線距離 測地線距離 • 分析対象範囲に近い原点を持つ座標系を使用する ◦ ローカルな範囲であれば2次元座標で計算しても誤差は無視できる ◦ デメリットとして、日本全国で距離を扱うシステムを想定した場合、距離を計算する位置によって座標系 を切り替えなければならない 玄人向け!
  9. © GO Inc. シェープファイルという謎のファイルを渡された... 17 シェープファイルとは ID 名称 階層 1

    タクシービル 15 2 松浦ビル 10 3 第一交番 1 4 市営図書館 4 形状(.shp) 属性テーブル(.dbf) Shapefileの構成要素 空間参照(.prj) ソフトウェア上で位置情報を正確&効率的に扱うための情報が詰まっている! 現代的な位置情報のデータフォーマットも含まれる要素は同じ! 空間インデックス (.sbxや.qix) ※ .shp、.dbf、.shx(前方/後方検索用インデックス)は必須
  10. © GO Inc. シェープファイルの課題 • ファイルが複数で扱いづらい • ファイルサイズは2GBまで • 属性名が10バイトまで

    • 複数の形状タイプ(Point、Line、Polygon)を扱えない ◦ 1ファイル1形状タイプしか選択できない 近年、クラウドでの利用やデータの大容量化に対応するため新しいデータフォーマットが増え てきましたので、よく使われるものを紹介します。 18 シェープファイルがつらい
  11. © GO Inc. 19 近年よく使用されるデータフォーマット1 カテゴリ フォーマット 特徴 テキスト GeoJSON

    (.geojson) • JSON形式で座標系や属性、形状を表現したフォーマット で人間も読みやすい • Webアプリでよく使われる CSV • CSVファイルに緯度経度を格納する • ポイントデータであればシンプルに表現できるのでサイ ズの小さいデータでは有用 クラウド最適化 FlatGeobuf (.fgb) • Flatbuffersベースのフォーマットで、先頭に空間イン デックスを持つ • インデックスとHTTPのRange Requestを用いた空間フィ ルタリングが可能、CDNやオブジェクトストレージに配 置するだけで今までサーバアプリが必要な空間フィルタ リングが実現できる • https://flatgeobuf.org/examples/maplibre/filtered.h tml
  12. © GO Inc. 20 近年よく使用されるデータフォーマット2 カテゴリ フォーマット 特徴 SQLite GeoPackage

    (.gpkg) • SQLite上に位置情報を格納した形式 • 複数データを格納できる • 大容量のデータを扱える Spatialite (.sqlite) • SQLiteのエクステンション • 特徴はGeoPackageと同じ RDBMS PostGIS • PostgreSQLに空間型(Geometry, Geography)と空間 関数(ST_xxx)を追加するエクステンション • 位置情報に関する演算機能が豊富で、空間検索や距離 計算など一通りの機能が揃っている
  13. © GO Inc. 位置情報を高速に検索するには空間インデックスが必要 • 1次元インデックス ◦ 標準地域メッシュ、GeoHash、 TileIndex(Morton Keyの一種)、H3

    R-Tree インデックス Wikipediaより引用 (https://en.wikipedia.org/wiki/R-tree) 標準地域メッシュの例 © OpenStreetMap contributors • 2次元以上のインデックス ◦ R-Tree, GiST
  14. © GO Inc. • 位置情報を扱うために測地系・座標系を理解するのが最初の一歩 • 距離計算は緯度経度で行ってはいけない ◦ 測地線距離を使う •

    位置情報を格納するデータフォーマットは多岐に渡る ◦ 一番普及しているのはシェープファイル ◦ 近年用途に応じて選択肢が増えている ◦ GDAL/OGRで相互変換が可能 • 高速な位置情報検索には空間インデックスが必要 ◦ 複雑な形状のデータを扱う場合は、なるべく1つのジオメトリが単純になるよう分割すると高速化ができ る つまずきポイントはこの時間では語り尽くせないくらいまだまだありますが、最初の一歩を踏み出す駆 け出し位置情報エンジニアの方のお役に立てば幸いです! すでに「こんなのあたりまえ」「あるあるw」って思われたGISエンジニアの皆様、このバックグラウ ンドは強みになりますので、一緒に位置情報エンジニアリングを盛り上げていきましょう! 29 まとめ