AD-EDITって?


ブラウザからブログ感覚でホームページを編集できるソフトです。
これらの類のソフトを総称してCMS(コンテンツマネジメントシステム)とも呼びます。

>> ダウンロードはこちらから <<

 

2010年4月30日金曜日

softbank携帯のGPS機能を使ったGoogleMapの表示

携帯用GoogleMapページに現在地表示機能を追加したときの技術的メモ

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の画像を呼出し



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 件のコメント:

コメントを投稿