ショコラ
緯度経度を日本測地系から世界測地系に変換するには?
グーグルマップ で 日本測地系 の 緯度経度 を使うには、世界測地系 に変換する必要があります。
もっさん先輩
①緯度経度 を 日本測地系 から 世界測地系 に変換します。
// 緯度経度 を 日本測地系 から 世界測地系 に変換します。
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})