Geomobilejp_Converter - Manual
概要
Geomobilejp_Converterはモバイル端末のGPS機能で送信される情報を想定した、緯度経度フォーマット、測地系の相互変換ライブラリです。また、同梱されているGeomobilejp_IAreaを使用すると、緯度経度からオープンiエリアのエリアコードやエリア名を取得することができます。
同梱されているサンプルプログラム、Geomobilejp_Converter/sample/mobile_page_sample.phpにここで説明するコードのすべてが利用されていますので、実装の参考になるでしょう。
PHPのバージョン5で動作します。
緯度経度の変換
Geomobilejp_Converterを生成する
Geomobilejp_Converterクラスを生成します。第1引数に「緯度」、第2引数に「経度」、第3引数に測定した「測地系」を渡します。緯度経度のフォーマットは、度単位(degree)と度分秒単位(dms)に対応しています。
require_once '/path/to/Geomobilejp/Converter.php';
$converter = new Geomobilejp_Converter('35.21.03.340', '138.34.45.725', 'wgs84');
フォーマットを変換する
緯度経度を度単位(degree)と度分秒単位(dms)に相互変換することができます。
require_once '/path/to/Geomobilejp/Converter.php';
$converter = new Geomobilejp_Converter('35.21.03.340', '138.34.45.725', 'wgs84');
$converter = $converter->format('degree');
echo $converter->getLatitude() . "\n";
echo $converter->getLongitude() . "\n";
測地系を変換する
測地系を世界測地系(WGS84)と日本測地系(Tokyo)と日本測地系2000(JGD2000)に相互変換することができます。
require_once '/path/to/Geomobilejp/Converter.php';
$converter = new Geomobilejp_Converter('35.21.03.340', '138.34.45.725', 'wgs84');
$converter = $converter->convert('tokyo');
echo $converter->getLatitude() . "\n";
echo $converter->getLongitude() . "\n";
フォーマットと測地系を変換する
フォーマットの変換と測地系の変換は、Geomobilejp_Converterクラスのインスタンスが返ってきますので、相互変換を組み合わせることができます。
require_once '/path/to/Geomobilejp/Converter.php';
$converter = new Geomobilejp_Converter('34.700695', '135.495243', 'wgs84');
$converter = $converter->convert('tokyo')->format('dms');
echo $converter->getLatitude() . "\n";
echo $converter->getLongitude() . "\n";
オープンiエリアを取得
iエリアデータファイルを準備する
docomoの提供するオープンiエリアのエリアコードとエリア名を緯度経度から取得することができます。この機能を利用するためには、まずdocomo サイトで公開されているiエリアデータファイルを取得して次のようにデータファイルを作成してください。尚、PHPの内部エンコーディングはUTF-8であることを想定しています。
$ wget http://www.nttdocomo.co.jp/binary/archive/service/imode/make/content/iarea/iareadata.lzh
$ lha e iareadata.lzh
$ cd ./Geomobilejp_Converter/tools
$ php ./create_iareadata.php ../../iareadata
$ mv ./iareadata.php ../lib/Geomobilejp/IArea/
緯度経度からiエリアコードとiエリア名を取得する
iエリアデータファイルの準備ができるとGeomobilejp_IAreaを使用して、緯度経度からiエリアコードとiエリア名を取得することができます。
require_once '/path/to/Geomobilejp/Converter.php';
require_once '/path/to/Geomobilejp/IArea.php';
$converter = new Geomobilejp_Converter('34.700695', '135.495243', 'wgs84');
$area = Geomobilejp_IArea::seekArea($converter);
echo $area->getIAreaCode() . "\n";
echo $area->getName() . "\n";
iエリアが見つからなかった場合、Geomobilejp_IArea::seekAreaはnullを返します。
キャリアの差
パラメータの差を吸収する
docomo、au、SoftBank、WILLCOMのGPS機能で送信される緯度経度情報は、パラメータ名やフォーマットに違いがあります。 User-Agentによる判定を行って、各違いを吸収する必要があります。Geomobilejp_Converterにはこれらの差をパラメータがあ るかどうかのみを単純に判定して吸収するGeomobilejp_Mobileが同梱されています。他のUser-Agentを判定するライブラリを使用 する場合には不要ですが、役に立つようであればご利用ください。
require_once '/path/to/Geomobilejp/Mobile.php';
$mobile = new Geomobilejp_Mobile();
if ($mobile->hasParameter()) {
echo $mobile->getLatitude() . "\n";
echo $mobile->getLongitude() . "\n";
echo $mobile->getDatum() . "\n";
}
HTMLのGPSタグを出し分ける
docomo、au、SoftBank、WILLCOMではそれぞれGPS機能を使用するためのHTML表記がありますが、 Geomobilejp_Converterにはこの差を吸収する機能は実装されていません。実際には Geomobilejp_Converter/sample/mobile_page_sample.phpに表記しているような各キャリア用のHTML をUser-Agentを判定して出し分ける必要があります
PostGISというのは
http://www.postgis.org/
のことですよね?
PostgreSQLの最新版では、
June 15, 2006 7:22 PM by watanabe幾何データ型と幾何データ演算子が普通に実装されてます
のでもはやPostGISに頼る必要もないと思います。