経度・緯度の表し方と変換

| コメント(0) | トラックバック(0)

まず知っておかなければならないことが、
経度、緯度の表し方がいろいろとあるということです。

まず大きな違いが、日本測地系と世界測地系です。
同じ地点でも、この違いにより世界測地系の方が
南東におよそ450mずれた地点を表すことになります。

【参考】東京都庁の経度、緯度
日本測地系・・経度:139.69487、緯度:35.68627
世界測地系・・経度:139.69167、緯度:35.68949

それでは、それぞれの値を変換するにはどうすればいいでしょうか。
次のような式があります。変数の定義は次の通りです。
(ln:入力経度、la:入力緯度、lng:変換後経度、lat:変換後緯度)

日本→世界

lng = ln - la * 0.000046038 - ln * 0.000083043 + 0.010040;

lat = la - la * 0.00010695 + ln * 0.000017464 + 0.0046017;

世界→日本
lng = ln + la * 0.000046047 + ln * 0.000083049 - 0.010041;

lat = la + la * 0.00010696 - ln * 0.000017467 - 0.0046020;


次の違いが度表示、度分秒表示などによる違いです。
(時間の計算で「12分15秒→12.25分」などと同じような変換です)

【参考】東京都庁の経度、緯度
日本測地系(度)・・経度:139.69487、緯度:35.68627
日本測地系(度分秒)・・経度:139.41.41.53、緯度:35.41.10.57

JavaScriptでの変換プログラム例です。
Perl、PHPで使用したい場合は適宜変更してください。

度→度分秒(ddd.mm.ss.ss)
(innum:入力数値(ddd.ddd形式)、outnum:変換後数値)

EH = parseInt(innum);

EM = parseInt((innum-EH)*60);

ES = (innum-EH-(EM/60))*3600;

ESS = (Math.round(ES*10)/10);

if(EM<10){EM = "0"+EM;}

if(ESS<10){ESS = "0"+ESS;}

if((ESS+"").indexOf(".") == -1){ESS = ESS+".0";}

outnum = EH+'.'+EM+'.'+ESS;

度分秒(ddd.mm.ss.ss)→度
(innum:入力数値(ddd.nn.ss.ss形式)、outnum:変換後数値)

tmp_in = innum.split(".");

outnum = parseInt(tmp_in[0])+(((tmp_in[1]*60+parseInt(tmp_in[2])+tmp_in[3]/10)*1000)/3600000);

困ったことに現在の対応状況は
・Google Maps API 【世界測地系】 【度表示】
・mapionなど国内主要地図サイト 【日本測地系】 【度分秒表示】
・AUGPSケータイ 【どちらも可(datum、unit変数で指定)】
と、バラバラですので変換して統一する必要があります。

ということで、当サイトは、Google Maps API などで表示するデータも
すべて日本測地系、度分秒表示に変換して表示しています。

トラックバック(0)

トラックバックURL: http://blog.gpso.info/mt_mgr/mt-tb.cgi/3

コメントする

このブログ記事について

このページは、nnnが2006年8月 3日 23:08に書いたブログ記事です。

ひとつ前のブログ記事は「登録に関して」です。

次のブログ記事は「Google Maps で全国オービスマップ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。