Логика вашей анонимной функции немного избыточна.Позволь мне объяснить.
Во-первых, вы указываете прослушивание событий '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);
}
});