LoginSignup
6
9

More than 5 years have passed since last update.

PostGISにEPSGコードを追加する

Last updated at Posted at 2015-08-19

状況・背景

  • PostGISで利用できる空間参照系は、spatial_ref_sysテーブルに登録されているもののみ
  • マニアックな空間参照系(今回の例では、EPSG:55005)は定義されていない
  • sparial_ref_sys登録には、投影情報のproj記法とwkt記法の両方が必要
  • projまたはwktのどちらかだけが分かっている(今回の例では、proj記法だけが公開されている)

環境

CentOS 7.1
PostgreSQL 9.4
PostGIS 2.94

projからwktを求める

GDALのライブラリを利用する。下記参考サイトにproj/wkt双方向の変換が可能なpythonスクリプトがあったので拝借。
参考サイト:Converting WKT projection info to Proj4 (and back)

pythonがインストールされていることを確認し、


$ python -V
Python 2.7.5

yumでgdalをインストール。


$ sudo yum install -y gdal gdal-devel gdal-python

あとは、参考サイトに掲載されたスクリプト(↓↓↓)を適当なところに置き、

proj2wkt.py
#!/usr/bin/env python

import os
import sys
import string
import osgeo.osr

if (len(sys.argv) <> 2):
        print 'Usage: proj2wkt.py [Proj4 Projection Text]'
else:
        srs = osgeo.osr.SpatialReference()
        srs.ImportFromProj4(sys.argv[1])
        print srs.ExportToWkt()

パラメータにproj記法の文字列を指定して実行


$ ./proj2wkt.py "+proj=eqc +a=6377397.155 +b=6356079 +lat_ts=35.43094469 +lon_0=0 +lat_0=0 +k=1.0 +x_0=0 +y_0=0 +units=m no_defs"
PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6377397.155,299.1533345638937]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Equirectangular"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["standard_parallel_1",35.43094469],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1]]

PostGISに登録

上で求めたwktを、projと合わせてspatial_ref_sysにインポート。


INSERT INTO spatial_ref_sys(srid, auth_name, auth_srid, srtext, proj4text) VALUES (55005, 'EPSG', 55005, 'PROJCS["unnamed",GEOGCS["unnamed ellipse",DATUM["unknown",SPHEROID["unnamed",6377397.155,299.1533345638937]],PRIMEM["Greenwich",0],UNIT["degree",0.0174532925199433]],PROJECTION["Equirectangular"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",0],PARAMETER["standard_parallel_1",35.43094469],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1]]', '+proj=eqc +a=6377397.155 +b=6356079 +lat_ts=35.43094469 +lon_0=0 +lat_0=0 +k=1.0 +x_0=0 +y_0=0 +units=m no_defs');

補足

今回のケースではprojからwktを求めて登録したが、逆のパターン(wktが分かっているけどprojが不明なケース)にも対応可能。その際は以下のスクリプトを利用する。

wkt2proj.py
#!/usr/bin/env python

import os
import sys
import string
import osgeo.osr

if (len(sys.argv) <> 2):
        print 'Usage: wkt2proj.py [WKT Projection Text]'
else:
        srs = osgeo.osr.SpatialReference()
        srs.ImportFromWkt(sys.argv[1])
        print srs.ExportToProj4()

以上

6
9
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
6
9