●概要

携帯のGPS機能を使い位置情報を取得し、一日分の位置情報をGoogleマップへ表示するツールを作ってみた。現在位置を取得すると、位置情報データは随時サーバへ記録、日ごとに1つのKMLファイルとして保存される。釣りのポイントやハイキングでの絶景スポットなどの位置情報を、後にGoogleマップで管理することを想定して作成した。


●流れ

1.携帯電話のGPS機能を使い、位置情報取得。

2.位置情報をWebサーバのKML(XML)ファイルへ保存。

3.同じ日に取得した位置情報リストを1つのKMLファイルへ保存。

4.KMLファイルをGoogle Mapsへ取り込む。


1. 位置情報取得

Webサーバへ携帯サイトを作成。以下のコードを記述。

[codesyntax lang=”html4strict” title=”GPS位置情報取得”]

<a href="location.php" lcs>位置情報取得</a>

[/codesyntax]

lcs」がドコモ用のGPS位置情報取得属性で、他のキャリアもそれぞれ別の位置情報取得方法が用意されている。


2. 3. KMLファイル自動生成

PHPで以下のコードを作成してみた。

[codesyntax lang=”php” title=”location.php”]

<? php
$lat = $_GET['lat']; // 緯度取得
$lon = $_GET['lon']; //経度取得
$acr = $_GET['x-acc']; //精度(測位レベル)取得
$geo = $_GET['geo']; //測地系取得
$lat_array = preg_split("/[.]/", $lat, 3);
$lon_array = preg_split("/[.]/", $lon, 3);

//緯度経度を60進法から10進法へ変換
if(count($lat_array)==3 && count($lon_array)==3){
  if( $lat_array[0] >= 0){
    $lat = ( ( $lat_array[2] / 60 ) + $lat_array[1] ) /60 +   $lat_array[0];
  }else{
    $lat = ( ( $lat_array[2] / 60 ) + $lat_array[1] ) /60 + $lat_array[0] * -1;
    $lat = -1 * $lat;
  }
  if($lon_array[0] >= 0){
    $lon = ( ( $lon_array[2] / 60 ) + $lon_array[1] ) /60 + $lon_array[0];
  }else{
    $lon = ( ( $lon_array[2] / 60 ) + $lon_array[1] ) /60 + $lon_array[0] * -1;
    $lon = -1 * $lon;
  }
}

$longitude = str_replace('+', '', $lon);
$latitude = str_replace('+', '', $lat);

//日時をKMLファイル名にする
$kml_file = date('Ymd').'.kml';

//KMLファイル作成
$coorStr = $longitude . ',' . $latitude;
if(!file_exists($kml_file)){ //新規ファイル作成の場合
  // DomDocumentを呼び出す
  $dom = new DOMDocument('1.0', 'UTF-8');
  // ルート要素作成
  $node = $dom->createElementNS('http://earth.google.com/kml/2.2', 'kml');
  $parNode = $dom->appendChild($node);
  //新しい要素をルート要素の子要素のとして新規挿入する
  $document = $parNode->appendChild(new domElement("Document"));
  make_nod();
}else{ //追記の場合
  //DomDocumentを呼び出す
  $dom = new DomDocument('1.0','UTF-8');
  $dom->preserveWhiteSpace = false;
  //保存済みのxmlを読み込む
  $dom->load($kml_file);
  //読み込んだxmlのdocument要素をルートの子要素とする
  $root = $dom->documentElement;
  $document = $root->childNodes->item(0);
  make_nod();
}

//共通部分
function make_nod(){
  global $parNode,$document,$placemark,$dom,$kml_file,$coorStr,$node;//不要なものもあるかも

  //placemark要素を新規作成
  $placemark = $document->appendChild(new domElement("Placemark"));

  //新しい要素をplacemark要素の子要素として新規挿入する
  $placemark->appendChild(new domElement("name", date('H:i:s')));
  $placemark->appendChild(new domElement("description", date('Y/m/d H:i:s')));
  $placemark->appendChild(new domElement("styleUrl", "#"));

  //GoogleMapsへ表示するアイコン設定
  $Style=$placemark->appendChild(new domElement("Style"));
  $IconStyle=$Style->appendChild(new domElement("IconStyle"));
  $Icon=$IconStyle->appendChild(new domElement("Icon"));
  $Icon->appendChild(new domElement("href","http://maps.google.com/mapfiles/kml/pal4/icon50.png"));

  //新しい要素をPoint要素の子要素として新規挿入する
  $Point=$placemark->appendChild(new domElement("Point"));
  $Point->appendChild(new domElement("coordinates", $coorStr));

  //XMLをきれいに整形
  $dom->formatOutput = true;

  //XMLを保存する
  $dom->save($kml_file);
}

?>

[/codesyntax]

[codesyntax lang=”xml” title=”location.phpで作成したKMLファイルの例”]

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
  <Document>
    <Placemark>
      <name>18:28:03</name>
      <description>2010/08/22 18:28:03</description>
      <styleUrl>#</styleUrl>
      <Style>
        <IconStyle>
          <Icon>
            <href>http://maps.google.com/mapfiles/arrow.png</href>
          </Icon>
        </IconStyle>
      </Style>
      <Point>
        <coordinates>139.43118083333,35.816845833333</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>18:28:19</name>
      <description>2010/08/22 18:28:19</description>
      <styleUrl>#</styleUrl>
      <Style>
        <IconStyle>
          <Icon>
            <href>http://maps.google.com/mapfiles/arrow.png</href>
          </Icon>
        </IconStyle>
      </Style>
      <Point>
        <coordinates>139.4327475,35.816566944444</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>18:28:30</name>
      <description>2010/08/22 18:28:30</description>
      <styleUrl>#</styleUrl>
      <Style>
        <IconStyle>
          <Icon>
            <href>http://maps.google.com/mapfiles/arrow.png</href>
          </Icon>
        </IconStyle>
      </Style>
      <Point>
        <coordinates>139.41197638889,35.782910555556</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>18:33:22</name>
      <description>2010/08/22 18:33:22</description>
      <styleUrl>#</styleUrl>
      <Style>
        <IconStyle>
          <Icon>
            <href>http://maps.google.com/mapfiles/kml/pal4/icon50.png</href>
          </Icon>
        </IconStyle>
      </Style>
      <Point>
        <coordinates>139.41982972222,35.780625277778</coordinates>
      </Point>
    </Placemark>
  </Document>
</kml>

[/codesyntax]


4. Google Mapsへ取り込む

以下のようなURLでとりあえずは表示可能。

http://maps.google.co.jp/maps?q=http://www.hogehoge.com/gpsdata/20100817.kml

http://maps.google.co.jp/maps?q=KMLファイルが保存されているURL

又は

google Mapsの検索欄へKMLファイルが保存されているURLを入力。

マイマップへは「編集」>>「インポート」でURLを入力するか、ローカルコンピュータへ保存したKMLファイルを選択。

こんな感じ ←場所は適当です

TOPページへ前のページへ戻る