緯度経度を日本測地系から世界測地系に変換するには?

ショコラ
ショコラ

緯度経度を日本測地系から世界測地系に変換するには?

グーグルマップ で 日本測地系 の 緯度経度 を使うには、世界測地系 に変換する必要があります。

もっさん先輩
もっさん先輩

①緯度経度 を 日本測地系 から 世界測地系 に変換します。

// 緯度経度 を 日本測地系 から 世界測地系 に変換します。
function lonlat_convert_jp2w( $jp_lon, $jp_lat ):array
{
  $lon = $jp_lon - $jp_lat * 0.000046038 - $jp_lon * 0.000083043 + 0.0100400;
  $lat = $jp_lat - $jp_lat * 0.000106950 + $jp_lon * 0.000017464 + 0.0046017;
  return [$lon,$lat];
}

②緯度経度 を 世界測地系 から 日本測地系 に変換します。

// 緯度経度 を 世界測地系 から 日本測地系 に変換します。
function lonlat_convert_w2jp( $lon, $lat ):array
{
  $jp_lon = $lon + $lat * 0.000046038 + $lon * 0.000083043 - 0.0100400;
  $jp_lat = $lat + $lat * 0.000106950 - $lon * 0.000017464 - 0.0046017;
  return [$jp_lon,$jp_lat];
}

③緯度経度の文字列を数値に変換します。

// 緯度経度の文字列(例:E139.44.35.679N35.39.30.889)を数値に変換します。
function lonlat_convert_60to10( $lonlat60 ):array
{
  $n = sscanf($lonlat60,"E%d.%d.%fN%d.%d.%f");
  $lon = $n[0] + ($n[1] / 60) + ($n[2] / 3600);
  $lat = $n[3] + ($n[4] / 60) + ($n[5] / 3600);
  return [$lon,$lat];
}

④緯度経度の数値を文字列に変換します。

// 緯度経度の数値を文字列(例:E139.44.35.679N35.39.30.889)に変換します。
function lonlat_convert_10to60( $lon, $lat ):string
{
  $lon_h = floor($lon);
  $lon_m = floor(($lon - $lon_h) * 60);
  $lon_s = floor((($lon - $lon_h) * 60 - $lon_m) * 60 * 1000) / 1000;
  $lat_h = floor($lat);
  $lat_m = floor(($lat - $lat_h) * 60);
  $lat_s = floor((($lat - $lat_h) * 60 - $lat_m) * 60 * 1000) / 1000;
  return "E{$lon_h}.{$lon_m}.{$lon_s}N{$lat_h}.{$lat_m}.{$lat_s}";
}

⑤PostgreSQL で 測地系 を geography型 に変換します。

SELECT ST_GeographyFromText('SRID=4326;POINT({$lon} {$lat})')

⑥PostgreSQL で geography型 から 測地系 に変換します。

SELECT ST_AsText({$geography})
Scroll to Top