2017-06-30 3 views
2

JavaScript/HTMLで動作するGoogle Maps APIを使用しています。私は単純なボタンを追加しようとしています。ユーザーがこれらのボタンを押すと、地図上で左に曲がり、右に曲がるなどです。しかし、私の関数changeHeadingは呼び出されていますが、呼び出された後は実行されません。何が問題ですか?Google Maps API - 左折、右折などの簡単なボタンの追加

<head> 
     <meta charset="utf-8"> 
     <title>Street View Add Third Panel</title> 
     <style> 
      html, body { 
       height: 100%; 
       margin: 0; 
       padding: 0; 
      } 
      #map { 
       float: left; 
       height: 50%; 
       width: 50%; 
      } 
      #pano { 
       width: 100%; 
       height: 50%; 
      } 
      #floating-panel { 
       float: right; 
       width: 50%; 
       height: 50%; 
      } 
     </style> 
    </head> 
    <body> 
     <div id="map"></div> 
     <div id="floating-panel"> 
     <table> 
      <tr> 
       <td><b>Position</b></td><td id="position-cell">&nbsp;</td> 
      </tr> 
      <tr> 
       <td><b>POV Heading</b></td><td id="heading-cell">270</td> 
      </tr> 
      <tr> 
       <td><b>POV Pitch</b></td><td id="pitch-cell">0.0</td> 
      </tr> 
      <tr> 
       <td><b>Pano ID</b></td><td id="pano-cell">&nbsp;</td> 
      </tr> 
      <tr> 
       <input type="button" value="Turn Left" onclick="changeHeading(-5);"> 
      </tr> 
      <tr> 
       <input type="button" value="Turn Right" onclick="changeHeading(-5);"> 
      </tr> 
      <tr> 
       <input type="button" value="Go Forward" onclick="changeHeading(-5);"> 
      </tr> 
      <tr> 
       <input type="button" value="Go Backward" onclick="changeHeading(-5);"> 
      </tr> 
      <table id="links_table"></table> 
     </table></div> 



     <div id="pano"></div> 
    <script> 

    function initialize() { 
     var fenway = {lat: 42.345573, lng: -71.098326}; 
     var map = new google.maps.Map(document.getElementById('map'), { 
      center: fenway, 
      zoom: 14 
     }); 
     var panorama = new google.maps.StreetViewPanorama(
      document.getElementById('pano'), { 
       position: fenway, 
       pov: { 
        heading: 34, 
        pitch: 10 
       } 
      }); 
     map.setStreetView(panorama); 

     panorama.addListener('pano_changed', function() { 
      var panoCell = document.getElementById('pano-cell'); 
      panoCell.innerHTML = panorama.getPano(); 
     }); 
     panorama.addListener('links_changed', function() { 
      var linksTable = document.getElementById('links_table'); 
      while (linksTable.hasChildNodes()) { 
       linksTable.removeChild(linksTable.lastChild); 
      } 
      var links = panorama.getLinks(); 
      for (var i in links) { 
       var row = document.createElement('tr'); 
       linksTable.appendChild(row); 
       var labelCell = document.createElement('td'); 
       labelCell.innerHTML = '<b>Link: ' + i + '</b>'; 
       var valueCell = document.createElement('td'); 
       valueCell.innerHTML = links[i].description; 
       linksTable.appendChild(labelCell); 
       linksTable.appendChild(valueCell); 
      } 
     }); 
     panorama.addListener('position_changed', function() { 
      var positionCell = document.getElementById('position-cell'); 
      positionCell.firstChild.nodeValue = panorama.getPosition() + ''; 
     }); 
     panorama.addListener('pov_changed', function() { 
      var headingCell = document.getElementById('heading-cell'); 
      var pitchCell = document.getElementById('pitch-cell'); 
      headingCell.firstChild.nodeValue = panorama.getPov().heading + ''; 
      pitchCell.firstChild.nodeValue = panorama.getPov().pitch + ''; 
     }); 


    } 

    function changeHeading(delta) { 
     heading = panorama.getPov().heading; 
     panorama.setPov({ heading: heading + delta }); 
    } 

答えて

0

