0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【GIS】PROJが利用しているEPSGの情報

Last updated at Posted at 2021-05-24

はじめに

GIS関係のプログラミングでは、EPSGコードを使っていると思います。
測地系の変換には、pythonだと pyprojが便利であることを前にメモしました。

今回、pyproj のもとである PROJ のライブラリが対応しているEPSGを調べてみました。このメモのポイントは、

  • PROJは内部に持っている(インストールされた)proj.db に EPSGの情報を保持している
  • proj コマンドでEPSGの情報を取得できる
  • jq を使うと json で出力されたテキストの整形に便利

です。

PROJでEPSGの情報を表示

インストールされている PROJについて

まずPROJがインストールされていることを前提にします。

$ projinfo
Rel. 8.1.0, July 1st, 2021

私の場合、インストールするときに/usr/local/lib を指定してしまった(configure するときのprefixに指定)ので、ここにあります。インストールの方法によっては他にあるはずです。

$ ls /usr/local/lib/libproj.*
/usr/local/lib/libproj.a   /usr/local/lib/libproj.so     /usr/local/lib/libproj.so.22.0.0
/usr/local/lib/libproj.la  /usr/local/lib/libproj.so.22

また、PROJがデフォルトで参照する設定ファイルは、ここにあるようです。

$ ls /usr/local/share/proj/
CH    ITRF2000  ITRF2014                       nad.lst  nad83        proj.db   projjson.schema.json       world
GL27  ITRF2008  deformation_model.schema.json  nad27    other.extra  proj.ini  triangulation.schema.json

EPSG リストの取得

proj.db からEPSGを取り出します。 (sqlite3のコマンド、よくわからないが。。^^;)

sqlite3 /usr/local/share/proj/proj.db "SELECT code FROM projected_crs WHERE auth_name = 'EPSG';"

EPSGの情報

projinfo で出力できます。

$ projinfo EPSG:4326
PROJ.4 string:
+proj=longlat +datum=WGS84 +no_defs +type=crs

WKT2:2019 string:
GEOGCRS["WGS 84",
    ENSEMBLE["World Geodetic System 1984 ensemble",
        MEMBER["World Geodetic System 1984 (Transit)"],
        MEMBER["World Geodetic System 1984 (G730)"],
        MEMBER["World Geodetic System 1984 (G873)"],
        MEMBER["World Geodetic System 1984 (G1150)"],
        MEMBER["World Geodetic System 1984 (G1674)"],
        MEMBER["World Geodetic System 1984 (G1762)"],
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]],
        ENSEMBLEACCURACY[2.0]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["geodetic latitude (Lat)",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["geodetic longitude (Lon)",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    USAGE[
        SCOPE["Horizontal component of 3D system."],
        AREA["World."],
        BBOX[-90,-180,90,180]],
    ID["EPSG",4326]]

WKT(well-known text) はテキストで図形やGISの情報を表すためのテキストでのデータ形式のようです。

projinfo では-o で出力形式をjson に指定できます。最初にフォーマット名を出力しないように -q をつけると、標準出力でJSONの文字列が得られます。

$ projinfo EPSG:4326 -o PROJJSON -q
{
  "$schema": "https://proj.org/schemas/v0.2/projjson.schema.json",
  "type": "GeographicCRS",
  "name": "WGS 84",
  "datum_ensemble": {
    "name": "World Geodetic System 1984 ensemble",
...

ここまでの話は実は、以下に書いてある内容です。

jqによるJSONの整形

ここでJSONのデータから所望のものをCSVで出力することを考えます。コマンドラインで便利なツールにjqというのがありました。 sudo apt -y install jq で問題なくインストールできました。知らなかったなぁ、こんな便利なツール。

ここでは、いくつかの要素を出力してみます。

$ projinfo EPSG:4326 -o PROJJSON -q | jq --raw-output '[.name,.type,.id.authority,.id.code,.area] | @csv'
"WGS 84","GeographicCRS","EPSG",4326,"World."

その他 proj 情報源

  • PROJのサイトにいくと、DownloadのページにPDF Manual (proj.pdf) があります。

  • 面積の計算ができるらしい。4D Transformation with Time も気になる。

  • 自分はインストールで make install するときに以下のように言われた。

Libraries have been installed in:
/usr/local/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:

  • add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
    during execution
  • add LIBDIR to the 'LD_RUN_PATH' environment variable
    during linking
  • use the '-Wl,-rpath -Wl,LIBDIR' linker flag
  • have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

なので、LD_LIBRARY_PATH に/usr/local/lib を追加しました。

EPSGについて

EPSGの本家を探していたら、GeoRopository というのが見つかりました。

ここからEPSGに関するDBをダウンロードできます。
また、おそらく最新のDBの情報については、GeoRepository API というWEB APIで情報を取得できます。

うーん、どうやって使うかな。とにかくしっかり定義とかこだわって、管理していそう。

まとめ

PROJでEPSGをどのように参照しているのか調べ、proj.db の存在、projinfo の使い方を勉強しました。TODOは今のところ思いつかないが、奥が深そうだ。EPSGの全体像、だれかわかりやすく解説してくれないかな。。。

ところでPROJをキーワードに書こうとしたら、候補で出てこなかった。いままでだれも書いていないのか?

(2021/05/25)

関連した自分の投稿

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?