0

Google のストリート ビュー内でカスタム パノラマを使用して、バーチャル ツアー アプリケーションを構築しています。リンクの動作は、次の 2 つの点で奇妙です。

  1. localhost 経由でアクセスして更新すると、開始パノラマにリンクが表示されません。Web アクセスを IP アドレスに変更すると、この問題が解決します
  2. IP アドレス経由でアクセスすると、最初のリンク イベントが実行され、2 番目のパノラマに移動します。linksパノラマ オブジェクト内の配列に期待されるデータが表示されていても、2 番目のパノラマにはリンクが読み込まれません。

Googleのサイトにはいくつかの例があり、私はそれを出発点として使用しています。

1 つの問題は、私が遭遇した各例では、各パノラマのすべての値を手動で特定の方法で書き出す必要があることです。このツアーには最大 100 か所の停留所があるため、このアプローチは使用できません。getCustomPanoramaそのため、例とcreateCustomLinks関数を配列に合わせて調整しました。

Google の例の switch メソッドに依存するのではなく、データベースの戻り値を JSON オブジェクトとして保持し、それを反復して必要な値を生成します。

function getCustomPanorama(pano, zoom, tileX, tileY){
  var obj;
  for (var i=0; i<tourData.length; i++){
    if (tourData[i].name == pano){      
      obj = {
        location: { //create StreetViewLocation object
          pano: tourData[i].name,
          description: tourData[i].name,
          latLng: google.maps.LatLng(tourData[i].lat, tourData[i].lon)
        },
         links: [], //create StreetViewLink object 
        tiles: { //create a StreetViewTileData object with properties
          tileSize: new google.maps.Size(tourData[i].width, tourData[i].height),
          worldSize: new google.maps.Size(tourData[i].width, tourData[i].height),
          centerHeading: tourData[i].heading,
          zoom: -1,
          getTileUrl: getCustomPanoramaTileUrl
        }
      } //end object creation

      break;
    }
  }
  return obj;
}

カスタム リンクの作成と同じです。

function createCustomLinks(){
  var panoLinks = panotour.getLinks();
  var panoID = panotour.getPano();

  var links = $.ajax({
    type: "GET",
    url: "includes/phpscripts.php?action=getLinks&name="+panoID,
    dataType: "json",
    success: function(data){
      if (data){
        console.log("Links grabbed: "+data.length);

        //loop over response, add link to array
        for(var i=0; i<data.length; i++){
          panoLinks.push({'heading': data[i].heading, 'description': data[i].description, 'pano': data[i].description});
        }

        console.log("Panorama Lins: "+panoLinks)

      } else {
        console.log("Can't get link info");
      }
    }   
  });
}

これらの問題を解決するための助けをいただければ幸いです。

4

1 に答える 1

1

何かをデバッグする前に、おそらく Chrome に切り替える必要があります (まだ Chrome を使用していない場合)。私はGoogle の例を見ていましたが、そこではうまくいきましたが、Firefox 13 では、ページをリロードすると「Google Sydney」のリンクが表示されないことがあります。リンクが表示されない理由を理解しようとしている場合、あまり信頼できません。

あなたの問題について:私が最初に試みることは(上記の非決定論的な動作のため)、設定によって同期.ajax()内で呼び出しを行い、これが何かを変更するかどうかを確認することです。リンクがマップに表示されるように評価された後、リンクを設定している可能性があります。createCustomLinksasync: false

これについてより多くの助けを得るには、実際の例を立てる必要があると思います。

于 2012-07-05T22:11:50.573 に答える