パノラマはローカル変数であり、changeHeading()関数では使用できません。

  1. var panorama = nullを定義します。は、グローバル変数としての機能の外にあります。
  2. それは新しいローカル変数を作成し、代わりにグローバルなものを使用しないように、「するvarパノラマ=新しいgoogle.maps.StreetViewPanorama(...」からVARを削除
0

を2つの問題。:

  1. パノラマはそうあなたはそれが定義されていることをスコープにgoogle.maps.event.addDomListener機能を使って、これを修正することができます。(グローバルスコープで実行)ボタンのonclick関数内でアクセスすることはできません。、ローカル変数であります

    google.maps.event.addDomListener(document.getElementById("left"),'click', function() {changeHeading(-5)}); 
    google.maps.event.addDomListener(document.getElementById("right"),'click', function() {changeHeading(5)}); 
    
    function changeHeading(delta) { 
        var heading = panorama.getPov().heading; 
        var POV = panorama.getPov(); 
        POV.heading = heading + delta; 
        panorama.setPov(POV); 
    } 
    

    proof of concept fiddle

    :あなたはPOVオブジェクト(そうしないと、InvalidValueError: setPov: in property pitch: not a number javascriptのエラーが発生します)(initMap内側)

でそれを設定する必要がPOVを設定0

  • コードスニペット:

    function initialize() { 
     
        var fenway = { 
     
        lat: 42.345573, 
     
        lng: -71.098326 
     
        }; 
     
        var map = new google.maps.Map(document.getElementById('map'), { 
     
        center: fenway, 
     
        zoom: 14 
     
        }); 
     
        var panorama = new google.maps.StreetViewPanorama(
     
        document.getElementById('pano'), { 
     
         position: fenway, 
     
         pov: { 
     
         heading: 34, 
     
         pitch: 10 
     
         } 
     
        }); 
     
        map.setStreetView(panorama); 
     
    
     
        panorama.addListener('pano_changed', function() { 
     
        var panoCell = document.getElementById('pano-cell'); 
     
        panoCell.innerHTML = panorama.getPano(); 
     
        }); 
     
        panorama.addListener('links_changed', function() { 
     
        var linksTable = document.getElementById('links_table'); 
     
        while (linksTable.hasChildNodes()) { 
     
         linksTable.removeChild(linksTable.lastChild); 
     
        } 
     
        var links = panorama.getLinks(); 
     
        for (var i in links) { 
     
         var row = document.createElement('tr'); 
     
         linksTable.appendChild(row); 
     
         var labelCell = document.createElement('td'); 
     
         labelCell.innerHTML = '<b>Link: ' + i + '</b>'; 
     
         var valueCell = document.createElement('td'); 
     
         valueCell.innerHTML = links[i].description; 
     
         linksTable.appendChild(labelCell); 
     
         linksTable.appendChild(valueCell); 
     
        } 
     
        }); 
     
        panorama.addListener('position_changed', function() { 
     
        var positionCell = document.getElementById('position-cell'); 
     
        positionCell.firstChild.nodeValue = panorama.getPosition() + ''; 
     
        }); 
     
        panorama.addListener('pov_changed', function() { 
     
        var headingCell = document.getElementById('heading-cell'); 
     
        var pitchCell = document.getElementById('pitch-cell'); 
     
        headingCell.firstChild.nodeValue = panorama.getPov().heading + ''; 
     
        pitchCell.firstChild.nodeValue = panorama.getPov().pitch + ''; 
     
        }); 
     
        google.maps.event.addDomListener(document.getElementById("left"), 'click', function() { 
     
        changeHeading(-5) 
     
        }); 
     
        google.maps.event.addDomListener(document.getElementById("right"), 'click', function() { 
     
        changeHeading(5) 
     
        }); 
     
    
     
        function changeHeading(delta) { 
     
        var heading = panorama.getPov().heading; 
     
        var POV = panorama.getPov(); 
     
        POV.heading = heading + delta; 
     
        panorama.setPov(POV); 
     
        } 
     
    } 
     
    google.maps.event.addDomListener(window, "load", initialize);
    html, 
     
    body { 
     
        height: 100%; 
     
        margin: 0; 
     
        padding: 0; 
     
    } 
     
    
     
    #map { 
     
        float: left; 
     
        height: 50%; 
     
        width: 50%; 
     
    } 
     
    
     
    #pano { 
     
        width: 100%; 
     
        height: 50%; 
     
    } 
     
    
     
    #floating-panel { 
     
        float: right; 
     
        width: 50%; 
     
        height: 50%; 
     
    }
    <script src="https://maps.googleapis.com/maps/api/js?libraries=geometry"></script> 
     
    <div id="map"></div> 
     
    <div id="floating-panel"> 
     
        <table> 
     
        <tr> 
     
         <td><b>Position</b></td> 
     
         <td id="position-cell">&nbsp;</td> 
     
        </tr> 
     
        <tr> 
     
         <td><b>POV Heading</b></td> 
     
         <td id="heading-cell">270</td> 
     
        </tr> 
     
        <tr> 
     
         <td><b>POV Pitch</b></td> 
     
         <td id="pitch-cell">0.0</td> 
     
        </tr> 
     
        <tr> 
     
         <td><b>Pano ID</b></td> 
     
         <td id="pano-cell">&nbsp;</td> 
     
        </tr> 
     
        <tr> 
     
         <input type="button" id="left" value="Turn Left" onclick="changeHeading(-5);"> 
     
        </tr> 
     
        <tr> 
     
         <input type="button" id="right" value="Turn Right" onclick="changeHeading(5);"> 
     
        </tr> 
     
        <table id="links_table"></table> 
     
        </table> 
     
    </div> 
     
    
     
    
     
    
     
    <div id="pano"></div>

  • 関連する問題