2012-02-09 3 views
1

이미 클릭으로 장소 표시를 만들 수 있습니다! 내가 원하는 것은 위도와 경도가 같은 다른 장소 표시를 사용자가 만들지 못하게하는 것입니다. 다음은 Google 어스 API를 기반으로하는 초기 코드입니다.Google 어스 API, 위치 표시 중복 방지하는 방법?

어쨌든 작동하지 않는 것 같습니다 ... 사용자가 동일한 위도에 새로운 장소 표시를 만들지 않으려면 어떻게해야합니까?

나는 if (event.getTarget().getType() != 'KmlPlacemark' && event.getTarget().getGeometry().getType() != 'KmlPoint'이 트릭을해야한다고 생각했다. 어떤 생각? T_T

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); 

        } 
        }); 
+0

실용적인 (전체) 데모를 얻을 수 있습니까? http://code.google.com/apis/ajax/playground/#hello,_earth에서 코드를 시도했지만 지구본을 클릭해도 아무런 효과가 없습니다. – miguev

답변

1

익명 기능의 논리는 약간 중복됩니다. 설명하겠습니다.

먼저 대상 ''GEGlobe '개체에서'클릭 '이벤트를 수신하도록 지정합니다. 행사는 'GEGlobe'개체의 대상가하는 KmlPlacemark와 또는 KmlPoint가 아닌 경우

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

그런 다음 조건문에 당신은 테스트 - 그러나 이것은 항상 true가 될 것입니다. 이는 이벤트 전파가 작동하는 방식 때문입니다. 이벤트는 항상 GEGlobe로 전달되므로 조건은 항상 true입니다.

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

당신은 간단한 솔루션 event.preventDefault 람하지만 경우에 event.stopPropagation 볼 수 있었다 "... 같은 위도 긴 값을 가진 다른 장소를 만드는에서 사용자를 방지하기 위해 ..." 저장하는 것 lat lng 값은 이미 저장된 값 인 경우 위치 표시를 만들지 않습니다. 예를 들면 다음과 같은 것이 당신을 위해 일할 수도 있습니다. 분명히이 작업을 수행 할 수있는 다른 방법이 있지만 위치를 저장하고 그 위치를 확인하는 것은 사실 보류하지만 실제로 코드를 작성하는 것이 원칙입니다.

// 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); 
    } 
}); 
관련 문제