このブログを検索

大文字小文字を区別する 正規表現

Atelierで“東尋坊”が含まれるブログ記事

2012年7月12日

隠居のパソコン備忘録:Google Maps API V3 で旅行地図を作成する


 Google が提供する自分好みの地図を作成できるサービス Maps JavaScript API の バージョンUP(V2 ⇒ V3)が2009年5月に発表されている。最近になって、V2 は廃止され、V3 がリコメンドされていることを知った。プロ向けと思われる【Google Deveopers】というサイトにある【Google Maps JavaScript API V3】 のページには、次のような記載がある。
注: このページに記載されている Google Maps JavaScript API バージョン 3 は、正式な JavaScript API となりました。JavaScript API バージョン 2 は、Google の廃止ポリシーにより正式に廃止されました。アップデート、拡張された新しいバージョンに、コードを移行することをおすすめします。

さらに、Deprecated(非推奨という意味か?) と記されている V2 のページには、次の記載がある。
Note: The Google Maps JavaScript API Version 2 has been officially deprecated as of May 19, 2010. The V2 API will continue to work until May 19, 2013. We encourage you to migrate your code to version 3 of the Maps JavaScript API.

なんと来年5月には、動かなくなりそうだ。私のサイトには、V2 作成した地図を数多く掲載している。慌てて、V3 の学習を始めた。V2 に比べると大幅に変更になっている。サンプルコードをパクリして、作成してきた地図を、基本的な知識が乏しい老人が、今までのコードをバージョンアップするのは至難の技に思われる。それで、今までのコードのバージョンアップは諦めて、ネットで紹介してくれているV3 版のサンプルコードを頼りに、新しく書いて見ることにした。

 ようやくたどり着いたのが、7月10日に収載した【加賀地方旅行地図】である。この地図を例として、作成方法を備忘録として記録しておきたい。

 やりたいことは、
  1. 旅行した地域をカバーする地図を表示する。
  2. 観光した地点にマーカーを立てる。
  3. マーカーをクリックすると吹きだし(infowindow) がでる。
  4. infowindow には、撮った写真の表示や観光地点のURL へリンクを表示できるようにする。
  5. 地図の枠外に訪問地点名を表示し、クリックすると地図上の該当マーカに、infowindow が表示するようにする。
  6. できあがった地図は、私のブログ(Movable Type 4)で、エントリーとして機能するようにする。

 このような地図は、Google Maps API V2 では、できていたのであるが、V3 では初めての試みである。
 ささやかな JavaScript の知識か持たない私の技術では、これを一から作成することは困難である。Sample コードをネットで探し回したところ、【Using the Google Maps API v3】 というページに、要望にあったコード(Mike Williams' tutorial The Basics - Part 2: Adding a clickable sidebar translated to v3)を見つけることができた。Mike Williams' tutorial は、V2 の地図を作成するときにほとんど丸写しに近く参照させていただいたサイトである。残念ながら、このサイトでの V3 によるサンプルコードはない。このV2 でのコードをどなたかが、V3 に translate されたコードである。

 このサンプルコードをもとに、作成した旅行地図 のコードは、以下のとおりである。
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps Javascript API v3 Example: Adding a clickable sidebar</title><script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<style type="text/css">
  html, body { height: 100%; } 
</style>

<script type="text/javascript"> 

//<![CDATA[

    var side_bar_html = ""; 
    var gmarkers = []; 
    var map = null;

function initialize() {
    var myOptions = {
    zoom: 10,
    center: new google.maps.LatLng(36.338359,136.446075),
    mapTypeControl: true,
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    navigationControl: true,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }

  map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  google.maps.event.addListener(map, 'click', function() {
   infowindow.close();
   });

  var point = new google.maps.LatLng(36.056871,136.355095);
  var marker = createMarker(point,"永平寺","<a href='./travel-eiheiji.html' target='_blank'>永平寺 写真サムネイル画像</a>")

  var point = new google.maps.LatLng(36.237628,136.125712);
  var marker = createMarker(point,"東尋坊","<a href='./travel-tojinbo.html' target='_blank'>東尋坊  写真サムネイル画像</a>")

  var point = new google.maps.LatLng(36.228506,136.175559);
  var marker = createMarker(point," そば処あおき","<a href='http://fukui-shop.net/soba/208449/' target='_blank'>URL: そば処あおき</a>")

  var point = new google.maps.LatLng(36.243996,136.374664);
  var marker = createMarker(point," 山中温泉","<a href='./travel-yamanaka.html' target='_blank'>山中温泉 写真サムネイル画像</a><br /><a href='http://yoshinoyairokuen.jp/viewpoint/map_aki_fuyu.pdf' target='_blank'>PDF: 山中温泉案内図</a><br /><a href='http://www.daiwaresort.co.jp/kajikasou/' target='_blank'>URL: 河鹿荘ロイヤルホテル</a>")

  var point = new google.maps.LatLng(36.322871,136.294327);
  var marker = createMarker(point," 鴨池観察館","<a href='./travel-kamoike.html' target='_blank'>鴨池観察館 写真サムネイル画像</a><br /><a href='http://park15.wakwak.com/~kamoike/' target='_blank'>URL: 鴨池観察館</a>")

  var point = new google.maps.LatLng(36.56098,136.658249);
  var marker = createMarker(point," 金沢21世紀美術館","<a href='./travel-21seiki.html' target='_blank'>金沢21世紀美術館 写真サムネイル画像</a><br /><a href='http://ja.wikipedia.org/wiki/%E9%87%91%E6%B2%A221%E4%B8%96%E7%B4%80%E7%BE%8E%E8%A1%93%E9%A4%A8' target='_blank'>URL: 金沢21世紀美術館</a>")

  document.getElementById("side_bar").innerHTML = side_bar_html;
}
var infowindow = new google.maps.InfoWindow(
  { 
    size: new google.maps.Size(150,50)
  });

function myclick(i) {
  google.maps.event.trigger(gmarkers[i], "click");
}

function createMarker(latlng, name, html) {
    var contentString = html;
    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });

    gmarkers.push(marker);

   side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a>  ';
}
 
