谷歌地方自动完成限制到特定区域

时间:2012-12-11 17:55:44

标签: google-maps google-maps-api-3 google-places-api google-places

我的要求是仅为班加罗尔地方获取谷歌地方自动填充建议,但我不是仅为班加罗尔或提到纬度经度的地方。

我想仅在自动填充文字字段中的图片位置下方退休。

enter image description here

有人可以建议如何实现相同的目标以及我出错的地方。

使用Javascript:

<script type="text/javascript">


   function initialize1() {

    var southWest = new google.maps.LatLng( 12.97232, 77.59480 );
    var northEast = new google.maps.LatLng( 12.89201, 77.58905 );
    var bangaloreBounds = new google.maps.LatLngBounds( southWest, northEast );

    var options = {
        bounds: bangaloreBounds,
        types: ['(cities)'],
        componentRestrictions: {country: 'in'}
    };

     var input = document.getElementById('searchTextFieldTo');
     var autocomplete = new google.maps.places.Autocomplete(input, options);
   }
   google.maps.event.addDomListener(window, 'load', initialize1);
</script>

的TextField:

<input type="text" id="searchTextFieldTo" class="ui-timepicker-hour" style="width:350px;text-align:left;font-style:italic;" placeholder="Enter To location" autocomplete="on" />

5 个答案:

答案 0 :(得分:3)

正如我的回答here所述:

目前无法将结果限制在特定地区。您可以像上面那样使用边界来偏向结果,但不限于指定范围内包含的位置。

如果您认为按地区限制是有用的功能,请提交Places API - Feature Request

编辑: 根据2018-07,可以定义要检索的地点的类型,例如 cities (根据API,它们是locality或administrative_area3)。查看完整答案here

答案 1 :(得分:2)

我想你可以尝试一下。

{{1}}

注意形式xomena: 地图JavaScript API 3.27版中添加了strictBounds option,目前(2017年1月)是实验版。

答案 2 :(得分:1)

Google提供了两种实现此目标的方法。 如果您不满意,因为在印度这样的国家,它不能很好地运作,因为这里的州和条款没有矩形或结构边界。

1.LatLngBounds(LatLng southwest,LatLng northeast):您可以在其中给出经度和经度以形成矩形。

<强> 2。位置(Lat,Lng)&amp;半径:您可以在其中给出经度和经度以形成圆圈。

但是如果你来自像印度这样的国家和条款不像美国那样的结构形状(矩形),这些方法的问题就不能提供预期的结果。

如果你遇到同样的问题而不是黑客攻击。 使用jQuery / Jacascript,您可以附加功能,这些功能将在文本输入中始终保持城市名称,并与Places API的自动完成对象绑定。

这是:

<script>
    $(document).ready(function(){
        $("#locality").val(your-city-name)  //your-city-name will have city name and some space to seperate it from actual user-input for example: “Bengaluru | ”
        });

    $("#locality").keydown(function(event) { //locality is text-input box whixh i supplied while creating Autocomplete object
    var localeKeyword = “your-city-name”
    var localeKeywordLen = localeKeyword.length;
    var keyword = $("#locality").val();
    var keywordLen = keyword.length;

    if(keywordLen == localeKeywordLen) {
        var e = event || window.event;  
        var key = e.keyCode || e.which; 

        if(key == Number(46) || key == Number(8) || key == Number(37)){
            e.preventDefault(); 
            }//Here I am restricting user to delete city name (Restricting use of delete/backspace/left arrow) if length == city-name provided

        if(keyword != localeKeyword) {
            $("#locality").val(localeKeyword);
            }//If input-text does not contain city-name put it there
        }

    if(!(keyword.includes(localeKeyword))) {
        $("#locality").val(localeKeyword);
        }//If keyworf not includes city name put it there
    });
</script>

(图片:)在此之前

enter image description here

(图片:)此黑客之后

enter image description here

答案 3 :(得分:1)

function initialize() {

 var bangaloreBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(12.864162, 77.438610),
    new google.maps.LatLng(13.139807, 77.711895));



    var options = {
        bounds: bangaloreBounds,

        componentRestrictions: {country: 'in'},
        strictBounds: true,
    };

     var input = document.getElementById('autocomplete');
     var autocomplete = new google.maps.places.Aut`enter code here`ocomplete(input, options);
   }
   google.maps.event.addDomListener(window, 'load', initialize);

答案 4 :(得分:0)

与Google javascript Places API here的当前文档一样,您可以定义要检索的场所的 types 数组。在下面的示例中,我将其设置为仅检索城市(根据API,这些城市为locality或Administrative_area3)。您还可以设置它来检索区域,地址,营业场所和地理编码。

function initMap() {
        var input = document.getElementById('my-input');
        var options = {
               types: ['(cities)']
                       };
        var autocomplete = new google.maps.places.Autocomplete(input, options);
        // the rest of the code ...
 }