😐

PostGIS 3の気になったところのメモ

2020/10/27に公開

現時点でもメモです

この記事には大した情報はありません。今後増えるかも知れませんし、そのままかも知れません。メモレベルを超えたと判断すると、この節は削除されます。
…10年後にこの節が残ってたりしてね☆

はじめに

2019年10月20日にPostGIS 3.0.0がリリースされました。

まだ全く触ってないのですが、マニュアルを見て気になったところをメモしていきます。

ラスタ機能の引き離し

PostGIS 2.xではPostGISを有効にするとラスタ機能も使用できていました(このためGDALは原則必要とされていました)が、3.xではラスタ機能はpostgis_rasterエクステンションになり、postgisエクステンションから外れました。

個人的な感想として、いくつかのデータベースを作っていると、ラスタを使うデータベースとベクタしか扱わないデータベースとがはっきり分かれるので、特に困ることは無いと思います。

ST_AsGeoJSON(record)が登場

10月23日作成

レコードでGeoJSONを作ってくれるようになり、"properties"要素も含むようになりました。

db=# SELECT ST_AsGeoJSON(g_pref.*) FROM g_pref limit 1;
                                                                             st_asgeojson                               
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 {"type": "Feature", "geometry": {"type":"Point","coordinates":[142.847299479,43.46928589]}, "properties": {"gid": 1, "pcode": 1, "pname": "北海道", "lastat": null}}
(1)

折り返しとインデントを付けると次のようになります。

 {
  "type": "Feature",
  "geometry": {
    "type":"Point",
    "coordinates":[142.847299479,43.46928589]
  },
  "properties": {
    "gid": 1,
    "pcode": 1,
    "pname": "北海道",
    "lastat": null
  }
}

なお、coordinatesのaxis orderは、経度、緯度の順です。https://tools.ietf.org/html/rfc7946#section-3.1.1 参照。

ST_AsGeoJSONのCRSのデフォルトがWGS84に

10月23日作成

GeoJSONの仕様が、いつからか忘れたけど、WGS84がデフォルトになっています。
SRS4326の場合には"crs"要素が出現せず、4326以外では出現するようになりました。

db=# SELECT ST_AsGeoJSON(q.*) FROM (SELECT gid, ST_Transform(c_geom, 3857) AS c_geom FROM g_pref limit 1) AS q;
                                                                               st_asgeojson                             
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 {"type": "Feature", "geometry": {"type":"Point","crs":{"type":"name","properties":{"name":"EPSG:3857"}},"coordinates":[15901688.6,5383676.93]}, "properties": {"gid": 1}}
(1 行)

SFCGALはエクステンションだけで使用

(2019年10月25日更新)

ジオメトリエンジンとして、1.xからGEOSを使っていましたが、2.xからは一部にSFCGALを使えるようになりました。

SFCGALが独自に持つ機能を使う関数については、postgis_sfcgalエクステンションの導入によって、その関数が使用可能になるだけなので、普通のエクステンションの話ですので特に注意すべき話ではありません。

それとは別に、2.xでは、GEOSとSFCGALの両方が持つ機能を使う関数があり、両方に対応させていた点です。この場合に、GEOSとSFCGALのどちらを使うかは、GUCのpostgis.backendで決めていました。

3.xでは、GEOSとSFCGALの両方が持つ機能を使う関数は、SFCGALを使わないようにしています。さらに、postgis.backendがなくなりました (postgis/lwgeom_backend_api.cが消えています)。

もちろん、postgis_sfcgalエクステンションとは別の話でして、こちらは3.xでも有効です。

気になったこと

並列処理

PostgreSQL 12 が必須ですが、どうも多くの関数で、特に意識せずに並列処理が可能になるようです。

Proj.6対応

Proj.6に対応しました。

座標変換パラメータの探索順序が変わりました。SPATIAL_REF_SYSでなく、Proj.6データベースが優先されるようになったそうです。これにより、Proj.6に与えるシフトパラメータがそのまま使えるようになりました。その次にWKT、最後にproj4textのパラメータ指定、の順になるようです。

おわりに

いかがだったでしょうか。

先に「最初にメモレベルだって言いましたよね?」と言っといてやる。

本記事のライセンス

クリエイティブ・コモンズ・ライセンス
この記事は クリエイティブ・コモンズ 表示 4.0 国際 ライセンス の下に提供されています。

Discussion