Home > WEB | javascript | デザイン > Googleストリートビューでもっと下北をウロウロさせる!

Googleストリートビューでもっと下北をウロウロさせる!

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

ちょっとコレで、ゲームなぞ作ってみようかなーとか。

FlashPlayer9必須みたいです。
環境によってはすごい重いかもしれません。

↓実行サンプルとソース

曲がるときのイージングをJavaScriptのタイマーで強引にやって、
もっとさくさく歩くようにしました。

setInterval で角度をちょっとずつ動かしています。

JAVASCRIPT:
  1. // onEnterFrame的になめらかに曲がる
  2. function yawPan(){
  3.      var pov = streetPanorama.getPOV();
  4.      if(Math.abs( nowYaw - nextYaw ) <5 ){
  5.          clearInterval(yawInterval);
  6.          moveNextPanorama();
  7.      }else{
  8.          nowYaw += (nextYaw - nowYaw) * 0.2;
  9.          pov.yaw = nowYaw;
  10.          streetPanorama.setPOV(pov);
  11.      }
  12. }

たまに隣のポジションの緯度経度の取得に失敗することがあるようですが、
基本的には、ほっとくとどこまでも歩いていきます。

緯度経度取得に頼らないで、panoIDで隣を取得していくように変えようかしら。

↓以下ソース全部

JAVASCRIPT:
  1. var lastPanoId = null;         // 最後にいた場所のPanoID
  2. var nowLatLng;
  3. var map;
  4. var streetViewClient;
  5. var streetPanorama;
  6. var nextYaw;      // 次に向かう方向
  7. var nowYaw;
  8.  
  9. var moveInterval; // 移動のインターバル用
  10. var yawInterval;  // 向きを変えてから移動するため
  11. function initMap(lat, lng){
  12.    map = new GMap2(document.getElementById("map"));
  13.    map.disableDragging();
  14.    var ctrlObj = new GMapTypeControl();
  15.    var pos = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(5, 15));
  16.    map.addControl(ctrlObj, pos);
  17.    map.setCenter(new GLatLng(lat, lng), 18);
  18.    initPanorama(lat, lng);
  19. }
  20.  
  21. function initPanorama(lat, lng){
  22.    streetViewClient = new GStreetviewClient;
  23.    streetPanorama = new GStreetviewPanorama(document.getElementById("pano"));
  24.    nowLatLng = new GLatLng(lat, lng);
  25.    streetViewClient.getNearestPanoramaLatLng(nowLatLng, function(latlng){
  26.     if(latlng == null){
  27.         document.getElementById("pano").style.display = "none";
  28.             return;
  29.         }
  30.     nowLatLng = latlng;
  31.         streetPanorama.setLocationAndPOV(nowLatLng, {yaw: 180, pitch: 0, zoom: -1});
  32.  
  33. /* 移動時に手動で変更
  34.     GEvent.addListener(streetPanorama,
  35.                                 "yawchanged",
  36.                                 function(yaw){
  37.                                     changeYaw(yaw);
  38.                                 });       
  39. */
  40.         // 3秒後に移動
  41.         moveInterval = setInterval(toNextPanorama, 2000);
  42.    })
  43.  
  44. }
  45.  
  46. function changeYaw(yaw){
  47.     var gifFile;
  48.     if( yaw> 360 ) yaw -= 360;
  49.     if( yaw>= 315 || yaw <45  ) gifFile = "/common/image/ue.gif";
  50.     else if( yaw>= 45 && yaw < 135 ) gifFile = "/common/image/migi.gif";
  51.     else if( yaw>= 135 && yaw < 225 ) gifFile = "/common/image/shita.gif";
  52.     else if( yaw>= 225 || yaw <315 ) gifFile = "/common/image/hidari.gif";
  53.     document.getElementById("girl").innerHTML = '<img src="'+ gifFile +'" alt="gial"/>';
  54. }
  55.  
  56. // 現在の表示位置から一番近いStreetViewDataを取得し、そこから隣接するパノラマに移動する
  57. function toNextPanorama(){
  58.    clearInterval(moveInterval);
  59.    // 現在の表示位置の緯度経度を取得
  60.    streetViewClient.getNearestPanorama(nowLatLng, function(streetData){
  61.  
  62.         var neighbourCount = streetData.links.length; // 隣接するパノラマの数
  63.  
  64.     var nextPanoId; // 次に向かうパノラマのID
  65.     if(neighbourCount == 1){
  66.             // 隣接するパノラマが1つだった場合はそこへ移動
  67.             nextYaw = streetData.links[0].yaw;
  68.         nextPanoId = streetData.links[0].panoId;
  69.         }else{
  70.            while(1){
  71.                i = Math.floor( Math.random() * neighbourCount );
  72.                if(lastPanoId != streetData.links[i].panoId){
  73.                     nextPanoId = streetData.links[i].panoId;
  74.                     nextYaw = streetData.links[i].yaw;
  75.                     break;
  76.                }
  77.            }
  78.         }
  79.         lastPanoId = streetData.location.panoId;     // 今いた場所を覚えておく
  80.         streetViewClient.getPanoramaById( nextPanoId,
  81.                                           function(nextStreetData){
  82.                                               nowLatLng = nextStreetData.location.latlng;
  83.                                               var pov = streetPanorama.getPOV();
  84.                                               nowYaw = pov.yaw;
  85.                                               if(nowYaw> 360) nowYaw -= 360;
  86.                                               if(Math.abs(nowYaw - nextYaw)> 180){
  87.                                                   if(nowYaw> nextYaw) nextYaw += 360;
  88.                                                   else nowYaw += 360;
  89.                                               }
  90.                                               yawInterval = setInterval(yawPan, 100);
  91.  
  92.                                           }
  93.                                          );
  94.    }
  95.    );
  96. }
  97.  
  98. // onEnterFrame的になめらかに曲がる
  99. function yawPan(){
  100.      var pov = streetPanorama.getPOV();
  101.      if(Math.abs( nowYaw - nextYaw ) <5 ){
  102.          clearInterval(yawInterval);
  103.          moveNextPanorama();
  104.      }else{
  105.          nowYaw += (nextYaw - nowYaw) * 0.2;
  106.          pov.yaw = nowYaw;
  107.          streetPanorama.setPOV(pov);
  108.      }
  109. }
  110.  
  111. function moveNextPanorama(){
  112.     clearInterval(yawInterval);
  113.     // さらに次のポイントへ移動へ
  114.     map.panTo(nowLatLng);
  115.  
  116.     // 移動
  117.   changeYaw(nextYaw);
  118.     streetPanorama.followLink(nextYaw);
  119.     moveInterval = setInterval(toNextPanorama, 1500);
  120. }

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://parpue.net/web/241/trackback
Listed below are links to weblogs that reference
Googleストリートビューでもっと下北をウロウロさせる! from parpue.net

Home > WEB | javascript | デザイン > Googleストリートビューでもっと下北をウロウロさせる!

リンク
chocolataste-planner
millon

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

Return to page top