| Yaskey |
GPS携帯 位置情報 システム |
update:2006/10/27 |
▼ GPSマップ対応のMapScriptアプリケーション ygmap の紹介とGPS関連のメモです。
ここでは、au携帯のみレポートしてますが、DoCoMo、SoftBank、WILLCOMにおけるGPS関連メモは「GPS携帯 位置情報 基礎知識」を参照下さい。
- GPSとは Global Positioning System (全地球的測位システム)の略で、米国防総省が管理する衛星からの電波を利用し、緯度、経度、高度などを数十メートルの精度で割り出し、受信者の現在地を計算するシステムです。現在は 車に取り付けられるカーナビゲーションシステムなどで利用されています。
最初、携帯で自分の位置を表示させることは、すごく難しいものだと思っていましたが、内容を確認すると、意外と簡単な仕組みであることが分かりました。ここでは、auのGPS携帯から自分の位置情報を表示させるスクリプト ygmap (PHP/MapScript)を紹介してます。
- ここで使用するソフトと携帯
- ygmap v0.1
- PHP/MapScript4.4-4.6
- ms4w 1.2.2
- 他のサーバでも使用可能です
- 携帯 au
- 参考にさせていただいたサイト
- au携帯の設定方法 / KDDI au: 技術情報 > 簡易位置情報
- GPS携帯について
- メニュー
- ygmap の作成
- アプリケーションのセッティング
- 地図ファイルの作成
- 数値地図2500 ⇒ Shapefile変換 ⇒ GPS用の座標系変換
- ygmapの表示
- パソコンからの地図表示 ⇒ GPS携帯からの地図表示
- GPS携帯 位置情報の取得
- goSVG
- goSVG(SVG) について ⇒ MapScriptでの表示方法 ⇒ 地図の表示 ⇒ CGIでの表示 ⇒ SVG出力条件
■ ygmap の作成 PHP/MapScriptベースのアプリケーション ygmap を利用して GPSMap を作成します。
- ygmap アプリケーションをダウンロードします。ygmap-0.1
- ygmap のディレクトリのファイル構成
- c:/ms4w/Apache/htdocs/ygmap/
- index.php
- ygmap.php
- sdf2500.map
- mapdata
- doro_arc.shp .... #次項で作成する尼崎市のshapefileを全てここに保存します。
- etc
- symbols35.sym
- font.txt ( デフォルトでmsgothicフォントの指定です )
- msgothic.ttc ファイルをC:/WINDOWS/Fonts フォルダからコピーしてここへ保管して下さい
- マップファイル sdf2500.map について
- sdf2ogrで変換した shapefile ですぐに表示ができる設定になっています。
- 地図データのファイルサイズが大きい場合すべてのデータを表示させることが大変なので、スケール単位でレイヤーの表示ON・OFFを切替えています。
- MAXSCALE
- MINSCALE
- 異なる地域を表示させる場合は、次の箇所を修正してください。
- PROJECTION
"proj=latlong"
"ellps=GRS80"
"init=epsg:4612
"towgs84=0,0,0,0,0,0,0"
"no_defs"
END
- EXTENT デフォルトでは尼崎市の表示になっていますので、自分の地図データを表示させる緯度経度を指定してください。
(REFERENCE Object のEXTENTも修正)
■ 地図ファイルの作成 ygmapに表示させる地図データを作成します。ここでは、数値地図2500を使用して作成します。
- 数値地図2500をダウンロードします。
- 国土地理院から任意の数値地図2500(空間データ)をダウンロードします。※ここでは兵庫県尼崎市 の地図で説明してます。
- ダウンロードした尼崎市のファイル 28202.lzh を解凍します。
- Shapefileに変換します。数値地図2500をShapeに変換させる ソフトは、いくつかの方法があります。こちらを参照して下さい。
- sdf2gen・sdfs2gen(シームレス変換)
- いずれもPHPで作動するスクリプトで、GENフォーマットに変換した後、gen2shpでシェープファイルに変換します。
- Super Map Viewer5
- 使用方法はヘルプ > 目次 > 国土地理院数値地図 > 数値地図2500(空間データ基盤)のインポートを参照してください。
- 沖縄研究室さんのサイトでは「Super Map利用講座」で詳しい使用方法を解説されてます。
- このソフトでは矩形の範囲単位でデータが生成されますので、データを統合する必要があります
- sdf2ogr
- 使用方法はこちらを参照してください。
- このソフトではファイル変換時に同じ種類のデータがひとつのファイルに統合されますので作業が簡単です。
- ただし、WindowsのOSでは使用できないために、Cygwinを使用する必要があります
- このページでは詳しい説明をしてませんので、どちらかの方法でShapefileへ変換して下さい。
- 座標系を変更します。
GPSでは座標系JDG2000(日本測地系2000:Japanese Geodetic Datum 2000)を使用していますので、その座標系に変換する必要があります。
■ ygmap の 表示
- ブラウザで、http://localhost/ygmap/ へアクセスするとトップページが表示されます。
ygmapをクリックすると、地図が表示されます。
使用方法 / ○は拡大、□は全範囲、×は縮小、↑↓→←はそれぞれ上下右左に移動します。
▼ 兵庫県尼崎市/JR尼崎駅周辺の地図
- 携帯画面で表示させる
- http://my_server/ygmap/ へアクセスすると、上記と同じ画面が表示されます
- my_serverの箇所を自分のサーバー名(あるいはIPアドレス)へ変えてください
- [パソコンからの場合は、GPSマップを表示できません] と表示している所が、au携帯からでは [ ygmap ] と表示されます
- そこをクリックすると上記と同じ画面が、現在位置で表示されます
- 設定方法について(マップファイル sdf2500.map の設定)
- SIZE 200 200 / 地図サイズの変更
- IMAGETYPE jpeg / 出力される画像フォーマットタイプの変更
- WEB....
MAXSCALE 200000 / 地図スケールの最大値の変更
MINSCALE 200 / 地図スケールの最小値の変更
END- LAYER....
LABEL....
FONT msgothic / フォント種類の変更( /ect/font.txtの設定も変更が必要 )
END
END- PostGISと連携させる場合
- 各レイヤーの次の箇所をアンコメント(先頭の # を削除する)して、設定を変更してください
# CONNECTIONTYPE POSTGIS
# CONNECTION "user=postgres dbname=データーベース名 host=localhost password=パスワード port=5432"
# DATA "the_geom from テーブル名"- 各レイヤーの次の箇所をコメントアウト(先頭に # を付ける)してください
# DATA "gyousei_city_arc"- LAYER....
MAXSCALE 50000 / そのレイヤーが表示される最大スケール値(これ以上のスケールでは非表示となります)
MINSCALE 20000 / そのレイヤーが表示される最小スケール値(これ以下のスケールでは非表示となります)
END- LAYER....
CLASS....
STYLE
SYMBOL 12 / レイヤーシンボルの表示種類の変更(etc/symbols35.sym の中からシンボル名を選択します)
シンボルについての詳細はこちらを参照してください。
END
END
END
- ygmap タスク
- 他の携帯でも対応可能とする
- 取得したパラメータをメール送信データ(URLアドレス)に付加させて、データを送信する
- 地域の情報、表示箇所の住所などを表示させる
- ポイント箇所をマーキングする
- svgt表示対応にする
▲ PHP/MapScript アプリケーション ygmap については以上です。これ以下はGPS関連の参考資料です。
■ GPS携帯 位置情報の取得 について auのGPS携帯 では、2つの位置情報取得方法があるようです。ひとつは、基地局から位置情報を取得する方法(簡易位置情報)。もうひとつはGPS衛星から位置情報を取得する方法です。これらでは携帯の種類と位置情報の精度にちがいがあるようです。
KDDI au の技術情報では、基地局からの取得方法しか公開されていないようですが、こちらで確認したところ、前者の方法だと位置情報の精度に問題があるため、後者の方法で構築する必要があります。
- 簡易位置情報パラメーターの取得方法
まずは、au携帯からどのようなパラメータが送信されているかを、実際確認してみます。
- 次のソースをコピーし、test.phpの名前で保存し、自分のサーバへアップロードします。"myserver"の箇所を自分のサーバ名へ変更してください。
<?
echo "<p>au携帯/位置情報パラメータの取得</p>";
echo "<a href=device:location?url=http://myserver/info.php>位置情報取得テスト</a>";
echo "<br>";
?>
- 次のソースをコピーし、info.phpの名前で保存し、自分のサーバへアップロードします。
<?
echo "位置情報取得テスト<br>";
echo getenv("HTTP_USER_AGENT")."<br>";
echo "datum:".$_GET["datum"]."<br>";
echo "unit:".$_GET["unit"]."<br>";
echo "lat:".$_GET["lat"]."<br>";
echo "lon:".$_GET["lon"]."<br>";
?>
- この2つのファイルの階層
http://myserver/
- test.php
- m.php
- 携帯電話のwebから、アップロードしたアドレス http://myserver/test.php へアクセスします。
(テスト画面 ⇒ http://www.yaskey.cside.tv/mapserver/GPS_test/ ※このURLを携帯からアクセスすると以下と同様の内容が表示されます)
リンク先の「位置情報取得テスト」をクリックします。
au携帯/位置情報パラメータの取得
位置情報取得テスト
- 「?GPS情報を通知します。よろしいですか」と表示されますので、「1 はい」をクリックします。
?GPS情報を通知します。
よろしいですか
1 はい
2 いいえ
- すると次の位置情報が表示されます。
位置情報取得テスト
KDDI-xxxx
UP.Browser/x.x.x.x.x
(GUI) MMP/2.0
datum:tokyo
unit:dms
lat:xx.xx.xx.xx
lon:yy.yy.yy.yy表示された情報の内容
- KDDI-xxxx UP.Browser/x.x.x.x.x (GUI) MMP/2.0 携帯のユーザーエージェントです。詳細はKDDIのページを参照
- datum:tokyo
- unit:dms
- lat:yy.yy.yy.yy
- lon:xx.xx.xx.xx
- au のパタメータ仕様
参照先: au 技術情報 > パタメータ仕様
引数名 内容 備考 datum 測地系
以下の2つの測地系の中から使用している測地系を示す。
・wgs84 WGS84系
GPS測量で算出される座標系。数回の改定により現在ではITRF座標系と実用上の差異はなくなっている。
・tokyo 日本測地系
測量法施行令第2条で定められた日本標準の測地系。引数内容としては"tokyo"という表示になるが、実際の測地系はWGS84系のデータを使用。
世界測地系を使用しているため、MapServer/PROJの指定は4326を使用します。unit 座標系
以下2つの座標系の中から使用している座標系を示す。
・degree 度単位
・dms 度分秒単位 (ただし、秒の小数点以下は10進表記)本サービスでは「dms:度分秒単位」のみ。
MapServerでは degree度単位に変換して使用する必要ありlat 座標系
以下2つの座標系の中から使用している座標系を示す。
・記述例 35.43.25.38
35:度 -90 (南緯) 〜 90 (北緯)
43:分 0 〜 59
25:秒 0 〜 59
38:秒小数点 2桁(1/100)までを記載緯度Y
MapServerでは北緯 45.4353483度 という形式に変換して使用する必要ありlon 経度
座標系に則した表記方法で経度を記述する。符号つきの度で表し、東経を+ (または省略) 西経を−とする。
・記述例 135.43.25.38
135:度 -180 (西経) 〜 180 (東経)
43:分 0 〜 59
25:秒 0 〜 59
38:秒小数点 2桁(1/100)までを記載経度X
MapServerでは東経 135.4353483度 という形式に変換して使用する必要ありこの位置情報に関するパラメータを、携帯から受け取ることににより、その地点の情報が表示される仕組みとなっています。
- GPS位置情報パラメータの取得方法
先程の位置情報は、au基地局から送信される位置情報でしたが、これでは精度があまり高くありません。そこでGPSによる位置情報の取得方法とそのパラメーターを取得する方法を試してみます。基本的には、先程の方法と同じです。
- 先程の test.php に次の行を追加し、自分のサーバへアップロードします。"myserver"の箇所を自分のサーバ名へ変更してください。
<?
echo "<p>au携帯/位置情報パラメータの取得</p>";
echo "<a href=device:location?url=http://myserver/info.php>簡易位置情報 の取得</a>";
echo "<a href=device:gpsone?url=http://myserver/gpsinfo.php&ver=1&datum=0&unit=0>GPS位置情報 の取得</a>";//この1行を追加する
echo "<br>";
?>
- 次のソースをコピーし、gpsinfo.phpの名前で保存し、自分のサーバへアップロードします。
<HTML>
<TITLE>gps</TITLE>
<BODY>
<?
$datum=$_GET["datum"];
$unit =$_GET["unit"];
$lat=$_GET["lat"];
$lon=$_GET["lon"];
chop($lat);//文字列の最後から空白文字を削除する
chop($lon);
$lat_s = explode(".", $lat);//ピリオド区切りで配列へデータを格納する
$lon_s = explode(".", $lon);
//取得した位置情報を経度緯度 dms 度分秒単位 で表示
echo "$lat_s[0]度$lat_s[1]分$lat_s[2]秒$lat_s[3]<BR>";
echo "$lon_s[0]度$lon_s[1]分$lon_s[2]秒$lon_s[3]<BR>";
//degree 度単位で表示する
$lat_deg=$lat_s[0]+$lat_s[1]/60+$lat_s[2]/3600+$lat_s[3]/360000;
$lon_deg=$lon_s[0]+$lon_s[1]/60+$lon_s[2]/3600+$lon_s[3]/360000;
echo "degree: $lat_deg<BR>\n";
echo "degree: $lon_deg<BR>\n";
//経度緯度以外の情報を表示する
echo "GPSv ver: ".$_GET["ver"]."m<BR> \n";
echo "高度 alt: ".$_GET["alt"]."m<BR> \n";
echo "長軸半径誤差 smaj:".$_GET["smaj"]."<BR> \n";
echo "短軸半径誤差 smin:".$_GET["smin"]."<BR> \n";
echo "誤差楕円長軸角度 majaa 度:".$_GET["majaa"]."<BR> \n";
echo "高度誤差 vert: ".$_GET["vert"]."<BR> \n";
echo "測位方法 fm: ".$_GET["fm"]."(fixed mode 数字の意味不明)<BR> \n";
?>
</body>
</HTML>
- 携帯電話のwebから、アップロードしたアドレス http://myserver/test.php へアクセスします。
dms度分秒単位データからdegree度単位のデータへ変換
- [百分率の小数点以下] = [分] / 60 + [秒] / 3600
- 参考サイト⇒Geo metadata - 位置に関するメタデータとその応用
■ goSVG
![]()
SVGとは、Scalable Vector Graphics の略で、Web上で表示させるベクタ形式の画像フォーマットのひとつです。goSVGとは、"G-XML over SVG" と "g-contents over SVG"の略で、モバイル仕様(コンパクトな表示が可能)のSVGです。通常、携帯で表示できる画像フォーマットは、JPEGやGIFなどのラスタ形式が一般的です。しかしこれでは、地図などを拡大表示させた場合に、地名文字やラインデータなどが綺麗に表示されず、地図の意味がなくなります。そこでこのSVGTを用いることにより、拡大表示なども問題なく表示されるという利点があります。 現在のバージョンは SVG 1.1 です。
- W3CのSVGT(SVG)ページ
- Test Suiteでどのように表示されるかを確認することができます。
- goSVG のページ
SVGを閲覧するために
- パソコンからの表示
SVGを表示させるためには、専用ソフトが必要です。一般的には Adobe SVG Viewer が使用されています。
その他のソフトは、SVGを閲覧するための公式リスト SVG Implementations に紹介されています。
- 携帯端末から goSVG の表示
(2005年11月現在)BREW®が表示できる携帯で、なおかつ「EZドキュメントビューアー」の契約が必要のようです。KDDI(au)では goSVG を SVGT (Scalable Vector Graphics Tiny) 形式の呼称を使用しているようです。詳細はKDDIのニュースリリースを参照ください。 ⇒ KDDI 会社情報: ニュースリリース > メールに添付されたパソコン向けファイルの閲覧が可能な「EZドキュメントビューアー」の提供開始について〈別紙〉
なお当サイトでは、携帯から goSVG が閲覧できるかどうかは確認しておりません。
- MapScriptで表示させる方法
※MapServerではバージョン4.5以上での対応となります。MapServerリファレンスのページ⇒MapServer SVG HOWTO
- MapScriptのソース
※HTMLタグと混在させて表示させることは不可能のようです。<?php
dl("php_mapscript_46.dll");//SVG使用の場合は v 4.5 以上のMapScriptが必要です。
$oMap = ms_newMapObj("shp_gosvg.map");//マップファイル名を指定(パスも含め)
$img = $oMap->draw();
header("Content-type: image/svg+xml");//PHPの header で svg フォーマット用に設定します。
$url = $img->saveImage("");
?>
- mapfileは次の箇所を書き換えます。
- goSVG表示のために必ず指定しなければならない箇所です。
(レイヤーは、MAXSCALEで指定しているレイヤーが自動的に表示されます)MAP
...
PROJECTION
"init=epsg:42304" #goSVG専用の"42304"を使用する必要があります。
END
IMAGETYPE svg
OUTPUTFORMAT #SVGT用のアウトプットフォーマット
NAME svg
MIMETYPE "image/svg+xml"
DRIVER svg
FORMATOPTION "GOSVG=TRUE" #デフォルトは"FALSE"ですが、TRUEが必須です。
FORMATOPTION "GOSVG_ZoomInTH=20" #デフォルトは"70"です。
FORMATOPTION "GOSVG_ZoomOutTH=40" #デフォルトは"100"です。
FORMATOPTION "GOSVG_ScrollTH=60" #デフォルトは"10"です。
END
....
LAYER
....
PROJECTION
"init=epsg:42304" #goSVG専用の"42304"を使用する必要があります。
END
END
END
- 表示の確認
- goSVGで表示させたサンプル
- 表示されたSVGは、地図上で右クリックすると拡大縮小ができます。
ただ、地図の範囲は、最初に画面に表示された矩形の範囲のみのようです。
- CGI での出力例
- CGI で出力する場合
http://127.0.0.1/cgi-bin/mapserv_46.exe?map=マップファイルまでのパス/shp_svg.map&mode=map&layers=レイヤー名1 レイヤー名2
- SVG出力の条件について( MapServer SVG HOWTO - Version 4.6 を参照)
- Circle layers はサポートされていません。
- ラインレイヤー
- symbol なしで描かれ、STYLE Object の幅とサイズは、厚さに変えられます。
- ポイントレイヤー
- VECTOR、ELLIPSE、TRUETYPE symbol はサポートされますが、PIXMAP symbol は現在サポートされていません。
- symbol で使用されるラベルは、サポートされます。
- ポリゴンレイヤー
- パターンは現在サポートされていません。
- WMSレイヤー
- これはまだサポートされていません。
Copyright ©2005 Yaskey. All Rights Reserved.