名前

ST_AsGeoJSON — GeoJSON 形式のジオメトリーまたは地物を返します。

概要

text ST_AsGeoJSON(record feature, text geom_column="", integer maxdecimaldigits=9, boolean pretty_bool=false, text id_column='');

text ST_AsGeoJSON(geometry geom, integer maxdecimaldigits=9, integer options=8);

text ST_AsGeoJSON(geography geog, integer maxdecimaldigits=9, integer options=0);

説明

ジオメトリーについては GeoJSON の"geometry"オブジェクトとして返し、行についてGeoJSON の"feature"オブジェクトとして返します。

GeoJSON のジオメトリーと地物の表現は、GeoJSON specifications RFC 7946に準拠しますが、入力ジオメトリの CRS がが WGS84経度緯度 (EPSG:4326, urn:ogc:def:crs:OGC::CRS84) 以外の時は準拠しません。GeoJSONの geometry オブジェクトに短い CRS SRID 識別子がデフォルトで追加されます。2次元と3次元のジオメトリーの両方に対応します。GeoJSON は SFS 1.1ジオメトリータイプにのみ対応します (たとえば曲線には対応していません)。

geom_columnパラメータは複数のジオメトリーカラムを区別するために使われます。省略すると、レコードの最初のジオメトリーカラムに決定されます。逆にパラメータを渡すとカラムの型の調査が省かれます。

maxdecimaldigits引数は、出力で使用される小数部の桁数の最大値を減らすために使われます (デフォルトでは 9)。EPSG:4326を使っていて、表示専用でジオメトリーを出力する場合には、maxdecimaldigits=6が、多くの地図で良い選択となります。

[警告]

任意引数maxdecimaldigitsを使用することで、出力ジオメトリが不正になる可能性があります。これを回避するには、前もってST_ReducePrecisionに適切なグリッドサイズを与えてこれを使用します。

options引数は、GeoJSON 出力で BBOX または CRS を追加するために使われます。次のようにします。

  • 0: オプションなし

  • 1: GeoJSON BBOX

  • 2: GeoJSON Short CRS (たとえば EPSG:4326)

  • 4: GeoJSON Long CRS (たとえば urn:ogc:def:crs:EPSG:4326)

  • 8: EPSG:4326でない場合に GeoJSON Short CRS (デフォルト)

id_columnパラメータは、返される GeoJSON の地物の"id"メンバの値設定に使われます。GeoJSON RFC によると、これは、主キーのように地物が共通して使用する識別子を持つときは常に*使うべき*とされています。指定しない場合には、生成される地物に"id"メンバが入りません。ジオメトリー以外のカラムは、潜在的なキーも含めて、地物の"properties"メンバ内に入ります。

入力レコードのカラム名に重複があるとき、"properties"オブジェクトは重複キーを持つことになります。この場合にはST_AsGeoJSONは警告を出します。 PostgreSQL のjsonbは重複キーがあると最後の値だけをキープするためです。

GeoJSON 仕様では右手系を使っていて、このポリゴンの向きが前提のクライアントもあります。これはST_ForcePolygonCCWを使うことでこの向きを確実にできます。また GeoJSON 仕様ではジオメトリーは WGS84座標系 (SRID=4326) である必要があります。必要ならST_Transformを使うことでジオメトリーを WGS84に座標変換できます。ST_Transform(geom, 4326 )といったように使います。

GeoJSON はgeojson.iogeojsonlint.comで、オンラインでのテストと表示が可能です。また、Web マッピングフレームワークで広く対応されています。

Availability: 1.3.4

Availability: 1.5.0 ジオグラフィが導入されました。

Changed: 2.0.0 デフォルト引数と名前付き引数に対応しました。

Changed: 3.0.0 レコードの入力に対応しました

Changed: 3.0.0 EPSG:4326以外の場合の SRID 出力。

Changed: 3.5.0 地物の id を含むカラムを指定できるようになりました

Changed: 3.7.0 キー重複に関する警告の追加

この関数は3次元に対応し、Z値を削除しません。

FeatureCollection の生成:

コード
SELECT json_build_object(
    'type', 'FeatureCollection',
    'features', json_agg(ST_AsGeoJSON(t.*, id_column =
> 'id')::json)
    )
FROM ( VALUES (1, 'one', 'POINT(1 1)'::geometry),
              (2, 'two', 'POINT(2 2)'),
              (3, 'three', 'POINT(3 3)')
     ) as t(id, name, geom);
出力
{"type" : "FeatureCollection", "features" : [{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[2,2]}, "id": 2, "properties": {"name": "two"}}, {"type": "Feature", "geometry": {"type":"Point","coordinates":[3,3]}, "id": 3, "properties": {"name": "three"}}]}

Feature の生成:

コード
SELECT ST_AsGeoJSON(t.*, id_column =
> 'id')
FROM (VALUES (1, 'one', 'POINT(1 1)'::geometry)) AS t(id, name, geom);
出力
{"type": "Feature", "geometry": {"type":"Point","coordinates":[1,1]}, "id": 1, "properties": {"name": "one"}}

データを GeoJSON 使用に準拠した WGS84経度緯度に変換するのを忘れないで下さい。

コード
SELECT ST_AsGeoJSON(ST_Transform(geom, 4326)) FROM fe_edges LIMIT 1;
出力
{"type":"MultiLineString","coordinates":[[[-89.734634999999997,31.492072000000000],
[-89.734955999999997,31.492237999999997]]]}

3次元ジオメトリーへの対応:

コード
SELECT ST_AsGeoJSON('LINESTRING(1 2 3,4 5 6)');
出力
{"type":"LineString","coordinates":[[1,2,3],[4,5,6]]}

Options 引数は、GeoJSON 出力で BBOX または CRS を追加するために使われます:

コード
SELECT ST_AsGeoJSON(ST_SetSRID('POINT(1 1)'::geometry, 4326), 9, 4|1);
出力
{"type":"Point","crs":{"type":"name","properties":{"name":"urn:ogc:def:crs:EPSG::4326"}},"bbox":[1.000000000,1.000000000,1.000000000,1.000000000],"coordinates":[1,1]}