Docomoで緯度経度を取得する

とある事情で、携帯から緯度経度情報を取得してGoogleMapにプロットするというようなことをやっていました。

で、大枠自体はできAuSoftbankでは動作を確認したのですが、Docomoだけ上手く動作しません。予想される動作としては「緯度経度を通知しますか?」なんて確認が出て、パラメータが渡ってくるはずなんですが、確認画面も出てきません。

ちなみにその時の方法は、Docomohttp://www.nttdocomo.co.jp/service/imode/make/content/gps/index.htmlを参照して以下のような感じで書いていました。が、適当にブログを検索しても、公式ページ?をみてもこの書き方で問題ないはずだったのですが、いまいち動かない。

|html|
座標を取得
||<

で、ぼちぼち見て回っていると緯度経度の取得は、どうやらオープンiエリアに集約されていた様子。

マニュアルを見てみるとオープンiエリアを使ってリクエストする際に "posinfo=(1|2)" のパラメータを追加することでオープンiエリアに関する値と同時に緯度経度も渡ってくるようです。ちなみに "posinfo=2" にすると緯度経度のみが渡されてくる様子。(オープンiエリア説明書 p8)。

結局、オープンiエリアを使って取得するために以下のように書き換えました。この結果は、オープンiエリア説明書 p11 のような形で渡されてきますので後は好きに操作します。

|html|
http://w1m.docomo.nh.jp/cp/iarea?ecode=OPENAREACODE&msn=OPENAREAKEY&posinfo=2&nl=[URL]
||<

補足がてら、上記で取得した緯度経度をGoogleMapで使える形に変換するPHPのサンプルは以下。普通この辺はキャリアごととかちゃんと作るけどあくまでサンプル。

|php|
<?php
// 頭についてくる "+"を削除。
// 真面目にする場合には、ちゃんと処理したほうが良さ気
$p_lttd = preg_replace("/+/", "", $REQUEST['LAT']);
$p_lgtd = preg_replace("/+/", "", $
REQUEST['LON']);

  // 緯度経度をGoogleMapで使える形に変換する  
  list($lttd, $lgtd) = $this->convGis2Gmap($p_lttd, $p_lgtd);

  // 度分秒形式からGoogleMapに対応した形式に変換する  
  function convGis2Gmap($p_lttd, $p_lgtd) {  
    $lttd = split('.', $p_lttd);  
    $lgtd = split('.', $p_lgtd);

    $r_lttd   = trim($lttd[0]) + trim($lttd[1]) / 60 + (trim($lttd[2]) + trim($lttd[3]) / 1000) / 3600;  
    $r_lttd   = trim($lgtd[0]) + trim($lgtd[1]) / 60 + (trim($lgtd[2]) + trim($lgtd[3]) / 1000) / 3600;

    return array($r_lttd, $r_lttd);  
  }

||<