2012年7月29日

隠居のパソコン備忘録: Google Maps API V3 で Polyline を描く


 自作地図を作成するのに便利していた Google Maps API のバージョンが、 V2 から V3 に大幅に変更され、来年5月には V2 で作成した地図が動かなくなりそうだということは、隠居のパソコン備忘録:Google Maps API V3 で旅行地図を作成するで、記録した。

 Studio YAMAKO のオーナーが、この2~3年に海外旅行した時の地図には、旅程を表す Polyline を表示している。これも、V3 になると書き換えなければならない。V2 では、XML ファイルに訪れた地点の経度・緯度を書き込んでおくと Polyline を描いてくれる sample code があったが、V3 では、そのような sample code は、ヒットしなかった。
 【Google Maps JavaScript API V3の使い方】というサイトに、【ポリラインの表示】というぺーじがあり、polyline を描くための訪問地点の経度・緯度を Javascript に直接記入する方法が紹介されていた。このサンプル・コードを参考に、先日記録した【Google Maps API JS V3 でXML ファイルを読み込む】の Javascript コードに追加してみると上手く動くことが分かった。老人の備忘録として、「トルコ周遊8日間の旅」の地図のコードを記録としておきたい。下のコードの青字部分が Polyline 表示のために追加した部分である。
 訪問地点の経度・緯度は、V2 のときに使っていた XML ファイルの中からコピーしてきた。記述する部分は少ないので、XML ファイルにする必要性はあまりない。

<!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: Loading the data from an XML</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="http://n-shuhei.net/JSlibrary/downloadxml.js"></script>

<style type="text/css">
html, body { height: 100%; } 
</style>

<script type="text/javascript"> 
//<![CDATA[
// this variable will collect the html which will eventually be placed in the side_bar 
      var side_bar_html = ""; 

      // arrays to hold copies of the markers and html used by the side_bar 
     // because the function closure trick doesnt work there 

      var gmarkers = []; 

     // global "map" variable
      var map = null;

// A function to create the marker and set up the event window function 
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);
        });

    // save the info we need to use later for the side_bar
    gmarkers.push(marker);

    // add a line to the side_bar html
    side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>';
}

// This function picks up the click and opens the corresponding info window
function myclick(i) {
  google.maps.event.trigger(gmarkers[i], "click");
}

function initialize() {
  // create the map
  var myOptions = {
    zoom: 6,
    center: new google.maps.LatLng(39.436193,29.86908),
    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();
        });

      // Read the data from hachi.xml
      downloadUrl("V3_maps_Turkey.xml", function(doc) {
        var xmlDoc = xmlParse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {

          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("lat"));
          var lng = parseFloat(markers[i].getAttribute("lng"));
          var point = new google.maps.LatLng(lat,lng);
          var html = markers[i].getAttribute("html");
          var label = markers[i].getAttribute("label");

          // create the marker
          var marker = createMarker(point,label,html);
        }

      // put the assembled side_bar_html contents into the side_bar div
        document.getElementById("side_bar").innerHTML = side_bar_html;

// Polyline 表示の追加 ここから     
    var drivePlan = [
      new google.maps.LatLng(40.010787, 26.279297),
      new google.maps.LatLng(39.317035, 26.703644),
      new google.maps.LatLng(37.947176, 27.342567),
      new google.maps.LatLng(37.914409, 29.120979),
      new google.maps.LatLng(37.882441, 32.485199),
      new google.maps.LatLng(38.376115, 34.002686),
      new google.maps.LatLng(38.533127, 34.433899),
      new google.maps.LatLng(38.627063, 34.720917),
      new google.maps.LatLng(38.772019, 35.490303),
      new google.maps.LatLng(41.013066, 28.975067),
      new google.maps.LatLng(40.010787, 26.279297)
    ];
    var drivePath = new google.maps.Polyline({
      path: drivePlan,
      strokeColor: "#FF0000",
      strokeOpacity: 1.0,
      strokeWeight: 2
    });
      drivePath.setMap(map);
// ここまで 

      });
    }

