この記事について
ドキュメント( http://proj4js.org/ ) に書いてある通りに動かしたメモです。
インスコ
Node でもブラウザでも動くので好きなの選べ!
$ npm install proj4
$ bower install proj4
$ jam install proj4
$ component install proj4js/proj4js
今回は Node の REPL で動かして確認します。
$ npm install proj4
$ node
> var proj4 = require("proj4");
undefined
座標を変換する
変換関数の I/F は以下。
proj4(fromProjection[, toProjection, coordinates])
第1引数の空間参照系から、第2引数の空間参照系に変換する。第3引数には変換対象の座標を指定。
世界測地系緯度経度座標(WGS84, EPSG:4326)から日本測地系緯度経度座標(Tokyo, EPSG:4301)に変換します。
> var firstProjection = "+proj=longlat +datum=WGS84 +no_defs";
undefined
> var secondProjection = "+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs";
undefined
> proj4(firstProjection, secondProjection, {x:139.74981563, y:35.64160487});
{ x: 139.75304670250136, y: 35.63836153195859 }
座標は {x: x, y: y}
の形式以外にも配列で [x, y]
で指定可能。指定した形式と同じ形で返ってくる。
> proj4(firstProjection, secondProjection, [139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
引数の空間参照系を1つ省略した場合は、 WGS84 からの変換とみなします。
> proj4(secondProjection, [139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
座標を省略した場合は、 forward()
と inverse()
の2メソッドを持つオブジェクトが返されます。
> proj4(firstProjection, secondProjection).forward([139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
> proj4(secondProjection, firstProjection).inverse([139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
空間参照系を名前付きで定義する
defs()
メソッドで定義できます。
> proj4.defs("EPSG:4326","+proj=longlat +datum=WGS84 +no_defs");
undefined
> proj4.defs("EPSG:4301","+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs");
undefined
> proj4("EPSG:4326", "EPSG:4301", [139.74981563, 35.64160487]);
[ 139.75304670250136, 35.63836153195859 ]
定義済み空間参照系
-
EPSG:4326
(エイリアスでWGS84
) EPSG:4269
-
EPSG:3857
(エイリアスでEPSG:3785
,GOOGLE
,EPSG:900913
,EPSG:102113
)
また defs()
の第2引数を省略すれば定義済みの情報も確認できます。
> proj4.defs('EPSG:4326')
{ projName: 'longlat',
datumCode: 'WGS84',
no_defs: true,
k0: 1,
axis: 'enu' }
defs()
の第2引数に渡す文字列を調べる
http://epsg.io/ から検索することができる。 EPSG:4612
が欲しければ 4612
とかで検索すれば大体ヒットします。
丁寧に Proj4js 用の Export コードも用意されているので、そのままコピーすれば利用可能。
proj4.defs("EPSG:4612","+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs");