mcpField
P
postgis

postgis

github.com/postgisデータ・データベース2.3k249 回インストール5 日前に更新
リポジトリ

postgis について

PostGISで空間データを扱う開発者向けのスキルです。空間SQL、ジオメトリ処理、座標系の選択、クエリの最適化に関する指針をまとめています。

主な機能

  1. 01PostGIS関数の命名規則
  2. 02geometry・geography列の指針
  3. 03投影法とSRIDの選択指針
  4. 04空間クエリとインデックスの助言
  5. 05ラスターデータの扱い方

活用シーン

  1. 01空間SQLクエリの作成
  2. 02地図出力用の投影法選択
  3. 03PostGIS拡張の動作調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/postgis/postgis --skill postgis

インストール後、Claude Code で/postgisを入力して読み込まれたか確認します。

詳細

命名

  • PostGIS 関数は、マニュアルに記載されている表記を使用してください(st_segmentize → ST_Segmentize)。
  • ジオメトリ列は geom、ジオグラフィ列は geog と呼んでください。

チェック

  • 拡張機能の動作をデバッグするときは、select postgis_full_version(); を確認して、インストールされている PostGIS、GEOS、PROJ、GDAL、SFCGAL のバージョンを確認してください。

ラスター

  • ファイルシステム上で GDAL を使用しないでください。データベースにデータをインポートし、その中で処理してください。

注意点

  • 指示がない限り、ジオメトリの typmod(geometry(multilinestring, 4326) など)は使用しないでください。代わりに、プレーンな geometry または geography を使用してください。これにより、ST_Multi による煩雑さや ST_SetSRID によるエラーを避けられます。
  • ST_UnaryUnion(ST_Collect(geom)) は、単に ST_Union(geom) と同じです。
  • 無効なジオメトリを修復する必要がある場合は、ST_Buffer(geom, 0) ではなく ST_MakeValid(geom) を使用してください。ただし、まずは上流で無効なジオメトリの発生源を修正することを優先してください。
  • select min(ST_Distance(..)) の代わりに、select ST_Distance() ... order by a <-> b limit 1 を使用して、KNN GiST を有効にしてください。
  • order by ST_Distance(c.geog, t.geog) の代わりに、order by c.geog <-> t.geog を使用してください。
  • ST_UnaryUnion を使用する必要がある場合は、何かが間違っている兆候です。
  • ST_MakeValid が必要になるのは、前の手順で何かが間違っている兆候です。
  • ST_SetSRID を呼び出す際は、特に注意してください。まず、入力データの実際の投影法を確認してください。ソース形式が対応している場合は、入力時に SRID を設定することを優先してください。たとえば、ST_GeomFromGeoJSON、SRID=4326;POINT(1 2) のような EWKT、または EWKB を使用します。再投影が必要な場合は、代わりに ST_Transform を使用してください。
  • 点とポリゴンの関係を調べる場合は、他のトポロジ述語より ST_Intersects を優先してください。
  • ラスターまたはグリッドをたどって複雑なジオメトリを生成する場合は、ST_Simplify(geom, 0) が適切なことがあります。
  • サイズが予測可能な近傍を生成するには、k = 2 とし、max_radius に距離を設定して ST_ClusterKMeans を使用してください。
  • SRID を保持するには、バイナリ表現に ST_AsWKB ではなく ST_AsEWKB を使用してください。
  • 投影法の選択: 入力または出力が経度と緯度で、座標値をユーザーに表示する場合は SRID=4326(2D 経緯度)を使用してください。 出力をウェブマップに表示する場合、ST_AsMVT を使用する場合、または短距離の 2D KNN リクエストを実行する場合は SRID=3857(2D 球面メルカトル)を使用してください。 内部計算、見通し線、クラスタリング、日付変更線をまたぐ平均化を行う場合は SRID=4978(3D XYZ)を使用してください。3D 対応の操作のみを使用し、この CRS のデータに対して ST_Transform を呼び出す前に、2D CRS データに ST_Force3DZ を適用してください。
  • ST_Hexagon/ST_HexagonGrid の代わりに、h3 拡張機能を使用してください。
  • データをバイナリ形式でダンプし、gzip 圧縮して移動することがわかっている場合は、精度が既知であれば ST_QuantizeCoordinates の使用を検討してください。

コメント