1.softbank携帯のGPSの概要
・地図ページを表示する前にGPS測位を行わないといけない
・世界測地系(WGS84)を利用して測位
・取得できる経度/緯度は、dms方式(60進法:±ddd.mm.ss.sss)
【dms:lat例】
N38.22.26.898 (北緯38度22分26.898秒)
・地図ページのURLにGET/POST方式で任意の変数を送ることができる
【dms:lon例】
E126.35.12.268 (東経126度35分12.268秒)
2.地図ページへのリンク - GET方式
リンク先は端末内の「location:auto」としておく。
GPS即位後に「location:auto」からサーバー上の「gpsmap.cgi」へ現在地情報が送信される
<a href="location:auto?url=http://mydom.com/gpsmap.cgi">現在地表示</a>
※「location:auto」のほかに「location:gps」「location:cell」なども存在する
※GPS機能がサポートされない端末では、簡易位置情報が送信される
※gpsmap.cgiには、任意の変数を送れない
3.地図ページへのリンク - POST方式
<form>タグのPOST先は「location:auto」とする。
<form method="post" action="location:auto">
<input type="hidden" name="url" value="http://mydom.com/gpsmap.cgi">
<input type="submit" value="現在地表示">
</form>
※「location:auto(簡易位置/GPS自動判別)」のほかに「location:gps(GPSのみ)」「location:cell(簡易位置情報のみ)」なども存在するが
※GPS機能がサポートされない端末では、簡易位置情報が送信される
※gpsmap.cgiには、任意の変数を送れない
4.地図ページにおいて経度/緯度を取得
PerlCGIなどで引数を受け取るが、docomo端末やau端末とは
方式がちょっと異なる
##フォームの取得
my $query = CGI->new;
*in = $query->Vars();
↓フォームを取得した結果↓
$in{'pos'} ←緯度/経度がセットで格納される
【例】N38.22.26.898E126.35.12.268
なので、下記のように
$pos を、 $idoDMS と $keidoDMS に分解する必要がある
【分解式】
$pos=$in{'pos'}
if ($pos =~ /E/) { ($idoDMS,$keidoDMS)=split(/E/,$pos); }
if ($pos =~ /W/) { ($idoDMS,$keidoDMS)=split(/W/,$pos); }
$idoDMS =~ s/N//g; $idoDMS =~ s/S//g;
6.60進数のdms方式を10進数に変換
下記は、$idoDMS を 60進から10進に変換する例
($idoD,$idoM,$idoS1,$idoS2)=split(/\./,$idoDMS);
$idoM=$idoM/60; #度を60で割る
$idoS=$idoS1.'.'.$gidoS2;
$idoS=$idoS/3600; #秒を60*60で割る
$ido=$idoD+$idoM+$idoS;
6.GoogleMapの画像を呼出し
小数点6桁の緯度/経度に1000000を乗した整数を送る必要がある
GoogleMapでは、WGS84系の測地系が使用されるので注意
【GoogleMapの呼出し例】
http://maps.google.com/mapdata?latitude_e6=26215909&longitude_e6=127667398&zm=300&w=200&h=200&cc=US&min_priority=1&Point=b&Point.latitude_e6=26215909&Point.longitude_e6=127667398&Point.iconid=16&Point=e
【上記URLに送る変数】
latitude_e6 地図の緯度(小数点6桁を整数化したもの)
longitude_e6 地図の経度(小数点6桁を整数化したもの)
Point.latitude_e6 マーカー緯度(小数点6桁を整数化したもの)
Point.longitude_e6 マーカー経度(小数点6桁を整数化したもの)
zm 縮尺
w 地図画像の幅(px)
h 地図画像の高さ(px)
【小数点6桁を整数化する変換式】
$in{'lat'}に、38.32659863261561が格納されている場合
$lat=int($in{'lat'}*1000000);
として38326598の整数値を得る
上記方法は現在利用できなくなりました(2010/10/5)
▼新しい方法はこちら▼
「GoogleMapの固定画像を切り出す新しい方法」
参考ページ
http://www.yaskey.cside.tv/mapserver/note/gps.html#GPS_SoftBank
http://symple.jp/26.html
0 件のコメント:
コメントを投稿