谷歌地图雷达搜索返回不到200

时间:2015-02-14 08:24:33

标签: javascript google-maps search

问题陈述

radarSearch仅在初始加载时返回靠近地图中心的位置,并且仅返回大约140(而不是200)。我将请求对象的bounds成员设置为map.getBounds ... after initial load 当我移动地图的中心时,会添加更多地点......

after moving the map around a bit问题

为什么我得到的广告超过200个广告位?我如何获得地图区域的详尽搜索结果?

代码

jsFiddle

HTML

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
    <style type="text/css">
        html, body, #map-canvas {
            height: 100%;
            margin: 0;
            padding: 0;
        }
    </style>
    <script src="JavaScriptMin.js"></script>
</head>
<body>
    <div id="map-canvas"></div>
</body>
</html>

的Javascript

var map;
var infoWindow;
var service;

function initialize() {
    var mapOptions = {
        zoom: 5,
        center: new google.maps.LatLng(-27.984113, 153.411076)
    };

    map = new google.maps.Map(document.getElementById('map-canvas'),
        mapOptions);

    google.maps.event.addListener(map, 'bounds_changed', performSearch);
}

function loadScript() {
    var script = document.createElement('script'),
        myScript = 'https://maps.googleapis.com/maps/api/js?signed_in=true&v=2.exp' +
                    '&libraries=weather,places&sensor;=true_or_false&signed_in=true&callback=initialize&region=au'
    script.type = 'text/javascript';
    script.src = myScript;
    document.body.appendChild(script);
}

window.onload = loadScript;

function performSearch() {
    var request = {
        bounds: map.getBounds(),
        keyword: 'caravan parks'
    };

    if (!infoWindow) { infoWindow = new google.maps.InfoWindow() };
    if (!service) { service = new google.maps.places.PlacesService(map) };
    service.radarSearch(request, searchCallback);
}

function searchCallback(results, status, pagination) {
    if (results) { console.log('searchCallback, results count is ' + results.length) };
    if (status == google.maps.places.PlacesServiceStatus.OK) {

        for (var i = 0; i < results.length; i++) {
            var place = results[i];
            createMarker(results[i]);
        }
    } else {
        console.log('search failed')
    }
}

function createMarker(place) {
    var placeLoc = place.geometry.location;
    var marker = new google.maps.Marker({
        map: map,
        icon: {
            path: google.maps.SymbolPath.CIRCLE,
            scale: 2,
            opacity: 1,
            fillColor: 'red',
            fillOpacity: 1,
            strokeColor: 'red',
            strokeWeight: 1
        },
        position: place.geometry.location
    });    
}

注意:

  1. 如果我包含有效的API密钥,则没有任何区别。
  2. 如果我使用radius参数,它返回148个位置,但边界设置为map.getBounds我只得到145.我在这个阶段的猜测是,当使用bounds参数时,搜索区域是包含在50中的矩形公里半径圆。根据文档,我不清楚这一点。

1 个答案:

答案 0 :(得分:1)

我最终成功地自己解决了这个问题,我的发现如下......

  1. 使用请求对象的位置 radius 参数时,搜索区域实际上是包含搜索范围的半径。最大搜索区域是包含半径为50 km的圆的正方形(这是搜索半径记录的最大值。
  2. 使用请求对象 bounds 参数时,搜索的最大区域为100平方公里。如果边界设置大于该范围,则搜索仍限于100平方公里。文档不清楚,但它是合乎逻辑的。