var infowindow = new google.maps.InfoWindow(
  { 
//    size:  new google.maps.Size(200,50)
  });

//]]>

</script> 
  </head> 

<body style="margin:0px; padding:0px;" onload="initialize()"> 

<table border="1"> <tr>
<td bgcolor="#FFFFCC" align="center" colspan="2"><font color="#000000"><strong><big>「洞窟ホテルに泊まる!トルコハイライト周遊8日間」の旅</big></strong></font></td></tr>      
<tr><td> 
    <div id="map_canvas" style="width: 800px; height: 600px"></div> 
    </td> 
    <td width = 200 valign="top" bgcolor="#ffffcc" >
左の地図は、Google Mapsの機能を持っています。拡大・縮小・移動ができます。下の地名をクリックすると該当位置に吹き出しが出ます。吹き出しの中のリンクをクリックすると詳細地図あるいは関連投稿に飛びます。<br /><br />
    <div id="side_bar"style="text-decoration: underline; color: #000000; font-size: small;"></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> 

  </body> 
</html> 


2012年7月28日

隠居のDIY:山小屋で取り替えた浴室ドアの枠を始末する


 パートナと気になっていた箇所の修繕をするために、兵庫県氷ノ山山麓大久保にある山小屋に出かけた。この時期には、林間学校や吹奏楽部などの合宿などで、スキーシーズン以外はひっそりした村が賑わう。この日も、観光バスが何台も坂道を登ってきた。

 気になっていた修繕箇所は、昨年の12月に付け替えた浴室のドアの枠と壁の隙間の始末と屋外の立水栓あたりの漏水である。備忘録として、作業の記録を残しておきたい。

浴室のドアの枠と壁の隙間の始末
ドア枠を取り付けたところ;クリックすると大きな写真になります 隙間をまず角材で埋める。;クリックすると大きな写真になります コーキング剤で隙間を埋めた;クリックすると大きな写真になります 養生テープを取った後;クリックすると大きな写真になります
取り付けたドア枠と壁との隙間(before) 隙間部分に、栂の 3cm角材 をビスで埋め込みベージュのペンキを塗った。 角材と壁の間に残る隙間を、養生テープを貼ってコーキング剤で埋めた。 養生テープを取った後。(after) さらに、アルミの角材を貼った方が仕上げがきれいかもしれない。


止水栓;クリックすると大きな写真になります  水漏れは、屋外の立水栓のための流しあたりで起こっている。この流しは、もともとあった簡易流しをレンガとモルタルで強固に作りなおしたものである。タガネとハンマーでこれを砕いたのだが、なかなか体力のいる作業だった。
漏水箇所は、雪の重みが原因と思われるが、元々のプラスティックの立水栓が折れて水道パイプの継ぎ目がはずれていたためと判明した。応急処置として、止水栓で水漏れを止めた。
 新しい立水栓も求めて屋外の水道栓を作るのは、また、次回の作業とすることにした。

  

2012年7月27日

隠居の探鳥・蝶ウォーク:氷ノ山山麓大久保、夏の野鳥・蝶たち

 
 パートナと気になっていた箇所の修繕をするために、兵庫県氷ノ山山麓大久保にある山小屋に出かけた。この時期には、林間学校や吹奏楽部などの合宿などで、スキーシーズン以外はひっそりした村が賑わう。この日も、観光バスが何台も坂道を登ってきた。

 作業の合間に、小屋の周りにくる蝶たちにカメラを向けてみた。小屋の北側に造ったウッドデッキのすぐ近くに、高さ5mほどのノリウツギの木があり、ガクアジサイのような白い花がたくさん咲いている。よく見ると、この花の蜜を吸いに、ミドリヒョウモンとサカハチチョウがやってきている。特にミドリヒョウモンの数が多い。
 足元に目をやると、トラノオの白い花に、スジグロシロチョウが、次から次に吸蜜にくる。
 早朝、ゲレンデの茂みを歩いてみると葉陰に、黄色と黒の斑模様の翅を広げる蛾が留まった。ネットで調べるとキンモンガというらしい。
