2011年6月24日金曜日

Google Maps API 住所から地図を表示する

Google Maps API を使って住所から緯度経度を求めその地点の地図を表示してみました。

先にmapオブジェクトを作ってから住所を元に緯度経度をセットすると灰色の地図が結構長い時間表示されてしまうので、緯度経度取得のコールバックの中でmapオブジェクトを作成しています。

この中ではまったのはマーカーの表示でした。最初、タイトルを設定せずにマーカーを構築していたのですが、それだとマーカーが表示されませんでした><;
function OnLoad( )
{
 var latlng;
 var strAddress = "東京都青梅市東青梅1-7-7";

 var geocoder = new google.maps.Geocoder();
 geocoder.geocode
 ( 
  {
   'address': strAddress
  }
  , function( results, status )
  {
   if ( status != google.maps.GeocoderStatus.OK )
   {
    Debug( "status=" + status );
    return;
   }

   latlng = results[0].geometry.location;

   // 地図を作成
   var map = new google.maps.Map
   (
    document.getElementById("map_canvas")
    , { 
     zoom: 15,
     center: latlng,
     mapTypeId: google.maps.MapTypeId.ROADMAP
    }
   );

   // マーカーを作成
   var marker = new google.maps.Marker( { positon: latlng, map: map } );
   var marker = new google.maps.Marker
   (
    {
       position: latlng
     , map: map
     , title: "(株)クレアンスメアード"
    }
   ); 

   // ポップアップ設定
   var infowindow = new google.maps.InfoWindow
   (
    {
       content: '(株)クレアンスメアード<br>0428-23-3120<br>'
     , size: new google.maps.Size( 450, 150 )
    }
   );
   google.maps.event.addListener
   (
      marker
    , 'click'
    , function( )
    {
     infowindow.open( map, marker );
    }
   );
  }
 );
}

2011年6月6日月曜日

PHP 参照の困った仕様(バグ?)

参照を使った場合のおかしな動作を見つけました。(5.1.6 & 5.3.5)
$a = array( 1, 2, 3 );
foreach ( $a as &$i ) echo $i;
echo ',';
foreach ( $a as $i ) echo $i;

上記を実行すると
123,122
となります。
う~ん、2番目の foreach の際に最初の foreach の &$i が効いていると $a[2] = $a[0] となり出力は 123,121 となる気がするのですが…