2016-08-06 21 views
0

JavaScriptの新機能です。 Googleマップに接続されたプログラム(ウェブページに基づく)を作るプロジェクトがあります。Googleマップでの検索ボックスとマーカーの削除API Javascript

私はdeveloper.google.comを読んでそれに固執しています。

、私を助けてどのように2つのサンプルコードの場所の検索ボックス(https://developers.google.com/maps/documentation/javascript/examples/places-searchbox)およびマーカー削除に入社する(https://developers.google.com/maps/documentation/javascript/examples/marker-remove

おかげ

してください更新:これは(今のところ)私のコードです

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
 
    <meta charset="utf-8"> 
 
    <title>Places Searchbox</title> 
 
    <style> 
 
     html, body { 
 
     height: 100%; 
 
     margin: 0; 
 
     padding: 0; 
 
     } 
 
     #map { 
 
     height: 100%; 
 
     } 
 
     .controls { 
 
     margin-top: 10px; 
 
     border: 1px solid transparent; 
 
     border-radius: 2px 0 0 2px; 
 
     box-sizing: border-box; 
 
     -moz-box-sizing: border-box; 
 
     height: 32px; 
 
     outline: none; 
 
     box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); 
 
     } 
 

 
     #pac-input { 
 
     background-color: #fff; 
 
     font-family: Roboto; 
 
     font-size: 15px; 
 
     font-weight: 300; 
 
     margin-left: 12px; 
 
     padding: 0 11px 0 13px; 
 
     text-overflow: ellipsis; 
 
     width: 300px; 
 
     } 
 

 
     #pac-input:focus { 
 
     border-color: #4d90fe; 
 
     } 
 

 
     .pac-container { 
 
     font-family: Roboto; 
 
     } 
 

 
     #type-selector { 
 
     color: #fff; 
 
     background-color: #4d90fe; 
 
     padding: 5px 11px 0px 11px; 
 
     } 
 

 
     #type-selector label { 
 
     font-family: Roboto; 
 
     font-size: 13px; 
 
     font-weight: 300; 
 
     } 
 
     #target { 
 
     width: 345px; 
 
     } 
 
\t #floating-panel { 
 
     position: absolute; 
 
     top: 10px; 
 
     left: 25%; 
 
     z-index: 5; 
 
     background-color: #fff; 
 
     padding: 5px; 
 
     border: 1px solid #999; 
 
     text-align: center; 
 
     font-family: 'Roboto','sans-serif'; 
 
     line-height: 30px; 
 
     padding-left: 10px; 
 
     } 
 
    </style> 
 
    </head> 
 
    <body> 
 
    <input id="pac-input" class="controls" type="text" placeholder="Search Box"> 
 
    <div id="floating-panel"> 
 
     <input onclick="clearMarkers();" type=button value="Hide Markerr"> 
 
     <input onclick="showMarkers();" type=button value="Show All Markerr"> 
 
     <input onclick="deleteMarkers();" type=button value="Delete Markerr"> 
 
    </div> 
 
\t <div id="map"></div> 
 
    <script> 
 
     // This example adds a search box to a map, using the Google Place Autocomplete 
 
     // feature. People can enter geographical searches. The search box will return a 
 
     // pick list containing a mix of places and predicted search terms. 
 

 
     // This example requires the Places library. Include the libraries=places 
 
     // parameter when you first load the API. For example: 
 
     // <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"> 
 

 
     function initAutocomplete() { 
 
\t \t var Markerr = []; 
 
     var map = new google.maps.Map(document.getElementById('map'), { 
 
      center: {lat: -7.266813, lng: 112.770218}, 
 
      zoom: 13, 
 
      mapTypeId: 'roadmap' 
 
     }); 
 
\t \t 
 
\t \t 
 
     // Create the search box and link it to the UI element. 
 
     var input = document.getElementById('pac-input'); 
 
     var searchBox = new google.maps.places.SearchBox(input); 
 
     map.controls[google.maps.ControlPosition.TOP_LEFT].push(input); 
 

 
     // Bias the SearchBox results towards current map's viewport. 
 
     map.addListener('bounds_changed', function() { 
 
      searchBox.setBounds(map.getBounds()); 
 
     }); 
 

 
     var markers = []; 
 
     // Listen for the event fired when the user selects a prediction and retrieve 
 
     // more details for that place. 
 
     searchBox.addListener('places_changed', function() { 
 
      var places = searchBox.getPlaces(); 
 

 
      if (places.length == 0) { 
 
      return; 
 
      } 
 

 
      // Clear out the old markers. 
 
      markers.forEach(function(marker) { 
 
      marker.setMap(null); 
 
      }); 
 
      markers = []; 
 

 
      // For each place, get the icon, name and location. 
 
      var bounds = new google.maps.LatLngBounds(); 
 
      places.forEach(function(place) { 
 
      if (!place.geometry) { 
 
       console.log("Returned place contains no geometry"); 
 
       return; 
 
      } 
 
      var icon = { 
 
       url: place.icon, 
 
       size: new google.maps.Size(71, 71), 
 
       origin: new google.maps.Point(0, 0), 
 
       anchor: new google.maps.Point(17, 34), 
 
       scaledSize: new google.maps.Size(25, 25) 
 
      }; 
 

 
      // Create a marker for each place. 
 
      markers.push(new google.maps.Marker({ 
 
       map: map, 
 
       icon: icon, 
 
       title: place.name, 
 
       position: place.geometry.location 
 
      })); 
 

 
      if (place.geometry.viewport) { 
 
       // Only geocodes have viewport. 
 
       bounds.union(place.geometry.viewport); 
 
      } else { 
 
       bounds.extend(place.geometry.location); 
 
      } 
 
      }); 
 
      map.fitBounds(bounds); 
 
     }); 
 
\t \t // ----------------------------- 
 
\t \t // This event listener will call addMarker() when the map is clicked. 
 
     map.addListener('click', function(event) { 
 
      addMarker(event.latLng); 
 
     }); 
 

 
     // Adds a marker at the center of the map. 
 
     addMarker(haightAshbury); 
 
\t \t 
 
\t \t // ********************************* 
 
     } 
 
