2016-05-05 6 views
0

これは、この問題をどのように扱うかについて時間をかけて調査したStackoverflowの最初の投稿です(Stackoverflow自体で検索しています)。Google Maps API Javascriptを使用してマーカーの上限を削除する

このコードに含まれるマーカーの「制限」を削除する方法を知りたいと思います。私はGoogle Maps APIを使ってかなり新しくなっているので、コードが混乱していると思われる場合は事前にお詫びします。 Google Maps APIからジオコード機能+オートコンプリート機能を使用しています。

<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; 
    } 
    </style> 

    <body> 
    <div id="page-wrapper" class="google-map" style="padding:0;"> 
     <div class="col-xs-12 col-sm-6 google-map" style="padding:0;"> 
      <ul class="list-group"> 
       <li class="list-group-item"> 
        <h4>Item header</h4> 
        <address> 
         Address line 1<br> 
         Address line 2<br> 
         City<br> 
         Post Code     
        </address> 
       </li> 
      </ul> 
     </div> 
     <div class="col-xs-12 col-sm-6 google-map" style="padding:0;"> 
      <input id="pac-input" class="form-control controls" type="text" placeholder="Search Box"> 
      <div id="map"></div> 
     </div> 
    </div> 

    </body> 
    <script> 
    function initAutocomplete() { 
      var bounds = new google.maps.LatLngBounds(); 
      var myOptions = { 
        mapTypeId: 'roadmap' 
      }; 
      var addresses = ['WF1 1DE', 'SE6 4XN', 'SW15 5DD', 'CV10 7AL', 'BN10 7JG', 'BS14 8PZ', 'BN1 3DA', 'CV11 5HF', 'SE23 3SA', 'BN2 5QX', 'ST4 8YL', 'CM3 5SF', 'SP4 9JZ']; 
     // Info Window Content 
     var infoWindowContent = ['<div class="info_content"><h4>Item header</h4><p>Address line 1<br>Address line 2<br>City</p></div>']; 
      geocoder = new google.maps.Geocoder(); 
      map = new google.maps.Map(document.getElementById("map"), myOptions); 
      // 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 = []; 

      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) { 
        // Create a marker for each place. 
        markers.push(new google.maps.Marker({ 
         map: map, 
         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); 
      }); 


      if (geocoder) { 

        // Display multiple markers on a map 
        var infoWindow = new google.maps.InfoWindow(); 
        var counter = 0; 

        for (var x = 0; x < addresses.length; x++) { 

          geocoder.geocode({ 
            'address': addresses[x] 
          }, function (results, status) { 
            if (status == google.maps.GeocoderStatus.OK) { 
              if (status != google.maps.GeocoderStatus.ZERO_RESULTS) { 

                var iwContent = infoWindowContent[counter]; 

                var marker = new google.maps.Marker({ 
                  position: results[0].geometry.location, 
                  map: map, 
                  title: addresses[counter] 
                }); 

                google.maps.event.addListener(marker, 'click', function() { 

                  infoWindow.setContent(iwContent); 
                  infoWindow.open(map, marker); 
                }); 

                counter++; 

                // Automatically center the map fitting all markers on the screen 
                bounds.extend(results[0].geometry.location); 
                map.fitBounds(bounds); 
              } 
            } 
          }); 
        } 
      } 
    } 
    </script> 
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places&callback=initAutocomplete" async defer></script> 

私は答えは周りのどこかにあると信じています:

for (var x = 0; x < addresses.length; x++) { 

      geocoder.geocode({ 
        'address': addresses[x] 
      }, function (results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
          if (status != google.maps.GeocoderStatus.ZERO_RESULTS) { 

            var iwContent = infoWindowContent[counter]; 

            var marker = new google.maps.Marker({ 
              position: results[0].geometry.location, 
              map: map, 
              title: addresses[counter] 
            }); 

            google.maps.event.addListener(marker, 'click', function() { 

              infoWindow.setContent(iwContent); 
              infoWindow.open(map, marker); 
            }); 

            counter++; 

            // Automatically center the map fitting all markers on the screen 
            bounds.extend(results[0].geometry.location); 
            map.fitBounds(bounds); 
          } 
        } 
      }); 
    } 

この時点で、それが唯一のいくつかの理由で11個のマーカーが表示されます。データベースからデータを取得するときに、必要なだけ多く表示できるようにする必要があります。

ありがとうございます!

+0

が唯一の12の長さで、そしてあなたのforループが言います " 「i」が「住所」の長さ未満の何かをします –

+0

(var x = 0; x scaisEdge

+0

住所の1つが存在しない可能性はありますか?例:SS27 3PY –

答えて

1

ジオコーダーにはクォータとレート制限が適用されます。サービスがOKでないときに返されるステータスを確認します。それはOVER_QUERY_LIMITです。

ステータスOVER_QUERY_LIMITをサービスから処理するソリューションはいくつかあります。オプションのカップル:それはあなたが 'VARアドレス' それを渡している配列のように見えます

+0

アドレスがバッチ10で分割され、何とかsetTimeout関数で各バッチの実行が遅れることがありますか? –

+0

ありがとう、私は実際にはすでにserviによって返された状態をチェックするために問題を修正しましたOVER_QUERY_LIMITになりました。私はそれらの他のトピックに行き、ソリューションをコンパイルすることができました。ありがとう! – User132456789

関連する問題