Google Maps API v3 Store Locator с радиусом: управление выводом карты, когда в радиусе пользователя нет магазинов - PullRequest
3 голосов
/ 25 марта 2012

Я следовал учебнику по Локатору Google Maps https://developers.google.com/maps/articles/phpsqlsearch_v3 и создал локатор, который принимает местоположение и радиус пользователя, а затем выводит все местоположения магазина в пределах этого радиуса местоположения пользователя.И по большей части это работает!

Моя проблема в том, что, когда я вписываю местоположение и радиус, и в этом радиусе нет магазинов, мой локатор центрирует карту в середине Тихого океана.

Я приложил все усилия, чтобы изучить другие вопросы о локаторах магазинов, но все они были о том, как заставить сам локатор работать.Если я что-то пропустил, прошу прощения!Кроме того, я начинающий, когда дело доходит до JavaScript, поэтому ответы с логикой кода приветствуются!

Спасибо!

function searchLocationsNear(center) {
 clearLocations();

 var radius = document.getElementById('radiusSelect').value;
 var searchUrl = 'storelocator_getXML.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
 downloadUrl(searchUrl, function(data) {
   var xml = parseXml(data);
   var markerNodes = xml.documentElement.getElementsByTagName("marker");
   var bounds = new google.maps.LatLngBounds();
   for (var i = 0; i < markerNodes.length; i++) {
     var name = markerNodes[i].getAttribute("name");
     var address = markerNodes[i].getAttribute("address");
     var phone = markerNodes[i].getAttribute("phone");
     var fax = markerNodes[i].getAttribute("fax");
     var directions = markerNodes[i].getAttribute("directions");
     var distance = parseFloat(markerNodes[i].getAttribute("distance"));
     var latlng = new google.maps.LatLng(
      parseFloat(markerNodes[i].getAttribute("lat")),
      parseFloat(markerNodes[i].getAttribute("lng")));

     createOption(name, address, distance, i);
     createMarker(latlng, name, address, phone, fax, directions);
     bounds.extend(latlng);
   }
   map.fitBounds(bounds);
   locationSelect.style.visibility = "visible";
   locationSelect.onchange = function() {
     var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
     google.maps.event.trigger(markers[markerNum], 'click');
   };
  });
}

1 Ответ

6 голосов
/ 27 марта 2012

После долгих проб и ошибок у меня был момент ага, и я выяснил, куда поместить утверждение if / else, чтобы моя карта не попадала в Тихий океан:

function searchLocationsNear(center) {
 clearLocations();

 var radius = document.getElementById('radiusSelect').value;
 var searchUrl = 'storelocator_getXML.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;
 downloadUrl(searchUrl, function(data) {
   var xml = parseXml(data);
   var markerNodes = xml.documentElement.getElementsByTagName("marker");

Я положилоператор if здесь.Это сразу после захвата всех местоположений маркеров в пределах выбранного радиуса и говорит, если есть маркеры, чтобы продолжить как обычно:

   if(markerNodes.length>0){

   var bounds = new google.maps.LatLngBounds();
   for (var i = 0; i < markerNodes.length; i++) {
     var name = markerNodes[i].getAttribute("name");
     var address = markerNodes[i].getAttribute("address");
 var phone = markerNodes[i].getAttribute("phone");
 var fax = markerNodes[i].getAttribute("fax");
 var directions = markerNodes[i].getAttribute("directions");
     var distance = parseFloat(markerNodes[i].getAttribute("distance"));
     var latlng = new google.maps.LatLng(
          parseFloat(markerNodes[i].getAttribute("lat")),
          parseFloat(markerNodes[i].getAttribute("lng")));

     createOption(name, address, distance, i);
     createMarker(latlng, name, address, phone, fax, directions);
     bounds.extend(latlng);
    }
    map.fitBounds(bounds);

И здесь, я помещаю else, что делать, когда нет маркеровв радиусе:

  } else {
    alert('Sorry, there are no stores that close to your location. Try expanding your search radius.');
   }

   locationSelect.style.visibility = "visible";
   locationSelect.onchange = function() {
     var markerNum = locationSelect.options[locationSelect.selectedIndex].value;
     google.maps.event.trigger(markers[markerNum], 'click');
   };

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