Сравнение значений широты и долготы в Google Maps V3 - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть карта с несколькими маркерами.Из-за того, как он настроен, один маркер всегда будет совпадать с центром карты.Я хочу показать другой значок на этом маркере всем остальным.

Маркеры и соответствующие им информационные поля определяются с помощью этой функции:

function createMarker(latlng, html, summary, photo1, photo2, thisLatlng) {
    var contentString = "<div style='min-height:150px'>" + photo1 + "<img src='/images/" + photo2 + "' width='225' height='150' align='left' style='margin-right:8px;border:none'></a><span class='title'>" + html +"</span><br>" + summary + "</div>";

    var marker = new google.maps.Marker({
        map: map,
        position: latlng,
        icon: thisicon,
        zIndex: Math.round(latlng.lat()*-100000)<<5
        });

    google.maps.event.addListener(marker, 'mouseover', function() {
        ib.close(map, marker);
        boxText.innerHTML = contentString;
        ib.open(map, marker);
        });
      google.maps.event.addListener(map, 'click', function() {
        ib.close(map, marker);
        });
    gmarkers.push(marker);
}

"latlng" - это символ лат/ long, который отличается для каждого маркера.«thisLatlng» - это центр карты и широта / долгота одного конкретного маркера.

Мое намерение состояло в том, чтобы использовать что-то подобное для определения правильного значка:

if(latlng===thisLatlng){
    var thisicon = icon1;
}else{
    var thisicon = icon2;
}

Однако это не работает, так как «если» всегда возвращает false.Я пробовал

if(latlng===thisLatlng){

и

if(latlng==thisLatlng){

, и я также пытался перевернуть его с помощью! = И! ==, но они всегда возвращают false.Я проверил, что эти два значения равны, напечатав их одно над другим, и они выглядят точно так же (как и должно быть).

Должно быть, я что-то не так делаю, но что?

1 Ответ

0 голосов
/ 25 апреля 2018

Класс LatLng имеет метод equals.

равно
равно (другое)


Параметры:
прочее: LatLng
Возвращаемое значение: логическое значение
Функция сравнения.

Другой вариант - вычислить разницу между двумя точками и установить порог (скажем, 1 метр) для «равно»

Тосказал, что ваш существующий код (с === у меня работает): скрипка как и .equals ( скрипка )

screenshot of resulting map

фрагмент кода:

var map;
var gmarkers = [];

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    center: {
      lat: 19.12170,
      lng: 72.85083
    },
    zoom: 13.5,
    mapTypeId: 'terrain'
  });
  createMarker(map.getCenter(), "center", "summary", "", "", map.getCenter());
  var otherPt = new google.maps.LatLng(19.12, 72.851);
  createMarker(otherPt, "not center", "summary2", "", "", map.getCenter());
}

function createMarker(latlng, html, summary, photo1, photo2, thisLatlng) {
  var contentString = "<div style='min-height:150px'>" + photo1 + "<img src='/images/" + photo2 + "' width='225' height='150' align='left' style='margin-right:8px;border:none'></a><span class='title'>" + html + "</span><br>" + summary + "</div>";

  if (latlng.equals(thisLatlng)) {
    var thisicon = "http://maps.google.com/mapfiles/ms/micons/blue.png";
  } else {
    var thisicon = "http://maps.google.com/mapfiles/ms/micons/green.png";
  }
  var marker = new google.maps.Marker({
    map: map,
    position: latlng,
    icon: thisicon,
  });

}
#map {
  height: 100%;
}

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap"></script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...