ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 10914


Ignore:
Timestamp:
Mar 1, 2009, 11:23:07 PM (11 years ago)
Author:
toraneko
Message:

ソフトバンクの変換ミス修正、まだ使ってないけど測地系変換のライブラリ作成

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/branches/work/toraneko/enhancement_map/public_html/mobilemap_api.php

    r10913 r10914  
    113113            return array($lat, $lon);
    114114        }
     115        if (!is_null($requests['pos'])) {
     116            list($lat, $lon) = convertPos($requests['pos']);
     117            return array($lat, $lon);
     118        }
    115119    }
    116     // Softbank
     120    // other
    117121    // Docomo,Softbank(3GC),Willcom
    118122    if (!is_null($requests['pos'])) {
    119         $pattern = '/^([NS][0-9.]+)([EW][0-9.]+)$/';
    120         preg_match($pattern, $requests['pos'], $matches);
    121         $lat = convertLocation($matches[1]);
    122         $lon = convertLocation($matches[2]);
     123        list($lat, $lon) = convertPos($requests['pos']);
    123124        return array($lat, $lon);
    124125    }
     
    127128}
    128129
    129 /* 取得した位置情報文字列
    130  * 百分率表記(googleMapで使える形式)に変換
     130/* 取得した位置情報文字列(度分秒方式)
     131 * 度表示(googleMapで使える形式)に変換
    131132 */
    132133function convertLocation($string)
     
    138139}
    139140
    140 function convert_old()
     141/* pos=N**.**.**.**E**.**.**.** タイプの文字列
     142 * S,Wはマイナスで返す
     143 */
     144function convertPos($string)
    141145{
    142     // 東西南北判断
    143     list($lat, $lat_code) = convertNSWE($lat);
    144     list($lon, $lon_code) = convertNSWE($lon);
     146    $pattern = '/^([NS])([0-9.]+)([EW])([0-9.]+)$/';
     147    preg_match($pattern, $string, $matches);
     148    // Nなら+ Sなら-に変換
     149    if ($matches[1] == 'N') {
     150        $lat = $matches[2];
     151    } else {
     152        $lat = '-'.$matches[2];
     153    }
     154    // Eなら+ Wなら-に変換
     155    if ($matches[3] == 'E') {
     156        $lon = $matches[4];
     157    } else {
     158        $lon = '-'.$matches[4];
     159    }
     160    $lat = convertLocation($lat);
     161    $lon = convertLocation($lon);
    145162
    146     // ミリ秒形式に変換
    147     $lat = convertDeg($lat);
    148     $lon = convertDeg($lon);
    149 
    150     // 世界測地系に変換
    151     $lat = $lat - $lat * 0.000046038 - $lon * 0.000083043 + 0.010040;
    152     $lon = $lon - $lat * 0.00010695 + $lat * 0.000017464 + 0.0046017;
    153 
    154     return array($lat * $lat_code, $lon * $lon_code);
    155 
     163    return array($lat, $lon);
    156164}
    157165
    158 /* 東西南北の判断(符号)と緯度経度の数値のみを返す */
    159 function convertNSWE($value) {
    160     $pattern = '/^((%2B)|[+-NSEW])([0-9.]+)$/';
    161     preg_match($pattern, $value, $matches);
    162 
    163     if ($matches[1] == '-' || $matches[1] == 'S' || $matches[1] == 'W') {
    164         $code = -1;
    165     } else {
    166         $code = 1;
    167     }
    168 
    169     return array($matches[3], $code);
     166/* 日本測地系→世界測地系への変換
     167 * 引数は度表示
     168 */
     169function convert_wgs84($lat, $lon)
     170{
     171    $longitude = $lon - $lat * 0.000046038 - $lon * 0.000083043 + 0.010040;
     172    $latitude  = $lat - $lat * 0.00010695 + $lon * 0.000017464 + 0.0046017;
     173    return array($longitude);
    170174}
    171175
    172 /* ミリ秒形式に変換 */
    173 function convertDeg($value) {
    174     $arr = explode('.', $value);
    175     return trim($arr[0]) + trim($arr[1]) / 60 + (trim($arr[2]) + trim($arr[3]) / 1000) / 3600;
     176/* 日本測地系→世界測地系への変換
     177 * 引数は度表示
     178 */
     179function convert_tokyo97($lat, $lon)
     180{
     181    $longitude = $lon + $lat * 0.000046047 + $lon * 0.000083049 + 0.010041;
     182    $latitude  = $lat + $lat * 0.00010696 - $lon * 0.000017467 - 0.0046020;
     183    return array($longitude);
    176184}
    177185
Note: See TracChangeset for help on using the changeset viewer.