1

同僚のスクリプトを見つけました。

私が欲しいのは、米国とカナダの場所の Google マップからのオートコンプリートだけです。複数の国を追加できないことcomponentRestrictionsがわかりましたが、回避策を知っていれば、それも非常に役立ちます。

ここにあるスクリプトは次のとおりです。

<!DOCTYPE html>
<html>
  <head>
    <title>Google Maps JavaScript API v3 Example: Places Autocomplete</title>
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
    <style>
      body {
        font-family: sans-serif;
        font-size: 14px;
      }
      #map_canvas {
        height: 400px;
        width: 600px;
        margin-top: 0.6em;
      }
      input {
        border: 1px solid  rgba(0, 0, 0, 0.5);
      }
      input.notfound {
        border: 2px solid  rgba(255, 0, 0, 0.4);
      }
    </style>
    <script>
      function initialize() {
        var input = document.getElementById('searchTextField');
        var options = {
            types: ['(cities)'],
            componentRestrictions: {country: 'us'}
        };

        var autocomplete = new google.maps.places.Autocomplete(input, options);

        // Sets a listener on a radio button to change the filter type on Places
        // Autocomplete.
        function setupClickListener(id, types) {
          var radioButton = document.getElementById(id);
          google.maps.event.addDomListener(radioButton, 'click', function() {
            autocomplete.setTypes(types);
          });
        }

        setupClickListener('changetype-all', []);
        setupClickListener('changetype-establishment', ['establishment']);
        setupClickListener('changetype-geocode', ['geocode']);
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div>
      <input id="searchTextField" type="text" size="50">
      <input type="radio" name="type" id="changetype-all" checked="checked">
      <label for="changetype-all">All</label>

      <input type="radio" name="type" id="changetype-establishment">
      <label for="changetype-establishment">Establishments</label>

      <input type="radio" name="type" id="changetype-geocode">
      <label for="changetype-geocode">Geocodes</lable>
    </div>
  </body>
</html>

このスクリプトは機能します。しかし、問題は、ラジオ ボタンが必要ないことです。ラジオ ボタンと関連するスクリプトを削除すると、完全に機能しなくなります。

他に何もせずにオートコンプリートしたいだけです。繰り返しますが、このスクリプトは私が書いたものではありません。

編集:

私の質問はhttps://gis.stackexchange.com/questions/31916/i-am-trying-to-put-autocomplete-of-google-api-v3-for-places-but-giving-some-errに関連しています Googleが私にくれた...その人でさえ苦労していますが:(

4

4 に答える 4

1

私がしなければならなかったのは、単に行を 1 行ずつ削除することだけでした... Chrome コンソールが教えてくれるまで、余分な } を削除したことに気付きました! シンプルなソリューション。

<!DOCTYPE html>
<html>
  <head>
    <title>Google Maps JavaScript API v3 Example: Places Autocomplete</title>
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
    <style>
      body {
        font-family: sans-serif;
        font-size: 14px;
      }
      #map_canvas {
        height: 400px;
        width: 600px;
        margin-top: 0.6em;
      }
      input {
        border: 1px solid  rgba(0, 0, 0, 0.5);
      }
      input.notfound {
        border: 2px solid  rgba(255, 0, 0, 0.4);
      }
    </style>
    <script>
      function initialize() {
        var input = document.getElementById('searchTextField');
        var options = {
            componentRestrictions: {country: 'us'}
        };
        var autocomplete = new google.maps.places.Autocomplete(input, options);
}

      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
<form method = "POST">
    <div>
      <input id="searchTextField" type="text" size="50" name="location">
    </div>
<input type = "submit" />
  </body>
</html>
于 2012-10-24T09:46:01.597 に答える
0

コピー&ペーストサービス(ライブデモはこちら):

<!DOCTYPE html>
<html>
  <head>
    <title>Google Maps JavaScript API v3 Example: Places Autocomplete</title>
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
    <style>
      body {
        font-family: sans-serif;
        font-size: 14px;
      }
      #map_canvas {
        height: 400px;
        width: 600px;
        margin-top: 0.6em;
      }
      input {
        border: 1px solid  rgba(0, 0, 0, 0.5);
      }
      input.notfound {
        border: 2px solid  rgba(255, 0, 0, 0.4);
      }
    </style>
    <script>
    var G = google.maps;
    var chicago = new G.LatLng(41.850033, -87.6500523);
    var infowindow = new G.InfoWindow();
    var marker;

      function initialize() {
      var mapOptions = {
          center: chicago,
          zoom: 5,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map(document.getElementById('map_canvas'),
          mapOptions);
        marker = new G.Marker({map:map});

        var input = document.getElementById('searchTextField');
        var options = {
            types: ['(cities)'],
            componentRestrictions: {country: 'us'}
        };

        var autocomplete = new google.maps.places.Autocomplete(input, options);

        google.maps.event.addListener(autocomplete, 'place_changed', function() {
          infowindow.close();
          var place = autocomplete.getPlace();
          if (place.geometry.viewport) {
            map.fitBounds(place.geometry.viewport);
          } else {
            map.setCenter(place.geometry.location);
            map.setZoom(17);  // Why 17? Because it looks good.
          }

          var image = new google.maps.MarkerImage(
              place.icon,
              new google.maps.Size(71, 71),
              new google.maps.Point(0, 0),
              new google.maps.Point(17, 34),
              new google.maps.Size(35, 35));
          marker.setIcon(image);
          marker.setPosition(place.geometry.location);

          var address = '';
          if (place.address_components) {
            address = [(place.address_components[0] &&
                        place.address_components[0].short_name || ''),
                       (place.address_components[1] &&
                        place.address_components[1].short_name || ''),
                       (place.address_components[2] &&
                        place.address_components[2].short_name || '')
                      ].join(' ');
          }

          infowindow.setContent('<div><strong>' + place.name + '</strong><br>' + address);
          infowindow.open(map, marker);
        });
        }

      google.maps.event.addDomListener(window, 'load', initialize);
    </script>
  </head>
  <body>
    <div>
      <input id="searchTextField" type="text" size="50">
      <div id="map_canvas"></div>
    </div>
  </body>
</html>
于 2012-10-24T09:55:29.597 に答える
0

ラジオボタンが不要な場合は、次のように に置き換えてください。

<div name="type" id="changetype-all" checked="checked"></div>
<label for="changetype-all">All</label>

<div name="type" id="changetype-establishment"></div>
<label for="changetype-establishment">Establishments</label>

<div name="type" id="changetype-geocode"></div>
<label for="changetype-geocode">Geocodes</lable>
于 2012-10-24T08:39:03.720 に答える