Одна из вещей, которые вы ищете является 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>
Я не уверен, что вы имеете в виду. У вас есть список мест (lat/lng), но вы хотите только установить маркер на те, которые находятся на расстоянии более 30 км друг от друга? Помимо чего? Друг друга? –