キンモンガ;クリックすると大きな写真になります サカハチョウ;クリックすると大きな写真になります ミドリヒョウモン;クリックすると大きな写真になります スジグロシロチョウ;クリックすると大きな写真になります
キンモンガ
兵庫県養父市大久保
2012/7/24
NikonD7000
ΣAPO50-500mm 340mm (35mm相当510mm)
シャッター優先オート(1/1250s ISO12800 F6.3)
露出補正 なし
サカハチチョウ
兵庫県養父市大久保
2012/7/24
NikonD7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート(1/1250s ISO3200 F6.3)
露出補正 なし
トリミング
ミドリヒョウモンとサカハチチョウ
兵庫県養父市大久保
2012/7/24
NikonD7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート(1/640s ISO4500 F6.3)
露出補正 なし
トリミング
スジグロシロチョウ
兵庫県養父市大久保
2012/7/24
NikonD7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート(1/640s ISO2600 F6.3)
露出補正 なし
(追記:2012/7 /27)YAMAKOさんに指摘していだき、イチモンジチョウと記載していた蝶はサカハチチョウ夏型であることが判明しましたので、訂正しました。

早朝のひつじ雲;クリックすると大きな写真になりますドクダミの群落;クリックすると大きな写真になります 小屋に向かう途中にトイレ休憩でいつも停まる近畿北部自動車道のいっぷく茶屋に5月頃にはツバメが巣をつくる。今回も停まったら雛が4羽巣にとどまって親が運んでくる餌を待っていた。残念ながら、カメラの設定を間違って撮れなかった。カメラの設定確認は、常にこころがけねばならない。
 昼間は山奥といえども暑いが、朝晩は涼しくなる。早朝に小屋を抜けだして、鳥の姿を求めた。が、さえずりはあまり聞こえてこない。空には、ひつじ雲が広がっている。
 林道の脇には、どくだみの白い花が群落になって咲いている。
 ハチ高原に登る林道の上を通っている電線に、ホオジロが虫を咥えて留まった。すぐ近くの杉の幼木に、ホオジロの幼鳥がいたから、餌を運んでいたのだろうか。
 小屋のウッドデッキから見えるもみの樹の遠くの梢に留まった鳥を撮ったが、大トリミングしてみるとどうやらカワラヒワらしい。山小屋で見かけるのは、はじめてである。

ツバメの飛翔;クリックすると大きな写真になります ホオジロ;クリックすると大きな写真になります ホオジロ幼鳥;クリックすると大きな写真になります カワラヒワ;クリックすると大きな写真になります
ツバメの飛翔:いっぷく茶屋
2012/7/23
NikonD7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート(1/1000s ISO100 F6.3)
露出補正 なし
明るさ調整
ホオジロ
兵庫県養父市大久保
2012/7/24
NikonD7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート(1/1250s ISO1250 F6.3)
露出補正 なし
トリミング
ホオジロ幼鳥
兵庫県養父市大久保
2012/7/24
NikonD7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート(1/1250s ISO2500 F6.3)
露出補正 なし
トリミング
カワラヒワ
兵庫県養父市大久保
2012/7/24
NikonD7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート(1/640s ISO180 F6.3)
露出補正 なし
トリミング


   

2012年7月21日