\t \t // Adds a marker to the map and push to the array. 
 
     function addMarker(location) { 
 
     var marker = new google.maps.Marker({ 
 
      position: location, 
 
      map: map 
 
     }); 
 
     Markerr.push(marker); 
 
     } 
 

 
     // Sets the map on all Markerr in the array. 
 
     function setMapOnAll(map) { 
 
     for (var i = 0; i < Markerr.length; i++) { 
 
      Markerr[i].setMap(map); 
 
     } 
 
     } 
 

 
     // Removes the Markerr from the map, but keeps them in the array. 
 
     function clearMarkers() { 
 
     setMapOnAll(null); 
 
     } 
 

 
     // Shows any Markerr currently in the array. 
 
     function showMarkers() { 
 
     setMapOnAll(map); 
 
     } 
 

 
     // Deletes all Markerr in the array by removing references to them. 
 
     function deleteMarkers() { 
 
     clearMarkers(); 
 
     Markerr = []; 
 
     } 
 
    </script> 
 
    <script src="https://maps.googleapis.com/maps/api/js?key=[API]&libraries=places&callback=initAutocomplete" 
 
     async defer></script> 
 
    </body> 
 
</html>

+0

私は投稿のコードでJavaScriptのエラーが出る: 'キャッチされないにReferenceErrorを:haightAshburyがため – geocodezip

+0

ありがとう@geocodezipをdefined'されていませんあなたの反応。 実際には、私は正しいワット(コード中)であるかどうかはわかりません。 https://developers.google.com/maps/documentation/javascript/examples/places-searchboxとhttps://developers.google.com/maps/documentation/javascript/examples/markerでコードに参加できますか? -remove? ありがとう –

答えて

2

投稿されたjavascriptにエラーがあります。

  1. Uncaught ReferenceError: haightAshbury is not defined
  2. Uncaught ReferenceError: Markerr is not defined
  3. ...

主な問題は、それらがグローバルスコープに移動されるとmarkers配列とmap変数は、グローバルスコープでないことですMarkerr配列への参照が削除された場合(またはmarkersに変更された場合)、ボタンは機能します(または、少なくとも私が期待することを実行します)。

proof of concept fiddle

コードスニペット:

// global variables 
 
var markers = []; 
 
var map; 
 
