document

GPS + google static maps + scroll スクロール

を参考に携帯GPSから自分の現在地を表示するようにした。+スクロール機能

  • 基本動作
    • au.html(imode.html)からget_gps_info.phpに飛ぶようにする。
  • au.html
    	<?xml version="1.0" encoding="Shift_JIS"?>
    	<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    	<HTML xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
    	<HEAD> 
    	<META http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS">
    	<TITLE></TITLE>
    	</HEAD>
    	<BODY>
    		  現在地の地図を返します。
    		  <a href="device:gpsone?url=http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/get_gps_info.php&amp;ver=1&amp;datum=0&amp;unit=0&amp;acry=0&amp;number=0">Click!</a>
    
    	</BODY>
    	</HTML>
  • imode.html
    	<?xml version="1.0" encoding="Shift_JIS"?>
    	<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    	<HTML xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
    	<HEAD> 
    	<META http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS">
    	<TITLE></TITLE>
    	</HEAD>
    	<BODY>
    		  現在地の地図を返します。
    		  <a href="http://xxxxxxxxxxxxxxx/get_gps_info.php" lcs>Click!</a>
    	
    	</BODY>
    	</HTML>
  • get_gps_info.php
	<?php
	
	$lat=$_GET["lat"];
	$lon=$_GET["lon"];
	$zoom = $_GET["zoom"];
	
	if($zoom == "")
	{
		$zoom = 15;
	}
	
	if($lat == "")
	{
		$lat="35.37.16.32";//+35.37.16.3
		$lon="139.43.59.44";//+139.43.59.44
	}
	
	//+が着いてると変になるので、とりあえず除いておく
	$lat = str_replace("+","",$lat);
	$lon = str_replace("+","",$lon);
	print("lat=".$lat."<br>");
	print("lon=".$lon."<br>");
	
	//googleの位置座標設定
	$google_lat=$_GET["google_lat"];
	$google_lon=$_GET["google_lon"];
	if($google_lat == "")
	{
		$google_lat = get_google_gps_info($lat);
		$google_lon = get_google_gps_info($lon);
	}
	//print("google_lat=".$google_lat."<br>");
	//print("google_lon=".$google_lon."<br>");
	
	
	//地図の中心
	$c_lat = htmlspecialchars($_GET["c_lat"]);
	$c_lon = htmlspecialchars($_GET["c_lon"]);
	
	if($c_lat == ""){
	  $c_lat = $google_lat;
	}
	if($c_lon == ""){
	  $c_lon = $google_lon;
	}
	
	//移動後の位置を計算
	
	$top = adjust($c_lon,$c_lat,0,-100,$zoom);
	$bottom = adjust($c_lon,$c_lat,0,100,$zoom);
	$left = adjust($c_lon,$c_lat,-100,0,$zoom);
	$right = adjust($c_lon,$c_lat,100,0,$zoom);
	
	var_dump($_GET);
	
	$img_tag = '<img src="http://maps.google.com/staticmap?center=' . $c_lat . ',' .$c_lon;
	$img_tag .= '&amp;zoom=' .$zoom ;
	$img_tag .= '&amp;markers=' . $google_lat . ',' . $google_lon;
	//$img_tag .= '&amp;path=rgb:0x0000ff,weight:5|'.$google_lat. ','. $google_lon.'|'.$right["y"]. ','. $right["x"] ;
	$img_tag .= '&amp;size=240x320&amp;key=yyyyyyyyyyyyyyyyy">';
	
	if($zoom > 0)
	{
		$zoom_out = '<a href="get_gps_info.php?google_lat=' . $google_lat . '&amp;google_lon=' . $google_lon .'&amp;zoom=' . ($zoom-1) . '" accesskey="0">[zoom out][0] </a><br>';
		print($zoom_out);
	}
	
	if($zoom < 18)
	{
		$zoom_in = '<a href="get_gps_info.php?google_lat=' .$google_lat . '&amp;google_lon=' .$google_lon .'&amp;zoom='. ($zoom+1) .'" accesskey="5">[zoom in][5] </a>';
		print($zoom_in);
	}
	
	print($img_tag);
	
	
	
	
	
	
	$to_left = '<a href="get_gps_info.php?google_lat=' . $google_lat . '&amp;google_lon=' . $google_lon .'&amp;c_lat=' . $left["y"] .'&amp;c_lon=' . $left["x"] .'&amp;zoom=' . $zoom . '" accesskey="4">←[4] </a><br>';
	
	$to_top =  '<a href="get_gps_info.php?google_lat=' . $google_lat . '&amp;google_lon=' . $google_lon .'&amp;c_lat=' . $top["y"] .'&amp;c_lon=' . $top["x"] .'&amp;zoom=' . $zoom . '" accesskey="2">↑[2] </a><br>';
	$to_bottom ='<a href="get_gps_info.php?google_lat=' . $google_lat . '&amp;google_lon=' . $google_lon .'&amp;c_lat=' . $bottom["y"] .'&amp;c_lon=' . $bottom["x"] .'&amp;zoom=' . $zoom . '" accesskey="8">↓[8] </a><br>';
	$to_right = '<a href="get_gps_info.php?google_lat=' . $google_lat . '&amp;google_lon=' . $google_lon .'&amp;c_lat=' . $right["y"] .'&amp;c_lon=' . $right["x"] .'&amp;zoom=' . $zoom . '" accesskey="6">→[6] </a><br>';
	
	print($to_left.$to_top.$to_bottom.$to_right);
	
	
	/*
	  function get_google_gps_info
	 
	  $gps_info:携帯のGPS情報
	  戻り値
	  携帯GPS情報を10進表記に変えたもの;
	*/
	function get_google_gps_info($gps_info)
	{
		list($d,$m,$s,$s2) = explode(".", $gps_info);
		//var_dump(explode(".", $gps_info));
		$s = $s . '.' . $s2;
		//print("aaaaaaa"."$s");
		//$d = float( $d );
		//printf("ddddddddd".$d);
		$m = $m  / 60.0;
		$s = $s / 3600.0;
		//print("dms"."$d + $m + $s");
		return $d + $m + $s;
	}
	
	
	/*
	  function adjust
	 
	  $x:中心の経度
	  $y:中心の緯度
	  $deltaX:ずらしたい距離(ピクセル単位)
	  $deltaY:ずらしたい距離(ピクセル単位)
	  $z:ズーム
	 
	  戻り値
	  array("x"=>"移動後の経度","y"=>"移動後の緯度");
	*/
	function adjust($x,$y,$deltaX,$deltaY,$z){
	  $offset=268435456;
	  $radius=$offset / pi();
	  $xy = array(  "x"=>((round(round($offset + $radius * $x * pi()/180)+($deltaX << (21-$z))) - $offset) / $radius) * 180 / pi(),
	                "y"=>(pi() / 2 - 2 * atan(exp((round(round($offset - $radius * log((1 + sin($y * pi() / 180))/(1 - sin($y * pi() / 180))) / 2)+($deltaY << (21-$z))) - $offset) / $radius))) * 180 / pi()
	              );
	  return $xy;
	}
	
	?>

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-05-29 (金) 18:01:04 (3670d)