隠居のパソコン備忘録: Google Maps API JS V3 でXML ファイルを読み込む

 
 自作地図を作成するのに便利していた Google Maps API のバージョンが、 V2 から V3 に大幅に変更され、来年5月には V2 で作成した地図が動かなくなりそうだということは、隠居のパソコン備忘録:Google Maps API V3 で旅行地図を作成するで、記録した。

  V2 で作成した多くの地図では、外部ファイルである XML ファイルを読み込んでマーカを立てる地点やマーカをクリックすると出てくる吹きだしの中に、リンク先などの情報を表示していた。年間の旅行先などマーカが順次増える場合には、XML ファイルに経度・緯度や必要なリンクを書き足すだけでいいので便利をしていた。
 今まで V2 で作成してきた地図を V3 にバージョンアップして XML ファイルを読み込むためのサンプル・コードを探し回したが、適切なコードが見つからなかった。一から、作成する能力はからきしない。途方に暮れて、上のブログに記録した前回の方法で、XML ファイルを使わず直接 JavaScript に書き込むことも挑戦しかけたが途方も無い作業のようなのでやめて、今までの XML ファイルが使えそうなサンプル・コードで、再度粘ってみることにした。

 拝借したサンプル・コードは、上のブログに記録した前回の方法ときにも拝借した、【Using the Google Maps API v3】 というページにある【lLoading the data from an XML file translated to v3】のソース・コードである。
 V3 のGoogle Maps API にXML ファイルを読み込む方法は、多くの場合、前回に lightbox 2.51 の導入で紹介した JavaScript のライブラリー jQuery が使われている。拝借したサンプル・コードでは、jQuery ではなく、downloadxml.js というライブラリーが使われている。どうも、jQuery の方が本流らしいが、私にとっては、V3 で今までの XML ファイルが使えるサンプル・コードの方がありがたい。
 一週間以上かなりの時間を使って粘った甲斐があって、下のようなコードで XML が読み込めるようになった。
 

<!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: Loading the data from an XML</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="http://n-shuhei.net/XXXXX/XXX/XXXXX/downloadxml.js"></script>

<style type="text/css">
html, body { height: 100%; } 
</style>

<script type="text/javascript"> 
//<![CDATA[
// this variable will collect the html which will eventually be placed in the side_bar 
      var side_bar_html = ""; 

      // arrays to hold copies of the markers and html used by the side_bar 
     // because the function closure trick doesnt work there 

      var gmarkers = []; 

     // global "map" variable
      var map = null;

// A function to create the marker and set up the event window function 
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);
        });

    // save the info we need to use later for the side_bar
    gmarkers.push(marker);

    // add a line to the side_bar html
    side_bar_html += '<a href="javascript:myclick(' + (gmarkers.length-1) + ')">' + name + '<\/a><br>';
}

// This function picks up the click and opens the corresponding info window
function myclick(i) {
  google.maps.event.trigger(gmarkers[i], "click");
}

function initialize() {
  // create the map
  var myOptions = {
    zoom: 12,
    center: new google.maps.LatLng(35.377556,134.534862),
    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();
        });

      // Read the data from hachi.xml
      downloadUrl("hachi.xml", function(doc) {
        var xmlDoc = xmlParse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {

          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("lat"));
          var lng = parseFloat(markers[i].getAttribute("lng"));
          var point = new google.maps.LatLng(lat,lng);
          var html = markers[i].getAttribute("html");
          var label = markers[i].getAttribute("label");

          // create the marker
          var marker = createMarker(point,label,html);
        }

        // put the assembled side_bar_html contents into the side_bar div
        document.getElementById("side_bar").innerHTML = side_bar_html;
      });
    }

var infowindow = new google.maps.InfoWindow(
  { 
//    size:  new google.maps.Size(200,50)
  });

    // This Javascript is based on code provided by the
    // Community Church Javascript Team
    // http://www.bisphamchurch.org.uk/   
    // http://econym.org.uk/gmap/
    // from the v2 tutorial page at:
    // http://econym.org.uk/gmap/basic3.htm 

//]]>

</script> 
  </head> 

<body style="margin:0px; padding:0px;" onload="initialize()"> 

    <!-- you can use tables or divs for the overall layout --> 
    <table border="1"> 