function initAutocomplete() { 
 
    // initialize the global map variable 
 
    map = new google.maps.Map(document.getElementById('map'), { 
 
    center: { 
 
     lat: -7.266813, 
 
     lng: 112.770218 
 
    }, 
 
    zoom: 13, 
 
    mapTypeId: 'roadmap' 
 
    }); 
 

 

 
    // Create the search box and link it to the UI element. 
 
    var input = document.getElementById('pac-input'); 
 
    var searchBox = new google.maps.places.SearchBox(input); 
 
    var floatBox = document.getElementById('floating-panel'); map.controls[google.maps.ControlPosition.TOP_LEFT].push(floatBox); 
 

 
    // Bias the SearchBox results towards current map's viewport. 
 
    map.addListener('bounds_changed', function() { 
 
    searchBox.setBounds(map.getBounds()); 
 
    }); 
 

 
    
 
    // Listen for the event fired when the user selects a prediction and retrieve 
 
    // more details for that place. 
 
    searchBox.addListener('places_changed', function() { 
 
    var places = searchBox.getPlaces(); 
 

 
    if (places.length == 0) { 
 
     return; 
 
    } 
 

 
    // Clear out the old markers. 
 
    markers.forEach(function(marker) { 
 
     marker.setMap(null); 
 
    }); 
 
    markers = []; 
 

 
    // For each place, get the icon, name and location. 
 
    var bounds = new google.maps.LatLngBounds(); 
 
    places.forEach(function(place) { 
 
     if (!place.geometry) { 
 
     console.log("Returned place contains no geometry"); 
 
     return; 
 
     } 
 
     var icon = { 
 
     url: place.icon, 
 
     size: new google.maps.Size(71, 71), 
 
     origin: new google.maps.Point(0, 0), 
 
     anchor: new google.maps.Point(17, 34), 
 
     scaledSize: new google.maps.Size(25, 25) 
 
     }; 
 

 
     // Create a marker for each place. 
 
     markers.push(new google.maps.Marker({ 
 
     map: map, 
 
     icon: icon, 
 
     title: place.name, 
 
     position: place.geometry.location 
 
     })); 
 

 
     if (place.geometry.viewport) { 
 
     // Only geocodes have viewport. 
 
     bounds.union(place.geometry.viewport); 
 
     } else { 
 
     bounds.extend(place.geometry.location); 
 
     } 
 
    }); 
 
    map.fitBounds(bounds); 
 
    }); 
 
    // ----------------------------- 
 
    // This event listener will call addMarker() when the map is clicked. 
 
    map.addListener('click', function(event) { 
 
    addMarker(event.latLng); 
 
    }); 
 

 
    // Adds a marker at the center of the map. 
 
    // addMarker(haightAshbury); 
 

 
    // ********************************* 
 
} 
 
// Adds a marker to the map and push to the array. 
 

 
function addMarker(location) { 
 
    var marker = new google.maps.Marker({ 
 
    position: location, 
 
    map: map 
 
    }); 
 
    markers.push(marker); 
 
} 
 

 
// Sets the map on all Markerr in the array. 
 
function setMapOnAll(map) { 
 
    for (var i = 0; i < markers.length; i++) { 
 
    markers[i].setMap(map); 
 
    } 
 
} 
 

 
// Removes the Markerr from the map, but keeps them in the array. 
 
function clearMarkers() { 
 
    setMapOnAll(null); 
 
} 
 

 
// Shows any Markerr currently in the array. 
 
function showMarkers() { 
 
    setMapOnAll(map); 
 
} 
 

 
// Deletes all Markerr in the array by removing references to them. 
 
function deleteMarkers() { 
 
    clearMarkers(); 
 
    markers = []; 
 
} 
 
google.maps.event.addDomListener(window, "load", initAutocomplete);
html, 
 
body { 
 
    height: 100%; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
#map { 
 
    height: 100%; 
 
} 
 

 
.controls { 
 
    margin-top: 10px; 
 
    border: 1px solid transparent; 
 
    border-radius: 2px 0 0 2px; 
 
    box-sizing: border-box; 
 
    -moz-box-sizing: border-box; 
 
    height: 32px; 
 
    outline: none; 
 
    box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3); 
 
} 
 

 
#pac-input { 
 
    background-color: #fff; 
 
    font-family: Roboto; 
 
    font-size: 15px; 
 
    font-weight: 300; 
 
    margin-left: 12px; 
 
    padding: 0 11px 0 13px; 
 
    text-overflow: ellipsis; 
 
    width: 300px; 
 
} 
 

 
#pac-input:focus { 
 
    border-color: #4d90fe; 
 
} 
 

 
.pac-container { 
 
    font-family: Roboto; 
 
} 
 

 
#type-selector { 
 
    color: #fff; 
 
    background-color: #4d90fe; 
 
    padding: 5px 11px 0px 11px; 
 
} 
 

 
#type-selector label { 
 
    font-family: Roboto; 
 
    font-size: 13px; 
 
    font-weight: 300; 
 
} 
 

 
#target { 
 
    width: 345px; 
 
} 
 

 
#floating-panel { 
 
    position: absolute; 
 
    top: 10px; 
 
    left: 25%; 
 
    z-index: 5; 
 
    background-color: #fff; 
 
    padding: 5px; 
 
    border: 1px solid #999; 
 
    text-align: center; 
 
    font-family: 'Roboto', 'sans-serif'; 
 
    line-height: 30px; 
 
    padding-left: 10px; 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script> 
 
<div id="floating-panel"> 
 
<input id="pac-input" class="controls" type="text" placeholder="Search Box" /><br> 
 
    <input onclick="clearMarkers();" type=button value="Hide Markerr"> 
 
    <input onclick="showMarkers();" type=button value="Show All Markerr"> 
 
    <input onclick="deleteMarkers();" type=button value="Delete Markerr"> 
 
</div> 
 
<div id="map"></div>

+0

ありがとうございます@geocodezip 私は自分自身を試して、私の構造にそれを適応させてきました。それは本当に仕事です。もう一度ありがとう –

+0

これがあなたの質問に答えたなら、[それを受け入れてください](http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work) – geocodezip

関連する問題