Google Maps APIで緯度経度を元にプロットしたマーカーの位置がずれる(測地系変換)
某社のAPIから取得した物件データの緯度経度を元にGoogle Map上にプロットするだけの簡単なお仕事……と思っていたら物件が川のど真ん中に浮かんでおります。
完全にズレテーラ。
物件データに記録されている緯度経度がおそらく「日本測地系」いうやつなんだろうなと思いつつ、一応確認しておこうかとサポートに連絡したところ「測地系、はぁ? お前何言ってんの?」ぐらいのリアクションが返ってきたので、仕方がなく適当にいろいろ試して何とかすることに。
とりあえず「EPSG:4301」から「EPSG:4326」に変換すれば上手く行くのではないかと思ってやってみました。
測地系の変換には以下のライブラリを使用します。
サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//日本測地系の宣言 Proj4js.defs['EPSG:4301'] = "+proj=longlat +ellps=bessel +towgs84=-146.336,506.832,680.254,0,0,0,0 + no_defs"; //Proj4jsエラー発生時の動作を登録 Proj4.reportError = function(msg) {console.log(msg);} //日本測地系から世界測地系への変換関数 function transformJ2W(lon,lat){ var source = new Proj4.Proj('EPSG:4301'); var dest = new Proj4.Proj('EPSG:4326'); var p = Proj4.transform(source, dest, [lon, lat]); return p; } //日本測地系から世界測地系への変換 var j2w = transformJ2W(long, lat); //変換 console.log([j2w.y, j2w.x]) //変換した値を出力 |
とりあえず、1000件ほど試してみたところ、まぁ、許容範囲ではないかというところまでズレが直ったので良しとしました。