Googleプレイスを使用するときに、検索を都市の通りに制限できますAutocomplete
か?
4 に答える
Autocomplete
タイプとして使用するオプションを設定できますgeocode
。これにより、アドレスに返される結果が制限されます。
var input = document.getElementById( 'searchTextField' );
var options = {
bounds: yourBounds,
types: ['geocode']
};
autocomplete = new google.maps.places.Autocomplete( input, options );
結果を通りだけに制限する方法はありませんが、これは主にあなたが望むものを達成します。正しく設定yourBounds
すると、おそらく都市のエリアに限定されて、現在可能な限り近くに移動します。
コメントに応じて更新します。
都市を入力することから始めたい場合は、マップの境界をAutocomplete
s境界にバインドできます。これにより、都市が選択されたときにマップのビューポートが自動的に設定されますAutocomplete
。
var options = {
bounds: yourBounds,
types: ['(cities)']
};
autocomplete =
new google.maps.places.Autocomplete( input, options );
// This will bind the map's bounds to the Autocomplete's bounds:
autocomplete.bindTo('bounds', map);
Autocomplete
次に、上記のようにのタイプを更新して、アドレスを返すようにすることができます。
autocomplete.setTypes( [ "geocode" ] );
そこから、Places LibraryAPIDocsを読むことができます。
htmlコードのほんの一例(twitter bootstrap 3互換:))
<div class="well container">
<form role="form">
<div class="form-group">
<label for="locality" class="sr-only">Stadt oder PLZ</label>
<input type="text" class="form-control" id="locality" name="locality" placeholder="Stadt oder PLZ" />
<p class="help-block">Bitte zuerst die Stadt oder PLZ eingeben.</p>
</div>
<div class="form-group">
<label for="route" class="sr-only">Straße / Hausnummer</label>
<div class="row">
<div class="col-xs-6">
<input type="text" class="form-control col-xs-8" id="route" name="route" placeholder="Straße" disabled="true" />
</div>
<div class="col-xs-6">
<input type="text" class="form-control col-xs-4" id="street_number" name="street_number" placeholder="Nr." disabled="true" />
</div>
</div>
</div>
</form>
</div>
コードは一目瞭然だと思います。試してみてください
<script>
var localityInput = document.getElementById('locality');
var localityOptions = {
types: ['geocode'], //['(cities)'], geocode to allow postal_code if you only want to allow cities then change this attribute
componentRestrictions: {country: 'de'}
};
autocomplete = new google.maps.places.Autocomplete(localityInput, localityOptions);
google.maps.event.addListener(autocomplete, 'place_changed', function() {
$('#route').attr('disabled', false).focus();
$('#street_number').attr('disabled', false);
var boundsByCity = autocomplete.getPlace().geometry.viewport;
var routeInput = document.getElementById('route');
var routeOptions = {
bounds: boundsByCity,
types: ['geocode']
};
new google.maps.places.Autocomplete(routeInput, routeOptions);
});
</script>
デモ:JSFIDDLE
タイプをリージョンに設定します。
var input = document.getElementById( 'searchTextField' );
var options = {
bounds: yourBounds,
types: ['(regions)']
};
autocomplete = new google.maps.places.Autocomplete( input, options );
それが役に立てば幸い..
プレイスオートコンプリートをレベルに制限する方法を探していましたstreet_number
が、見つかりませんでした。
私が思いついた最善の解決策はstreet_number
、場所の結果でコンポーネントを確認し、コンポーネントが欠落している場合はユーザーに通知を表示することです。
コード例:
var searchbox = document.getElementById('location');
var options = {
types: ['geocode']
};
autocomplete = new google.maps.places.Autocomplete(searchbox, options);
google.maps.event.addListener(autocomplete, 'place_changed', function() {
var place = autocomplete.getPlace();
var foundStreet = false;
for (var i = 0; i < place.address_components.length; i++) {
var c = place.address_components[i];
for (var j = 0; j < c.types.length; j++)
{
if (c.types[j] == "street_number")
{
foundStreet = true;
break;
}
}
if (foundStreet)
break;
}
if (!foundStreet)
alert("Not a valid street number, add some pretty message to the user.");
console.log(place);
});