2013-07-10 4 views
-1

Я очень новичок в Google Map API v3. Я упомянул об этом руководство разработчика Google, но я не получил правильного заключения об этом. У меня есть список адресов. Я хочу отправить их как один (источник) - Многие адреса (Destination) на карте google, и я хочу построить адреса, расположенные на расстоянии 30 км от исходного адреса на карте.Маркер участка на карте, который находится за пределами 30 км

Есть ли какой-либо возможный способ достичь этого с помощью карты google?

Может ли один быть предложено на этом ..

+1

Я не уверен, что вы имеете в виду. У вас есть список мест (lat/lng), но вы хотите только установить маркер на те, которые находятся на расстоянии более 30 км друг от друга? Помимо чего? Друг друга? –

ответ

0

Одна из вещей, которые вы ищете является computeDistanceBetween() функция в библиотеке геометрии (reference). Это дает вам расстояние в метрах между двумя объектами . С этим вы можете сделать любой тест, который вам нужен - неясно, если вы имели в виду «менее 30 км» или «более 30 км» или «около 30 км». Но, учитывая способ вычисления расстояния, вы можете выполнить любой тест, который вам нужен, когда вы прокручиваете маркеры.

Вот пример. Предположим, у вас есть какие-то данные, как это - может быть из JSON объекта, или что-то:

var data = { 
    source: { lat: n, lng: n }, 
    places: [ 
     { lat: n, lng: n, name: str }, 
     { lat: n, lng: n, name: str }, 
     ... 
    ] 
}; 

После инициализации карты, вы можете использовать код, как это перебрать data.places и создать только маркеры, которые соответствуют вашим критерий расстояния. В этом примере мы будем создавать маркеры, которые находятся в пределах 30 км от источника:

var sourceLatLng = 
    new google.maps.LatLng(data.source.lat, data.source.lng); 
for(var i = 0; i < data.places.length; ++i) { 
    addPlace(data.places[i]); 
} 

function addPlace(place) { 
    var placeLatLng = new google.maps.LatLng(place.lat, place.lng); 
    var distance = 
     google.maps.geometry.spherical.computeDistanceBetween(
      placeLatLng, 
      sourceLatLng 
     ); 
    if(distance > 30000) 
     return; 

    var marker = new google.maps.Marker({ 
     map: map, 
     position: placeLatLng 
    }); 
} 

Вы должны убедиться, чтобы загрузить библиотеку геометрии, добавив параметр libraries=geometry при загрузке API Карт, например:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=geometry"> 
</script> 
+0

Майкл, должно быть условие 'расстояние <30000'? –

+0

@ Beetroot-Beetroot - Это зависит от того, чего хочет OP, чего не было ясно из вопроса. Код, указанный мной, создает маркеры, если они находятся в пределах 30 км. Переверните состояние вокруг, и вы получите маркеры, расположенные дальше 30 км. –

+0

Согласовано. Первоначально я читал Q как смысл сюжета. Направления, которые больше порога, но читают его снова, это неоднозначно. –

Смежные вопросы