2014-02-14 2 views
1

У меня есть код, который запрашивает у пользователя адрес и использует API GoogleMaps, возвращает геокод Lat/Long этого адреса. Я уже настроил его на запрос, если эти координаты попадают в заранее определенную границу. То, что я хотел бы сделать, это иметь несколько границ и иметь возможность искать их и возвращать результат. Например, у меня были бы некоторые данные JSON или какой-либо другой тип массива, содержащий SW_LatLng, NE_LatLng и ответ. Таким образом, мой запрос будет использовать следующую функцию, и если true, верните ответ. Мой вопрос заключается в том, как мне перебирать несколько границ и возвращать результат.Поиск координат карты в нескольких границах

bounds.contains(new google.maps.LatLng(latitude,longitude)); 

Вот код, у меня уже есть:

function codeAddress() { 
    var bounds = new google.maps.LatLngBounds(
     new google.maps.LatLng(37,-109), 
     new google.maps.LatLng(41, -102) 
    ); 
    var geocoder = new google.maps.Geocoder(); 
    var address = document.getElementById('address').value; 

    geocoder.geocode({ 'address': address}, function(results, status) { 

     if (status == google.maps.GeocoderStatus.OK) { 
     var latitude = results[0].geometry.location.lat(); 
     var longitude = results[0].geometry.location.lng(); 

     } 
     var center = bounds.getCenter(); 
     var x = bounds.contains(new google.maps.LatLng(latitude,longitude)); 

     if (x) { alert('In Colorado')} else { alert('Outside Colorado')}; 

    }); 
    } 

<h3>Is your Address in Colorado?</h3> 
<input id="address" type="textbox" style="width:60%"> 
<input type="button" value="Find" onclick="codeAddress()"> 

Я это установить в CodePen (как JSFiddle) для Вас, чтобы играть.

CodePen Link

Любая помощь приветствуется. Кроме того, каков наилучший способ скрыть данные?

Вот JSFiddle Link JSFiddle Link

+0

Вашего код в скрипке и codepen сломан: 'Uncaught ReferenceError: инициализация не определен' –

+0

я установил JSFiddle поэтому он работает в настоящее время. CodePen отлично работает для меня. – goalsquid

ответ

0

считается ли вы с помощью полигонов, чтобы определить свои границы? Затем, используя карты google, api содержит методLocation (https://developers.google.com/maps/documentation/javascript/examples/poly-containsLocation) в библиотеке Geometry, чтобы определить, находится ли точка в пределах границ?

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

В любом случае, как вы сказали, вам нужно пройти через ваш массив граничных пар широты/долготы (назовите это latLngArray).

function codeAddress() { 

    var geocoder = new google.maps.Geocoder(); 
    var address = document.getElementById('address').value; 

    geocoder.geocode({ 'address': address}, function(results, status) { 

     if (status == google.maps.GeocoderStatus.OK) { 
      var latitude = results[0].geometry.location.lat(); 
      var longitude = results[0].geometry.location.lng(); 

     } 

     var latLngArrayLength = latLngArray.getLength(); 

     for (i=0; i<latLngArrayLength; i++) { 
      var bounds = new google.maps.LatLngBounds(
       new google.maps.LatLng(latLngArray[i].latSW, latLngArray[i].lngSW) 
       new google.maps.LatLng(latLngArray[i].latNE, latLngArray[i].lngNE) 
      ); 

      var center = bounds.getCenter(); //what is this for?? 
      var x = bounds.contains(new google.maps.LatLng(latitude,longitude)); 

      if (x) { 
       alert('In ' + latLngArray[i].boundaryName); //not sure what you want to return exactly 
       return latLngArray[i].boundaryName; 
      } 
     } 
    }); 
} 
Смежные вопросы