2012-02-09 12 views
1

私は既にクリックで目印を作成できます。私が望むのは、ユーザーが同じ緯度と経度の値を持つ別の目印を作成しないようにすることです。私の初期コードはGoogle Earth APIに基づいています。Google Earth API、目印の重複を防ぐにはどうすればよいですか?

どうにかしてもうまくいかないようです...ユーザーが同じLatに新しい目印を作成しないようにするにはどうすればよいですか?

私は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に伝播するため、条件は常に真です。

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

あなたが簡単な解決策event.preventDefaultたalaが、あなたのケースのためにevent.stopPropagationで見ることができる「...同じ緯度と長い値を持つ別の目印を作成するからユーザーを防ぐために...」を格納するだろう現在の値が格納されている場合は目印を作成しません。例えば、次のようなものがあなたのために働くかもしれません。明らかにこれを行う他の方法がありますが、場所を格納し、それらをチェックするという原則は実際にはコード化しますが、実際にはそれを保持します。

// 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); 
    } 
}); 
関連する問題