//]]>

</script> 

</head> 

<body style="margin:0px; padding:0px;" onload="initialize()"> 
     <table border="1"> 
      <tr> 
        <td> 
           <div id="map_canvas" style="width: 720px; height: 650px"></div> 
        </td>
      </tr><tr>   
        <td valign="top" style="width:720px; font-size:small; color: #4444ff;"><strong>観光場所:クリックすると該当場所に吹きだしがでます。</strong><div id="side_bar"> </div> 
        </td> 
      </tr> 
    </table> 

    <noscript><p><b>JavaScript must be enabled in order for you to use Google Maps.</b> 
      However, it seems JavaScript is either disabled or not supported by your browser. 
      To view Google Maps, enable JavaScript by changing your browser options, and then 
      try again.</p>
    </noscript> 

<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> 
 </body> 
</html> 


 このコードについて、若干補足して記録しておきたい。
  • マーカーを立てる経度・緯度の数値は、「Google マップ 地図検索」で検索した地点に出てくるマーカを右クリックすると出てくるポップアップにある「この場所について」をクリックすると 検索文字を入れるボックスに表示される。
  • infowindow の中に表示するURLや写真ページヘのリンクは、HTMLコードを書く要領で書けば良い。
  • side-bar は サンプルコードでは 地図の右枠外であるが、HTMLコードでテーブルを作成する要領で(</tr><tr> ) 行を変えれば、地図の下枠外に表示できる。


 なお、写真の表示に、ブログで使ってきた lightbox (当ブログで使っている写真表示手法)のコードを書いても、Google Maps API というJavaScript の中で、lightbox というJavaScript を使うことになり、うまく表示されない。もう少し勉強すればできるのかもしれないが、次善の策として、ワンクッションおいてサムネイル画像を表示することにした。なお、lightbox については、今回の学習中に、jQuery.js という JavaScript のライブラリーを使ったバージョンが出ていることが分かった。(従来は、prototype.js を使っていた)
jQuery 版lightbox については、稿を改めて記録したい。

 作成した地図を、MT4 のブログにエントリーするには、<iframe>をつかって次のようにブログの中に取り込めば良い。
<iframe src="http://n-shuhei.net/atelier/maps/travel-kaga.html" width="740" height="700" scrolling="NO" frameborder="0"></iframe>


 なお、ブログの右フレームに載せている地図は、Google Maps API V2 で作成しているが、ここでは、xml ファイルを使っている地図が多い。V3 でのXML との連携についても学習しなければならない。おかげで、当分痴呆にはならないだろうが。

2012年7月10日

