Home > WEB | javascript | デザイン > Googleストリートビューで勝手に下北沢周辺を散歩するやつ作ってみた

Googleストリートビューで勝手に下北沢周辺を散歩するやつ作ってみた

Googleストリートビュー、日本地域も対応して、にぎやかな事になってますね。
自分の住んでるところとか、なつかしのあの場所とか見ると本当におもしろい!

周囲を360度パノラマで見ることができることにもびっくりです。

というわけで、さっそくGoogleMapsと、このストリートビューを使って、
下北界隈を勝手に散歩するようなものを作ってみた。

↓以下続き

画像は、マウスドラッグやアイコンクリックで回転することができます。
キャラクタが向いている方向が、表示されている画像の方向です。
移動については制御不能です。勝手に散歩し続けます。

まだリファレンスの日本語化ができていないようなので、
http://code.google.com/intl/en/apis/maps/documentation/reference.html 
を読みながら作ってみました。

独特な関数が多かったですが、作ってて面白かったです。

今回目をつけたのが、GStreetviewDataクラスのlinkパラメータ。
「Array of GStreetviewLink」
Links to neighbouring panoramas, if any. (Since 2.104)

とあり、お隣のパノラマ画像がある位置の情報が取れるようです。

あとは迷路プログラムのような感じで作り上げました。

現在位置から移動できる隣接のポイントを取得
 ↓
取得したもののうち、前いたポイントではないものを選択して移動

コレを繰り返すことによって、
直線を進み、交差点ではランダムに曲がります。

以下ソースコード全文です。initMap(緯度、経度)でお散歩スタートです。

JAVASCRIPT:
  1. var lastPanoId = null;         // 最後にいた場所のPanoID
  2. var nowLatLng;
  3. var map;
  4. var streetViewClient;
  5. var streetPanorama;
  6. var moveInterval;
  7.  
  8. function initMap(lat, lng){
  9.    map = new GMap2(document.getElementById("map"));
  10.    map.disableDragging();
  11.    var ctrlObj = new GMapTypeControl();
  12.    var pos = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(5, 15));
  13.    map.addControl(ctrlObj, pos);
  14.    map.setCenter(new GLatLng(lat, lng), 18);
  15.    initPanorama(lat, lng);
  16. }
  17.  
  18. function initPanorama(lat, lng){
  19.    streetViewClient = new GStreetviewClient;
  20.    streetPanorama = new GStreetviewPanorama(document.getElementById("pano"));
  21.    nowLatLng = new GLatLng(lat, lng);
  22.    streetViewClient.getNearestPanoramaLatLng(nowLatLng, function(latlng){
  23.        if(latlng == null){
  24.            document.getElementById("pano").style.display = "none";
  25.            return;
  26.        }
  27.        nowLatLng = latlng;
  28.        streetPanorama.setLocationAndPOV(nowLatLng, {yaw: 180, pitch: 0, zoom: -1});
  29.  
  30.        GEvent.addListener(streetPanorama,
  31.                           "yawchanged",
  32.                           function(yaw){
  33.                               changeYaw(yaw);
  34.                           });
  35.  
  36.         // 3秒後に移動
  37.         moveInterval = setInterval(toNextPanorama, 3000);
  38.    })
  39. }
  40.  
  41. function changeYaw(yaw){
  42.     var gifFile;
  43.     if( yaw>= 315 || yaw <45  ) gifFile = "/common/image/ue.gif";
  44.     else if( yaw>= 45 && yaw <135 ) gifFile = "/common/image/migi.gif";
  45.     else if( yaw>= 135 && yaw <225 ) gifFile = "/common/image/shita.gif";
  46.     else if( yaw>= 225 || yaw <315 ) gifFile = "/common/image/hidari.gif";
  47.     document.getElementById("girl").innerHTML = '<img src="'+ gifFile +'" alt="gial"/>';
  48. }
  49.  
  50. // 現在の表示位置から一番近いStreetViewDataを取得し、そこから隣接するパノラマに移動する
  51. function toNextPanorama(){
  52.     clearInterval(moveInterval);
  53.     // 現在の表示位置の緯度経度を取得
  54.     streetViewClient.getNearestPanorama(nowLatLng, function(streetData){
  55.         var neighbourCount = streetData.links.length; // 隣接するパノラマの数
  56.  
  57.         var nextYaw; // 次に向かう方向
  58.         var nextPanoId; // 次に向かうパノラマのID
  59.         if(neighbourCount == 1){
  60.             // 隣接するパノラマが1つだった場合はそこへ移動
  61.             nextYaw = streetData.links[0].yaw;
  62.             nextPanoId = streetData.links[0].panoId;
  63.         }else{
  64.             while(1){
  65.                i = Math.floor( Math.random() * neighbourCount );
  66.                if(lastPanoId != streetData.links[i].panoId){
  67.                     nextPanoId = streetData.links[i].panoId;
  68.                     nextYaw = streetData.links[i].yaw;
  69.                     break;
  70.                }
  71.            }
  72.         }
  73.         lastPanoId = streetData.location.panoId;     // 今いた場所を覚えておく
  74.         streetViewClient.getPanoramaById( nextPanoId,
  75.                                           function(nextStreetData){
  76.                                               nowLatLng = nextStreetData.location.latlng;
  77.                                               // 目的地へGO!
  78.                                               //streetPanorama.setLocationAndPOV( nowLatLng, {yaw:nextYaw, pitch:0, zoom:-1});
  79.                                               streetPanorama.followLink(nextYaw);
  80.                                               map.panTo(nowLatLng);
  81.                                               //streetPanorama.setPOV({yaw:nextYaw, pitch:0, zoom:-1});
  82.                                               moveInterval = setInterval(toNextPanorama, 3000);
  83.                                           }
  84.                                          );
  85.    }
  86.    );
  87. }

ちなみにコレを応用したものを millon でも利用してみました。

Comments:0

Comment Form
Remember personal info

Trackbacks:1

Trackback URL for this entry
http://parpue.net/web/196/trackback
Listed below are links to weblogs that reference
Googleストリートビューで勝手に下北沢周辺を散歩するやつ作ってみた from parpue.net
pingback from parpue.net - Googleストリートビューで下北をウロウロうろうろさせる! 08-08-07 (木) 17:59

[...] 前作ったやつを、もうちょっと作りこみ。 曲がるときもっとスムーズに曲がってくれるようにして、歩くスピードをアップ。 [...]

Home > WEB | javascript | デザイン > Googleストリートビューで勝手に下北沢周辺を散歩するやつ作ってみた

リンク
chocolataste-planner
millon

サーチ
Feeds
Meta
blog ranking ブログランキング・にほんブログ村へ
にほんブログ村 テクノラティのお気に入りに追加する

Return to page top