如何使用Google Maps v3搜索某个地区的城市?

时间:2012-07-03 04:49:01

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

我试图在可见地图的范围内搜索所有城市。我怎么能这样做?

以下是我尝试做的事情:

$.fn.gmap3.geocoder.geocode({ 'address': 'Georgia' }, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
        globalMap.setCenter(results[0].geometry.location);
        var resultBounds = new google.maps.LatLngBounds(
            results[0].geometry.viewport.getSouthWest(),
            results[0].geometry.viewport.getNorthEast()
        );
        globalMap.fitBounds(resultBounds);
        // get cities in the map
        var service = new google.maps.places.PlacesService(globalMap);
        var request = {
            bounds: resultBounds,
            types: ['locality']
        };
        service.search(request, function (results, status) {
            debugger;
        });
    }
});

但结果是ZERO_RESULTS。也许原因是结果被限制在半径50.000米?

任何人都知道如何解决我的问题?非常感谢。

- UPDATE -

谢谢Sean仔细阅读我的帖子并提供详细的反馈。

这就是我引用lib的方式:

src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"
我还在地理编码功能中添加了更多细节,以获得更精确的结果。但我仍然没有得到我想要的结果。

检查此页面中的列表:https://developers.google.com/places/documentation/supported_types,我发现第一个列表中的几乎所有项目都返回值,但不会返回第二个列表。唯一的项目返回值是“政治”和“政治”。它只返回1而不是20。

这是修改后的代码:

this.setCenterByAddress = function (address, region) {
    $.fn.gmap3.geocoder.geocode({ 'address': address, 'region': region }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            globalMap.setCenter(results[0].geometry.location);
            var resultBounds = new google.maps.LatLngBounds(
                results[0].geometry.viewport.getSouthWest(),
                results[0].geometry.viewport.getNorthEast()
            );
            globalMap.fitBounds(resultBounds);
            // get cities in the map
            var service = new google.maps.places.PlacesService(globalMap);
            var request = {
                bounds: resultBounds,
                types: ['country',
                'administrative_area_level_1',
                'administrative_area_level_2',
                'administrative_area_level_3',
                'colloquial_area',
                'country',
                'floor',
                'geocode',
                'intersection',
                'locality',
                'natural_feature',
                'neighborhood',
                'political',
                'point_of_interest',
                'post_box',
                'postal_code',
                'postal_code_prefix',
                'postal_town',
                'premise',
                'room',
                'route',
                'street_address',
                'street_number',
                'sublocality',
                'sublocality_level_4',
                'sublocality_level_5',
                'sublocality_level_3',
                'sublocality_level_2',
                'sublocality_level_1',
                'subpremise',
                'transit_station']
            };
            service.search(request, function (results, status) {
                debugger;
            });
        }
    });
}

更多信息:即使使用位置和半径,相同的值也会返回。我使用免费地图并收到" OVER_QUERY_LIMIT"一直以来。

2 个答案:

答案 0 :(得分:1)

除非您使用locationradius选项,否则不应限制在50,000米;您正在使用bounds。我建议退出一个级别并深入研究从geocode的首发电话返回的结果,因为您对PlacesService的使用似乎是正确的。 resultBounds对象内部的值是什么?我还注意到,当您调用地理编码器时,您没有使用区域偏置,而且“Georgia”可能不够具体。例如,您是指俄罗斯联邦或美国的地区吗?我不确定您使用什么网址来加载Google Maps API&放置图书馆,但这也可能影响你的结果。

我会仔细检查从地理编码器返回的结果,因为除非我遗漏了某些东西,否则看起来你的基本方法是合理的。

答案 1 :(得分:0)

使用Geocoding API / Places API,您不能在特定纬度经度附近的地方附近返回两个以上

请参阅Google Places API论坛上的this thread

  

使用Google Places API作为政治结果无法做到这一点   如地方,邻居和sublocality返回   识别请求的区域,每个请求限制为两个。