<tr>
<td bgcolor="#FFFFCC" align="center" colspan="2"><font color="#000000"><strong><big>ハチ高原近辺私的観光地図</big></strong><br /></font></td></tr>      
<tr> 
        <td> 
           <div id="map_canvas" style="width: 800px; height: 600px"></div> 
        </td> 
        <td width = 200 valign="top"  bgcolor="#ffffe0" style="text-decoration: underline; color: #000000; font-size: small;" >
<!--<td valign="top" style="width:150px; text-decoration: underline; color: #4444ff;">-->
           <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> 

  </body> 
</html> 
サンプル地図

 試行錯誤は、拡張子の前につける . (ピリオド)が抜けていたり、ファイルのアップロード先を間違ったりなど実に単純なミスの連続であった。
 とくに、Geekなぺーじの【Google MAPS JavaScript APIでのデバッグ】にも書かれているように、日本語コードで最後までつまづいた。V2 のときには、Shift-JIS でも OK だったXML ファイルが、UTF-8 でないとエラーを起こすというより、全く読んでくれない。
 この試行錯誤のお陰で、Google Maps API について、少し理解が深まったが、JavaScript に十分な知識がない老人にはやっぱり難解な世界である。中断していた JavaScript の学習も再開せねばと思うが、なにしろやりたいことが多すぎる。
 来年5月までに、順次 V2 の地図を V3 にしていくつもりである。

2012年7月17日

隠居のパソコン備忘録: jQuery lightbox (同一画面上に拡大写真をかっこよく表示する)を導入する


 先日来、個人的地図作成サービス Google Maps API V3 を学習してきた。このサービスを使って、加賀地方旅行地図を作成したことを記録している。このサービスを学習中に、jQuery という JavaScript のライブラリーが、いろいろな JavaScript ソフトを導入するときに使われていることが分かった。

 この JavaScript ライブラリーの jQuery を使って、拡大写真の表示を同一画面上に表示する JavaScript の lightbox が新しいバージョン(Version 2.51)になっていることも分かった。(従来のライブラリーは、prototype.js )
 これを、先の加賀地方旅行地図での写真表示に使って見ることにした。
