Google Maps Places:如何检查所选地点是不是在特定城镇?

Posted

技术标签:

【中文标题】Google Maps Places:如何检查所选地点是不是在特定城镇?【英文标题】:Google Maps Places: How do I check if selected place is in specific town?Google Maps Places:如何检查所选地点是否在特定城镇? 【发布时间】:2014-07-26 19:43:56 【问题描述】:

我成功设置了 Google 地方信息以指示特定城镇的地点。我唯一的问题:如果他选择了一个不在特定定义城镇的地方,我还没有提醒用户。

我在这里设置了一个jsfiddle:http://jsfiddle.net/pbq2b/

我的 JS 代码:

 $(function()     
var lat = 51.5073509,
    lng = -0.12775829999998223,
    latlng = new google.maps.LatLng(lat, lng),
    image = 'http://www.google.com/intl/en_us/mapfiles/ms/micons/blue-dot.png'; 

var mapOptions =            
        center: new google.maps.LatLng(lat, lng),           
        zoom: 13,           
        mapTypeId: google.maps.MapTypeId.ROADMAP         
    ,
    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions),
    marker = new google.maps.Marker(
        position: latlng,
        map: map,
        icon: image
     );

var input = document.getElementById('searchTextField');         
var autocomplete = new google.maps.places.Autocomplete(input);          

autocomplete.bindTo('bounds', map); 
var infowindow = new google.maps.InfoWindow(); 

// when user has clicked on an autocomplete suggestion
google.maps.event.addListener(autocomplete, 'place_changed', function() 

    infowindow.close();
    var place = autocomplete.getPlace();

    // get town of selected place
    function getTown(address_components) 

                    var geocoder = new google.maps.Geocoder();  result = address_components;
                        var info = [];
                        for (var i = 0; i < result.length; ++i) 

                            if (result[i].types[0] == "locality") 
                                return result[i].long_name;
                            


                        
    ;
    var town = getTown(place.address_components);

        // if place is in London, move marker to the place
        if (town == 'London') 

        infowindow.close();
        var place = autocomplete.getPlace();
        console.log(place);

        if (place.geometry.viewport) 
            map.fitBounds(place.geometry.viewport);
         else 
            map.setCenter(place.geometry.location);
            map.setZoom(17);  
        

        moveMarker(place.name, place.geometry.location); 


     else 

        // if not, do nothing and alert user
        alert('you must click on a place in London');
    

);  



 function moveMarker(placeName, latlng)
    marker.setIcon(image);
    marker.setPosition(latlng);
    infowindow.setContent(placeName);
    infowindow.open(map, marker);
 

);

当您输入诸如“诺里斯街”之类的街道名称时,脚本会成功识别出该地点位于伦敦。当您单击位于伦敦以外的地点时,脚本也会成功识别并提醒用户。

但是,如果您点击某些明显位于伦敦的景点或火车站,例如“大本钟”或“希思罗机场”,脚本会发出这些地方不在伦敦的警报。怎么会?我怎样才能实现这些地方的城市也得到认可?

我在使用此脚本的其他城市也有同样的问题 - 街道没有问题,但是当我单击火车站时,无法识别该城市。

有人知道如何为所有地方识别城市的好方法吗?

【问题讨论】:

【参考方案1】:

我认为您的 getTown 函数可能有问题。您是否尝试使用“政治”而不是“地方”?

你可能想检查这个问题:get city from geocoder results?

【讨论】:

@KentMiller 您提到的 POI 位置返回的位置是什么? 对于“大本钟”或例如“希思罗机场”(忘记我的利物浦示例)我得到“未定义”...... @KentMiller 对于路线、街道号码等类型有几个选项,但也有 postal_code_prefix 所以你可以通过邮政编码。我认为伦敦很可能有一个永久前缀。您可以尝试从该前缀赶上伦敦? 这不是一个可行的解决方案。在我的网站上,我想提供多个城市,但有些地方没有指定邮政编码,例如“曼彻斯特”或“利物浦”......

以上是关于Google Maps Places:如何检查所选地点是不是在特定城镇?的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps Places API - 如何获取地名? [复制]

google.maps.places.Autocomplete 语言输出

如何将 Google Maps Places Library 的自动完成功能限制为仅推荐一个城市的地点?

Google Places Autocomplete - 如何获取纬度和经度?

Google Places API 中缺少 Google Maps 中的地点

从 Google Maps Places API 中删除占位符文本