postgis について
PostGISで空間データを扱う開発者向けのスキルです。空間SQL、ジオメトリ処理、座標系の選択、クエリの最適化に関する指針をまとめています。
主な機能
- 01PostGIS関数の命名規則
- 02geometry・geography列の指針
- 03投影法とSRIDの選択指針
- 04空間クエリとインデックスの助言
- 05ラスターデータの扱い方
活用シーン
- 01空間SQLクエリの作成
- 02地図出力用の投影法選択
- 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の使用を検討してください。
コメント
Markdown 対応