サンプル画像

 インストールについては、Lightbox2 のページから、Lightboxv2.51 をダウンロードし、PC のどこかのフォルダ(例えば、lightbox2.51 を作成し )に解凍する。
  上のページの【How to use】を参考に、ブログをアップロードしているサーバーに新しいフォルダー(例えば、lightbox2.51 )を作成し、ファイル転送ソフト(私の場合、FFFTP )を使ってサーバーにアップロードする。解凍したフォルダーをまるままアップロードしても問題は無いと思う。ただ、サーバーに余裕がない場合には、先ほどのページを参考に、必要なファイルのみをアップロードしたほうが良い。このあたりは、【アクアラングウエスタンver.9.2】というページを参照させてもらった。

 このようにして、lightbox2 が動作するのを確認の上で、次のようなカスタマイズを行った。
  • 初期値では、写真を表示する画面の背景色は黒であるが、これを好きな色に変えるには、lightbox.css の冒頭にある次の青字部分を変更する。
    /* line 6, ../sass/lightbox.sass */
    #lightboxOverlay {
      position: absolute;
      top: 0;
      left: 0;
      z-index: 9999;
      background-color: #408080; 元は、black;
      filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=85);
      opacity: 0.85;
      display: none;
    }
    


  • 写真ページを閉じるボタンを close.png(close.png) から、自作の closelabel.gif(closelabel.gif) に変更した。変更は、lightbox.js の50行目あたりある次の青字部分を変更した。なお、赤字部分で示したように、imageのありかは、絶対パスで書いておいたほうが無難なようである。
      LightboxOptions = (function() {
        function LightboxOptions() {
          this.fileLoadingImage = 'http://n-shuhei.net/xxxxx/Jquery2.51/images/loading.gif';
          this.fileCloseImage = 'http://n-shuhei.net/xxxxx/Jquery2.51/images/closelabel.gif';
          this.resizeDuration = 700;
          this.fadeDuration = 500;
          this.labelImage = " photo  "; 元は、Image 
          this.labelOf = "of";
        }
    


 この Jquery lightbox2 を、Movable Type 4 で作ったブログの写真(多分1000枚以上ある)の表示に適用した。(従来は、prototype.js の lightbox 2.0 ) Movable Type に適用するには、テンプレートのヘッダーにある lightbox 2.0 の Javascript 表示を lightbox 2.51 のコードに置き換えるだけで、すべての写真表示が新しい lightbox2.51 の表示となるので極めて楽ちんである。(つまり、HTML でのコードは、 lightbox 2.0 でも lightbox2.51 でも同じである。)

2012年7月13日

隠居のJazz:Live365 Radio Senboku の Piano Trio 曲を更新する


 昨年の11月下旬、Web Radio である Live365 のサイトに開局しているRadio Senboku プログラムを Piano Trio ばかりにした
 このプログラムが、割合好評で、1月下旬には 353 局(2012年1月26日現在)開設されている Jazz 分野で RadioSenboku が上位50位になった

 この3月初めから、それまでの Artists は変えずに、同じアルバムの新しい曲に変えて続けてきた。それ以降5ヶ月あまり、同じプレイリストで流しているが、45~50位あたりを維持している。私自身もほとんど毎日Radio Senboku にチャネルを合わせている。Live365 のWebRadio は、スマートフォンでもアクセスできるから、車に乗っているときに聴く音楽は、Piano Trio の Jazz ばかりである。厭きはこないが、このプログラムを作るために揃えた70枚あまりのアルバムにあるプレイをすべて聞いてみたい。

 Live 365 に開設したステーションで音楽を流すには、著作権をクリアするために設けられたDMCA(The Digital Millenium Copyright Act)というルールに(放送時間の3時間以内で同じアルバムから3曲以上続けて放送してはならない)則って、Playlist を作らねばならない。そのために、私は同じアルバムから2曲ずつ選択して、同じアルバムの曲が3時間以内に流されないように Playlist を組んでいるが、アルバム70枚あまりの曲すべてを聴くには Playlist を変える必要がある。そのために新たな Playlist を暇を見つけては作ってきた。3月に変更してから、5ケ月半くらいになるので、 Piano Trio 曲を一新して流すことにした。

なお、7月13日付けで更新した曲は 16時間40分 188 曲がワンクールで、24時間連続して流れる。現在流れている Jazz Piano Trio の Playlist は、右メニューの【Radio Senboku Playlist】からリンクしている。

ジャンル・ジャズ(開設局:340;2012年7月13日現在)での順位
This_Month_jazz.JPG
全ステーション(約7500stationくらい)での順位
This_Month_overall.JPG
国別のアクセス時間
ByCountry.JPG


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 するつもりである。

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

2012年7月 7日

隠居の探鳥・蝶ウォーク:蝶群れる トウネズミモチ 白き花


 暑くなるにつれて、鳥の種類はすっかり少なくなってきた。萱の茂みで啼いていたオオヨシキリの声も聞こえなくなった。畑地に立つと、スズメ・カラス・ムクドリに混じってウグイスのさえずりとケリの甲高い声が聞こえてくるくらいである。
 もう水鳥はいないだろうと思っていた尾美濃池に、北へ帰りそびれたのか、キンクロハジロのワンペアが、カイツブリの親子の横で泳いでいた。

 鳥は少ないが、その代わりに蝶の種類が増えてきた。先日、ビギナーズラックで出会うことができたコムラサキとヒオドシチョウが吸蜜にきていたアカメヤナギが生えている摺鉢池に足を向けた。この池の周りには、アカメヤナギ以外にどなたかが植えられた思われるトウネズミモチが花をつけている。この薄いクリーム色の花序に、いろいろな蝶がやってきて吸蜜をする。姿はよく見かけるが、なかなか停止してくれなくて写真が撮りにくいアオスジアゲハが飛んできて花から花へ飛び回ってくれた。アゲハチョウツマグロヒョウモンもやってきた。

ムクドリ;クリックすると大きな写真になります アオサギ;クリックすると大きな写真になります キンクロハジロ;クリックすると大きな写真になります カルガモ;クリックすると大きな写真になります
ムクドリ:桃山台公園
2012/6/18
Nikon D7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート (1/1000s ISO3600 F6.3)
露出補正 なし
トリミング
アオサギ:摺鉢池
2012/6/18
Nikon D7000
ΣAPO50-500mm 290mm
(35mm相当430mm)
シャッター優先オート (1/1000s ISO900 F6.3)
露出補正 なし
トリミング
キンクロハジロ:尾美濃池
2012/6/18
Nikon D7000
ΣAPO50-500mm 290mm
(35mm相当430mm)
シャッター優先オート (1/1000s ISO2000 F6.3)
露出補正 なし
トリミング
カルガモ:野々井
2012/6/18
Nikon D7000
ΣAPO50-500mm 290mm
(35mm相当430mm)
シャッター優先オート (1/1000s ISO400 F6.3)
露出補正 なし
トリミング


 鳥は少ないが、その代わりに蝶の種類が増えてきた。先日、ビギナーズラックで出会うことができたコムラサキとヒオドシチョウが吸蜜にきていたアカメヤナギが生えている摺鉢池に足を向けた。この池の周りには、アカメヤナギ以外にどなたかが植えられた思われるクロガネモチが花をつけている。この薄いクリーム色の花序に、いろいろな蝶がやってきて吸蜜をする。姿はよく見かけるが、なかなか停止してくれなくて写真が撮りにくいアオスジアゲハが飛んできて花から花へ飛び回ってくれた。アゲハチョウツマグロヒョウモンもやってきた。

ヒカゲチョウ;クリックすると大きな写真になります キタテハ;クリックすると大きな写真になります コミスジ;クリックすると大きな写真になります ツバメシジミ;クリックすると大きな写真になります
ヒカゲチョウ:摺鉢池
2012/6/18
Nikon D7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート (1/1000s ISO2200 F6.3)
露出補正 なし
トリミング
キタテハ:摺鉢池
2012/6/18
Nikon D7000
ΣAPO50-500mm 480mm
(35mm相当690mm)
シャッター優先オート (1/1000s ISO1100 F6.3)
露出補正 なし
コミスジ:尾美濃池
2012/6/18
Nikon D7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート (1/1000s ISO800 F6.3)
露出補正 なし
トリミング
ツバメシジミ:野々井
2012/6/18
Nikon D7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート (1/1000s ISO1250 F6.3)
露出補正 なし
トリミング

モンシロチョウ;クリックすると大きな写真になります ベニシジミ;クリックすると大きな写真になります キマダラセセリ;クリックすると大きな写真になります アオスジアゲハ;クリックすると大きな写真になります
モンシロチョウ:野々井
2012/6/18
Nikon D7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート (1/1000s ISO800 F6.3)
露出補正 なし
トリミング
ベニシジミ:野々井
2012/6/18
Nikon D7000
ΣAPO50-500mm 340mm
(35mm相当510mm)
シャッター優先オート (1/1000s ISO1600 F6.3)
露出補正 なし
キマダラセセリ:摺鉢池
2012/6/30
Nikon D7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート (1/1250s ISO640 F6.3)
露出補正 なし
トリミング
アオスジアゲハ:摺鉢池
2012/6/30
Nikon D7000
ΣAPO50-500mm 500mm
(35mm相当750mm)
シャッター優先オート (1/1250s ISO450 F6.3)
露出補正 なし
トリミング


詳細は、探鳥日誌(current)を参照ください。