隠居の旅行:山中温泉を中心に加賀を巡る


 孫の世話などで、なかなか泊まりがけの旅行ができなかった夫婦旅行を久しぶりに楽しんだ。行き先は、前から気になっていた鴨池観察館がある加賀地方である。宿泊は、やはり温泉に浸かりたい。加賀には、片山津温泉をはじめ沢山の温泉地があるが、できるだけ騒々しくないところにしたかったので、山中温泉にした。最近、流行りの「ゆこゆこ ねっと」で探すと、河鹿荘ロイヤルホテルという宿がヒットした。ロイヤルホテル系列の宿には、以前に能登、大山、志摩でも泊ったことがある。それほど悪い印象は残っていない。朝・夕食付きで、¥8800はリーズナブルである。食事は今までの経験で欲張って特別料理を頼んでも、歳をとっているからそれほど食べられない。あてがいぶちで十分である。

 梅雨の時期なので 3日ほど前には傘マークだった予報も、出発前日の天気予報では幸い雨は降らない予報になった。
 コースは、北陸自動車道の福井IC で降りて、まず永平寺に向かう。福井ICから、山の中の地道を走って 30分ほどで正門につく。正門前のすぐ近くに駐車場があり、朝の10時ということでまだ空いていた。(¥500)
 曹洞宗の大本山である永平寺には、以前から訪問したいと思っていた。さすが古刹。境内の檜、楓などは大木である。伽藍には、頭をツルツルにまるめた若い修行僧が機敏な動きをしていた。雪の多い冬の参拝に備えるためか、寺院内建物への移動は階段状の回廊を巡っていく。

 1時間ほどの永平寺参拝のあと、第二の目的地、東尋坊に向かった。永平寺から東尋坊までは40km近くある。カーナビのいうままに田舎道を走ると約1時間ほどで着く。土産物屋の無料駐車場に車を置いて、海岸まで歩いていく。5分ほどの歩道では、土産物屋や食堂が軒を連ねており、呼び込みがかしましい。
 確かに奇岩ではあるのだろうが、なんとなく期待はずれであった。観光遊覧船などといい、あまりに商売気が溢れているせいかもしれない。ちょうど昼時であったが、海鮮丼などを売り物にする食堂には入らず、山中温泉に向かう街道で、蕎麦屋でも探すことにした。10分ほど走ったところで、家内が小さな蕎麦屋の看板を見つけた。テーブル席が3つと5~6人が座れば満員となるカウンターの小さな店だったが、食した天ぷらおろし蕎麦は、なかなかの味であった。この蕎麦屋は「そば処あおき」といって、ガイドブックにも載っていた。

 宿泊予定の山中温泉河鹿荘ロイヤルホテルを指示したカーナビは、あわら温泉を経て畑のなかの道や山道を案内する。1時間ちょっとで宿に到着した。4時からとなっているチェックイン前の時刻に着いたが、部屋の準備はできているということで早速案内してくれた。和洋室の部屋は、セミダブルのツイン・ベッドと3畳ほどの大きさに畳が敷いてあり、畳好きの家内は大満足で脚をのばしていた。すぐに、鶴仙渓という川に面した温泉に飛び込んだ。川のせせらぎ聞こえる野天風呂や4m四方もある古代檜で造られた浴槽に、思い切り足を伸ばした。久しぶりの心地よさである。
 温泉から上がって、夕食までの間、散策マップにあるゆげ街道という小奇麗な温泉街道をぶらぶらと蟋蟀(こおろぎ)橋まであるき、そこから鶴仙渓散策路をつたって、宿に帰ってきた。
 ホテル内にある和食店での夕食は、ほぼ予想通りの満足をし、早めの就寝をした。翌朝、もちろん温泉に浸かった後、朝食までの間、鶴仙渓に一人で出かけた。期待した野鳥とは出会わず、ミヤマカワトンボという茶色の羽をしたトンボを見かけただけだった。鶴仙渓を望みながらの朝食バイキングは品数も多く、いつも早食いの朝食もデザートのコーヒまで40分もかけて楽しんだ。

 今回のメインの目的地である鴨池観察館までは、宿から40分ほどである。着いたのは、8時40分くらいだったから、9時開館の鴨池観察館はまだ開いていない。脇道から、鴨池に出る小径があるので、中にはいってみたが、トンボは飛んでいるが、野鳥の姿はない。9時になって、観察館の中に入ると、若い女性の学芸員が親切にいろいろと教えてくれた。後に判明したのだが、この女性は前は岡本裕子さんといい、正式には【日本野鳥の会加賀鴨池にチーフレンジャー】という肩書きである。この方が、毎日新聞の【ネイチャーEye】というコラムに、「ツバメの数と環境変化」という記事(2012年5月14日付)を書いておられ、そこから、この観察館に訪ねてみたくなったのだ。
 鴨池には、オシドリがいるといって、フィールドスコープの焦点を合わせてくれたが、500mmの望遠では、点としか写らなかった。 野鳥を観察するならと近くの下福田池の地図をいただいた。キビタキに会えるのではないかという。家内を観察館に残して、散策をはじめるとすぐに樹木の暗い蔭に小鳥が留まった。夢中で連写した写真を後で確認するとヒガラであった。この旅行中に撮った小鳥は、この一羽だけだった。水鳥が飛来する11月頃に、また来たいと思う。

 加賀まで行くなら、金沢の21世紀美術館を見てこいと娘に奬められて、金沢市役所近くの美術館まで、車を走らせた。展示は、【ソンエリュミエール コレクション】と【工芸未来派】だったが、美術の素養のない私には、猫に小判だった。
 金沢は、ゆっくりと時間をかけてくるところだと思う。

 ほとんど高速道路ばかりであるが、2日間で710kmは、車後尾にシニアマークをつけた老人には少しハードだったかもしれない。

 なお、このブログでは、Google Maps Javascript API のV3 (V2 は、Google が廃止した) と jQuery lightbox を使った。この経緯については、別のブログに備忘録としてUP するつもりである。

加賀地方旅行地図:マークをクリックすると吹きだしに地名とリンクが表示されます。