创建可隐藏的地标

时间:2013-04-18 18:41:05

标签: google-maps-api-3 google-earth-plugin

我一直在努力创建一个我可以隐藏和显示的地标(如打开和关闭可见性)(按点击)...我正在使用它来制作地标:

function placemark(lat, long, name, url, iconsrc){
    var placemark = ge.createPlacemark(name);
    ge.getFeatures().appendChild(placemark);
    placemark.setName(name);

    // Create style map for placemark
    var icon = ge.createIcon('');
    if(iconsrc == "0")
        icon.setHref('http://maps.google.com/mapfiles/kml/paddle/red-circle.png');
    else{
        icon.setHref(iconsrc);
    }
    var style = ge.createStyle('');
    style.getIconStyle().setIcon(icon);
    if(iconsrc != "0")
        style.getIconStyle().setScale(2.5);

    placemark.setStyleSelector(style);

    // Create point
    var point = ge.createPoint('');
    point.setLatitude(lat);
    point.setLongitude(long);
    //point.setAltitudeMode(1500);
    placemark.setGeometry(point);
    google.earth.addEventListener(placemark, 'click', function(event) {
    // Prevent the default balloon from popping up.
        event.preventDefault();

        var balloon = ge.createHtmlStringBalloon('');
        balloon.setFeature(placemark); // optional
        balloon.setContentString(
            '<iframe src="'+ url +'" frameborder="0"></iframe>');

        ge.setBalloon(balloon);
    });              

}

我已经尝试了一切......从这个:

function hidePlacemark(name){
    var children = ge.getFeatures().getChildNodes();
    for(var i = 0; i < children.getLength(); i++) { 
        var child = children.item(i);
        if(child.getType() == 'KmlPlacemark') {
            if(child.getId()== name)
            child.setVisibility(false);
        }
    }
}

使用此ge.getFeatures().removeChild(child);

任何人都可以指出我正确的方向创建一个功能,让我可以根据需要打开/关闭可见性。

2 个答案:

答案 0 :(得分:2)

你的hidePlacemark函数缺少最终IF语句中的某些{}

if(child.getId()== name)

你有

function hidePlacemark(name){
    var children = ge.getFeatures().getChildNodes();
    for(var i = 0; i < children.getLength(); i++) { 
        var child = children.item(i);
        if(child.getType() == 'KmlPlacemark') {
            if(child.getId()== name)
            child.setVisibility(false);
        }
    }
}

制作

function hidePlacemark(name){
    var children = ge.getFeatures().getChildNodes();
    for(var i = 0; i < children.getLength(); i++) { 
        var child = children.item(i);
        if(child.getType() == 'KmlPlacemark') {
            if(child.getId()== name) {
                child.setVisibility(false);
            }
        }
    }
}

但是-------你最好这样做,因为它更快,因为你不需要遍历所有你的地标

function hidePlacemark(name) {
    var placemark = ge.getElementById(name);
    placemark.setVisibility(false);
}

答案 1 :(得分:1)

我认为普通ge.getFeatures().removeChild(placemark);有效。

我使用了这个GooglePlayground,只是将以下代码添加到第8行(在此GooglePlayground Sample中为空):

  addSampleButton('Hide Placemark', function(){ 
       ge.getFeatures().removeChild(placemark); 
  });

点击按钮隐藏地标会在此隐藏像地块一样的地标。您的问题可能在您的代码中的其他位置吗?