■
こんばんわ
以前作ったauの携帯から位置情報を取得してサーバへ保存するプログラムを修正してジオポで地図表示するようにしました。
作成したサイト、auの携帯で開いてください。
http://anakureon.com/work/gpsinfo/test.php
サーバへー保存した情報を元にyahoo地図表示
http://anakureon.com/work/gpsinfo/map2.php
ジオポのサイト
http://geopo.at/
作成したPHPソース
難しいことは何もしていません。
度分秒の変換ぐらいかな?
gpsinfo.php
<HTML> <TITLE>mk18 gps</TITLE> <BODY> <?php require_once ("geopo.php"); $id = $_SERVER['HTTP_X_UP_SUBNO']; $datum=$_GET["datum"]; $unit =$_GET["unit"]; $lat=$_GET["lat"]; $lon=$_GET["lon"]; chop($lat);//文字列の最後から空白文字を削除する chop($lon); $lat_s = explode(".", $lat);//ピリオド区切りで配列へデータを格納する $lon_s = explode(".", $lon); //echo "id = $id<BR>"; echo "time = ".$_GET["time"]."<BR>"; //取得した位置情報を経度緯度 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"]."<BR> \n"; /*ファイルへ書き込み*/ //data.csv $fp = fopen("data,csv","a"); //追加 fwrite( $fp, $id ); //HTTP_X_UP_SUBNO foreach ($_GET as $line) { // echo "$line,"; fwrite( $fp, $line ); fwrite( $fp, "," ); } fwrite( $fp, "\n" ); echo "<BR>"; fclose($fp); // data.txt $fp = fopen("data,txt","w"); //新規 fwrite( $fp, $id ); //HTTP_X_UP_SUBNO fwrite( $fp, "\n" ); foreach ($_GET as $key => $value) { fwrite( $fp, "$key=>$value" ); fwrite( $fp, "\n" ); } fwrite( $fp, "\n" ); fclose($fp); //MySQLへinsert into $cn = mysql_connect('xxx', 'xxx', 'xxx');//公開するわけにはいかないのでxxxしました。 if (!$cn) { die('Could not connect: ' . mysql_error()); } mysql_select_db('xxx');//公開するわけにはいかないのでxxxしました。 $sql = "insert into w1_gps_table values("; $sql = $sql."'"; $sql = $sql.$id; $sql = $sql. "',"; foreach ($_GET as $line) { $sql = $sql."'"; $sql = $sql.$line; $sql = $sql. "',"; } $sql = $sql."'y1','y2')"; //print "sql = $sql <BR>\n"; if (!(mysql_query($sql))) { die('query err:t: ' . mysql_error()); } mysql_close($cn); // echo "<br>"; echo "<a href=device:gpsone?url=http://anakureon.com/work/gpsinfo/gpsinfo.php&ver=1&datum=0&unit=0>GPSデータをサーバーへ送信</a>";//この1行を追加する echo "<br>"; $lat2 = substr($lat,0+1,2) +substr($lat,3+1,2)/60 +substr($lat,6+1,2)/60/60 +substr($lat,9+1,2)/60/60/60; $lon2 = substr($lon,0+1,3) +substr($lon,4+1,2)/60 +substr($lon,7+1,2)/60/60 +substr($lon,10+1,2)/60/60/10; $location['lat'] = $lat2; $location['lng'] = $lon2; $location['scale'] = 6; $geopo = geopoEncode($location); print "geopo={$geopo}<br>\n"; print "<a href='http://geopo.at/{$geopo}'>ジオポで地図を表示</a>"; print "\n<br><br>(C)2009 <a href='http://d.hatena.ne.jp/mk18/'>mk18</a><br>\n" ?> </body> </HTML>
サンプルを元にエンコード関数を作成。
http://geopo.at/intl/ja/developer/sample_code.html
geopo.php
<?php /* * GeoPo Encode in PHP * @author : Shintaro Inagaki * @param $location (Array) 'lat','lng','scale'の3つが必要 * @return $geopo (String) */ function geopoEncode($location) { // 64characters (number + big and small letter + hyphen + underscore) $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; $geopo = ""; $lat = $location['lat']; $lng = $location['lng']; $scale = $location['scale']; // print "lat={$lat} lng={$lng} scale={$scale}\n"; // Change a degree measure to a decimal number $lat = ($lat + 90) / 180 * pow(8, 10); $lng = ($lng + 180) / 360 * pow(8, 10); // print "lat={$lat} lng={$lng} \n"; // Compute a GeoPo code from head and concatenate for($i = 0; $i < $scale; $i++) { $geopo .= substr($chars, floor($lat / pow(8, 9 - $i) % 8) + floor($lng / pow(8, 9 - $i) % 8) * 8, 1); } // print "geopo={$geopo}\n"; return $geopo; } /* * GeoPo Decode in PHP * @author : Shintaro Inagaki * @param $geopo (String) * @return $location (Array) */ function geopoDecode($geopo) { // 64characters (number + big and small letter + hyphen + underscore) $chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_"; // Array for geolocation $location = array (); for ($i = 0; $i < strlen($geopo); $i++) { // What number of character that equal to a GeoPo code (0-63) $order = strpos($chars, substr($geopo, $i, 1)); // Lat/Lng plus geolocation value of scale $location['lat'] = $location['lat'] + floor($order % 8) * pow(8, 9 - $i); $location['lng'] = $location['lng'] + floor($order / 8) * pow(8, 9 - $i); } // Change a decimal number to a degree measure, and plus revised value that shift center of area $location['lat'] = $location['lat'] * 180 / pow(8, 10) + 180 / pow(8, strlen($geopo)) / 2 - 90; $location['lng'] = $location['lng'] * 360 / pow(8, 10) + 360 / pow(8, strlen($geopo)) / 2 - 180; $location['scale'] = strlen($geopo); return $location; } ?>