例−8:XMLファイルを読み込んで、地図上にマーカーをマッピングする その1

フォームのボタンを押すと、マーカーが追加されます。
マーカーをクリックすると、フォームで入力した文字が表示されます。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Google Maps JavaScript API Example</title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>

    <script src="http://maps.google.co.jp/maps?file=api&v=2&key=[あなたのAPIキー]&sensor=false"
            type="text/javascript"></script>

    <script type="text/javascript">
    //<![CDATA[
    
    //XMLからマーカーを作成して追加する
    function addMarker_fromXML(map) {
      
      //GXmlHttpクラス の インスタンスを作成
      var request = GXmlHttp.create();
      
      //getメソッドでサーバーからXMLを取得するように設定
      request.open("GET", "./map_example_8.xml", true);
      
      //ステート(状況)が変化したら呼ばれるので、読み込みが完了したら
      //XMLを解析して、追加する
      request.onreadystatechange = function() { 
        if (request.readyState == 4) { 
        
          //レスポンスをXMLとして取得
          var xmlDoc = request.responseXML;
          
          //markerノードを取得(複数あるので配列になる)
          var markers = xmlDoc.documentElement.getElementsByTagName("marker");
          
          //一つずつマーカーにしていく
          for (var i = 0; i < markers.length; i++) { 
            var mpoint = new GLatLng( 
                markers[i].getAttribute("lat"), 
                markers[i].getAttribute("lng") 
            ); 
            var marker = createMarker(mpoint, i); 
            map.addOverlay(marker); 
          } 
        } 
      }
      
      //リクエストの実行
      request.send(null);
    }
    
    //マーカーを作る
    function createMarker(mpoint, index) { 
        var icon = new GIcon();
        icon.image = "http://googlemaps.googlermania.com/img/marker_flag.png";
        icon.shadow = "http://googlemaps.googlermania.com/img/marker_shadow.png";
        icon.iconSize = new GSize(35, 35);
        icon.shadowSize = new GSize(35, 35);
        icon.iconAnchor = new GPoint(0, 35);
        icon.infoWindowAnchor = new GPoint(18, 11);

        var marker = new GMarker(mpoint,icon); 
        return marker; 
    }
    
    
    function load() { 
      var map = new GMap2( document.getElementById("map")); 
      map.setCenter( new GLatLng(35.684, 139.750), 12 );

      //XMLを取得して、地図上にマーカーを追加する
      addMarker_fromXML(map);
    } 
    
    //ページがロードされたら、load 関数を実行して、地図を表示する
    window.onload = load;
    
    //ページを抜けるとき、メモリ開放
    window.onunload = GUnload;
    //]]>
    </script>

  </head>
  <body >
    <div id="map" style="width: 600px; height: 600px"></div>
  </body>
</html>

取得するXML (map_example_8.xml)

<markers>
	<marker lat="35.65769724633269" lng="139.7019875049591" html="渋谷&lt;br&gt;G01 Shibuya" eki="渋谷"/>
	<marker lat="35.66515021658651" lng="139.7125232219696" html="表参道&lt;br&gt;G02 Omotesando" eki="表参道"/>
	<marker lat="35.67028408029107" lng="139.71755504608154" html="外苑前&lt;br&gt;G03 Gaien-mae" eki="外苑前"/>
	<marker lat="35.672768089361014" lng="139.7240674495697" html="青山一丁目&lt;br&gt;G04 Aoyama 1 chome" eki="青山一丁目"/>
	<marker lat="35.67769229985705" lng="139.73695278167725" html="赤坂見附&lt;br&gt;G05 Akasaka-mitsuke" eki="赤坂見附"/>
	<marker lat="35.67094649026828" lng="139.74302530288696" html="溜池山王&lt;br&gt;G06 Tameike-san-no" eki="溜池山王"/>
	<marker lat="35.67038867170557" lng="139.74941968917847" html="虎ノ門&lt;br&gt;G07 Toranomon" eki="虎ノ門"/>
	<marker lat="35.66751235787164" lng="139.75823879241943" html="新橋&lt;br&gt;G08 Shimbashi" eki="新橋"/>
	<marker lat="35.67122539808779" lng="139.76508378982544" html="銀座&lt;br&gt;G09 Ginza" eki="銀座"/>
	<marker lat="35.67619328033399" lng="139.76978302001953" html="京橋&lt;br&gt;G10 Kyobashi" eki="京橋"/>
	<marker lat="35.682529060368985" lng="139.7737205028534" html="日本橋&lt;br&gt;G11 Nihonbashi" eki="日本橋"/>
	<marker lat="35.68459439849937" lng="139.77461099624634" html="三越前&lt;br&gt;G12 Mitsukoshimae" eki="三越前"/>
	<marker lat="35.6931514745205" lng="139.77113485336304" html="神田&lt;br&gt;G13 Kanda" eki="神田"/>
	<marker lat="35.70293608902187" lng="139.77178931236267" html="末広町&lt;br&gt;G14 Suehirocho" eki="末広町"/>
	<marker lat="35.707980403351016" lng="139.77314114570618" html="上野広小路&lt;br&gt;G15 Ueno Hirokoji" eki="上野広小路"/>
	<marker lat="35.711708983201184" lng="139.77696061134338" html="上野&lt;br&gt;G16 Ueno" eki="上野"/>
	<marker lat="35.71123856451719" lng="139.78302240371704" html="稲荷町&lt;br&gt;G17 Inaricho" eki="稲荷町"/>
	<marker lat="35.70970532879391" lng="139.79127287864685" html="田原町&lt;br&gt;G18 Tawaracho" eki="田原町"/>
	<marker lat="35.70974888703399" lng="139.7970986366272" html="浅草&lt;br&gt;G19 Asakusa" eki="浅草"/>
</markers>

サイト内検索
Maps APIの本を書きました
Google Maps APIプログラミング入門
全480ページ。Google Maps API ver.2, ver.3, for Flash, Static Maps API v2, Google Maps API Primery, ライセンス…など、Google Maps APIに関連する幅広い内容の本を書きました。
このサイトで公開しているサンプルはもちろん、本のために作ったサンプルも満載です。
詳しくはこちら

Google Maps Designer
Google Maps Designer