0

我试图搜索可见地图范围内的所有城市。我怎样才能做到这一点?

以下是我尝试做的事情:

$.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 米的半径范围内?

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

- 更新 -

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

这就是我引用库的方式:

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

检查此页面中的列表:https ://developers.google.com/places/documentation/supported_types ,我意识到第一个列表中的几乎所有项目都返回值,但不是第二个列表。唯一的项目返回值是 'political',它只返回 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”。

4

2 回答 2

1

除非您使用locationandradius选项,否则不应将其限制在 50,000 米,而您不是;你正在使用bounds. 我建议退出一个级别并深入研究从开始调用返回的结果 to geocode,因为您对 的使用PlacesService似乎是正确的。对象内部的值是什么resultBounds?我还注意到,当您调用地理编码器时,您没有使用区域偏差,可能是“Georgia”不够具体。例如,您是指俄罗斯联邦内的地区还是美国州内的地区?而且我不确定您使用什么 URL 来加载 Google Maps API 和地点库,但这也可能会影响您的结果。

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

于 2012-07-03T05:36:07.040 回答
0

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

请在 Google Places API 论坛上查看此主题

这对于 Google Places API 是不可能的,因为会返回诸如位置、邻里和子位置之类的政治结果以识别请求的区域,并且每个请求限制为两个。

于 2015-06-26T04:41:07.917 回答