API Google Планета Земля, как предотвратить дублирование меток? - PullRequest
1 голос
/ 09 февраля 2012

Я уже могу создавать метки по клику!Я хочу, чтобы пользователь не мог создать другую метку с теми же значениями lat и long.Вот мой исходный код, основанный на Google Earth Api.

Каким-то образом это, похоже, не работает ... Как я могу убедиться, что пользователь не создаст новую метку на одном и том же lat long?

Я думал, что if (event.getTarget().getType() != 'KmlPlacemark' && event.getTarget().getGeometry().getType() != 'KmlPoint' должен сделатьтрюк .. Есть идеи?Т_Т

google.earth.addEventListener(ge.getGlobe(), 'click', function(event) {
    if (event.getTarget().getType() != 'KmlPlacemark' &&
          event.getTarget().getGeometry().getType() != 'KmlPoint') {
                      event.preventDefault();
                      //create a place marker for the pole
                    var poleMarker = ge.createPlacemark('');
                    var point = ge.createPoint('');
                    point.setLatitude(event.getLatitude());
                    point.setLongitude(event.getLongitude());
                    poleMarker.setGeometry(point);

                    ge.getFeatures().appendChild(poleMarker);

                    }
                  });

1 Ответ

1 голос
/ 12 февраля 2012

Логика вашей анонимной функции немного избыточна.Позволь мне объяснить.

Во-первых, вы указываете прослушивание событий 'click' для объекта target 'GEGlobe'.

google.earth.addEventListener(ge.getGlobe(), 'click', ...

Затем в вашем условном выражении вы проверяете, является ли target события, объект 'GEGlobe', не KmlPlacemark или KmlPoint - но это всегда происходитчтобы быть правдой.Это из-за способа распространения событий.Событие всегда будет распространяться на GEGlobe, и поэтому условие всегда будет истинным.

if (event.getTarget().getType() != 'KmlPlacemark' &&
          event.getTarget().getGeometry().getType() != 'KmlPoint') ...

Вы можете посмотреть на event.stopPropagation ala event.preventDefault, но для вашего случая простое решение "... для предотвращения создания пользователем другой метки с такими же значениями широты и долготы ... " будет означать сохранение значений широты и долготы, а не создание метки, если значения уже сохранены.Например, что-то вроде следующего может работать для вас.Очевидно, что есть и другие способы сделать это, но принцип сохранения местоположений, а затем проверки их будет верен, как бы вы на самом деле это ни кодировали.

// to hold the places clicked
var locations = new Array();

google.earth.addEventListener(ge.getGlobe(), 'click', function(event)
{
  event.preventDefault();

  // create a string of the place
  var place = event.getLatitude() + ',' + event.getLongitude();

  // if the place is not the locations array
  if(locations.indexOf(place) == -1)
  {
    // add the place to the locations array
    locations.push(place);

    // create a place marker for the pole
    var poleMarker = ge.createPlacemark('');
    var point = ge.createPoint('');
    point.setLatitude(event.getLatitude());
    point.setLongitude(event.getLongitude());
    poleMarker.setGeometry(point);
    ge.getFeatures().appendChild(poleMarker);
  }  
});
...