Разместите поисковый запрос, дающий противоречивые результаты, используя границы - PullRequest
0 голосов
/ 02 марта 2012

По этой ссылке: http://code.google.com/apis/maps/documentation/javascript/places.html#place_search_requests

Метод может занять либо

- точка и радиус или

- граница прямоугольника

Использование точки + радиус дает мне правильные результаты, однако максимальный радиус составляет всего 50 км, и мне нужно, чтобы мой поиск был до 1000 км, поэтому я попытался использовать границы. Когда мои границы невелики, я получаю те же правильные результаты, что и точка + радиус, однако, когда я увеличиваю границы, я не получаю никаких результатов вообще.

Приведенный ниже код даст правильные результаты, однако если вы замените var sw и var ne закомментированными координатами, он больше не будет работать.

т. Китченер находится на границе между Эйром и Гуэлфом, но не на границе между Детройтом и Оттавой. Что не имеет никакого смысла, если вы посмотрите на карту.

<script type="text/javascript">
  var map;
  var infowindow;

  function initialize() {
    var Cambridge = new google.maps.LatLng(43.346528, -80.417962);
    var sw = new google.maps.LatLng(43.292501,-80.543175);  // 41.914541,-83.282318  
    var ne = new google.maps.LatLng(43.605057,-80.156250);  // 45.580391,-76.283051
    var zoneBounds = new google.maps.LatLngBounds(sw,ne);

    map = new google.maps.Map(document.getElementById('map'), {
      mapTypeId: google.maps.MapTypeId.ROADMAP,
      center: Cambridge,
      zoom: 10
    });

    var request = {
      bounds: zoneBounds,
      //location: Cambridge,        //using location and
      //radius: 500000,             //radius works
      name: ['Kitchener, ON']


    };
    infowindow = new google.maps.InfoWindow();
    var service = new google.maps.places.PlacesService(map);
    service.search(request, callback);
  }

  function callback(results, status) {
    if (status == google.maps.places.PlacesServiceStatus.OK) {
      for (var i = 0; i < results.length; i++) {
        createMarker(results[i]);
      }
    }
  }

  function createMarker(place) {
    var placeLoc = place.geometry.location;
    var marker = new google.maps.Marker({
      map: map,
      position: place.geometry.location
    });

    google.maps.event.addListener(marker, 'click', function() {
      infowindow.setContent(place.name);
      infowindow.open(map, this);
    });
  }
  google.maps.event.addDomListener(window, 'load', initialize);
</script>

Я должен иметь возможность использовать PlacesServiceStatus для определения статуса запроса, я предполагаю, что это даст мне понимание проблемы, но я не знаю, как получить коды состояния

Любая помощь с этим будет высоко ценится

Спасибо!

редактировать: хорошо, я добавил предупреждение (статус); и статус говорит, что это "ZERO_RESULTS"

1 Ответ

0 голосов
/ 07 мая 2012

В методе обратного вызова вы можете сделать что-то вроде

function callback(results, status) {
    window.alert(results.length);

, которое скажет вам, сколько результатов у вас есть, вы можете зациклить их что-то вроде этого ...

        for (var i = 0; i < results.length; i++) {
            window.alert(results[i].formatted_address);
        }

Я попробовал это сам и да, если границы превышают 50 км, то результаты довольно бесполезны.Я мог догадаться по ответу;если границы очень велики, это может привести к слишком большому количеству попаданий на серверы Google.Однако мне не нравится этот ответ, поэтому, если кто-то знает лучше;помогите нам!

Другая альтернатива - использовать автозаполнение мест - https://developers.google.com/maps/documentation/javascript/places#places_autocomplete

Вы можете использовать геолокацию, но я сомневаюсь, что это даст ответы, которые вы ищете, например, еслиВы геокодируйте «enfield», он покажет вам все поля мира, если вы геокодируете «enf», он покажет вам законченный аэропорт!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...