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 メートルに制限されているためでしょうか?

誰でも私の問題を解決する方法を知っていますか? どうもありがとう。

- アップデート -

ショーン、私の投稿を注意深く読んで、詳細なフィードバックを提供してくれてありがとう。

これは私がlibを参照する方法です:

src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"
また、より正確な結果を得るために、ジオコード関数に詳細を追加しました。しかし、私はまだ私が望む結果を得ることができません。

このページのリストを確認してください: https://developers.google.com/places/documentation/supported_types、最初のリストのほとんどすべての項目が値を返しますが、2 番目のリストは返さないことに気付きました。アイテムの戻り値は「political」のみで、20 ではなく 1 しか返されません。

これは変更後の私のコードです:

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います。geocodeの使用法PlacesServiceが正しいように見えるため、レベルを取り消して、開始呼び出しから返された結果を掘り下げることをお勧めします。resultBoundsオブジェクト内部の値は何ですか? また、ジオコーダーを呼び出すときに地域バイアスを使用していないことにも気付きました。「ジョージア」が十分に具体的でない可能性があります。たとえば、ロシア連邦または米国の州内の地域を意味しますか? また、Google Maps API と Places ライブラリの読み込みに使用している URL はわかりませんが、それが結果に影響している可能性もあります。

ジオコーダーから返された結果を再確認します。何かが欠けていない限り、基本的なアプローチは適切であるように見えるからです。

于 2012-07-03T05:36:07.040 に答える