我正在尝试使用Google Earth Plugin API来处理我正在编写的应用程序。我希望能够从地图中删除地标。我能想到的最简单的方法是创建一个带有“删除”链接的气球弹出窗口,但我一直无法弄清楚如何删除:
balloon.setContentString(
'Location: ' + event.getLatitude().toString() + ", " +
event.getLongitude().toString() + '<br /> <br />' +
'<a href="#" onclick="ge.getFeatures().removeChild(event.getCurrentTarget())">Delete</a><br /><a href="#" onclick="prompt(\'Enter new name\', \'blah\'\)">Rename</a>');
这导致:
Uncaught TypeError: Object #<MouseEvent> has no method 'getCurrentTarget' earth2.html:1 onclick
(正如你所看到的,我也希望能够重命名,但是当我想出删除时,可能不会很难弄清楚?)
整个代码可在以下网址找到:
http://chrishowells.co.uk:81/earth2.html
整个街区:
google.earth.addEventListener(ge.getWindow(), 'mousedown', function(event) {
if (event.getTarget().getType() == 'KmlPlacemark' &&
event.getTarget().getGeometry().getType() == 'KmlPoint') {
// don't show the default popup
//http://code.google.com/apis/ajax/playground/?exp=earth#javascript_in_balloons
event.preventDefault();
var balloon = ge.createHtmlStringBalloon('');
balloon.setFeature(event.getTarget());
//balloon.setMaxWidth(300);
balloon.setContentString(
'Location: ' + event.getLatitude().toString() + ", " +
event.getLongitude().toString() + '<br /> <br />' +
'<a href="#" onclick="ge.getFeatures().removeChild(event.getCurrentTarget())">Delete</a><br /><a href="#" onclick="prompt(\'Enter new name\', \'blah\'\)">Rename</a>');
ge.setBalloon(balloon);
var placemark = event.getTarget();
dragInfo = {
placemark: event.getTarget(),
dragged: false
};
}
});
非常感谢任何帮助:)
答案 0 :(得分:1)
你得到的错误正在告诉你究竟是什么问题。
Object #<MouseEvent> has no method 'getCurrentTarget'
问题是,在onclick
锚点的事件处理程序中,event
变量引用了链接上的点击而不是点击地标。那就是event
是一个DOM鼠标事件而不是KmlMouseEvent。
此外,您需要调用以引用最初调度KMLEvent的对象的方法是getTarget
。
请参阅KmlEvent.getTarget的API指南: https://developers.google.com/earth/documentation/reference/interface_kml_event#adfee4d0797ff7d437e77c649673f9ffc
要解决此问题,您需要做很多事情,首先定义一个全局变量来保存任何当前的地标点击事件。在您定义ge
变量的脚本顶部执行此操作,同时添加currentEvent
变量。即。
var ge = null;
var currentEvent = null;
其次,应该修改您的mousedown
监听器,以允许气球中的javascript引用您定义的currentEvent
变量。
最后,您应该使用currentEvent
变量引用地标,以通过气球中的代码将其删除。
例如。
google.earth.addEventListener(ge.getWindow(), 'mousedown', function(event) {
if (event.getTarget().getType() == 'KmlPlacemark' &&
event.getTarget().getGeometry().getType() == 'KmlPoint') {
currentEvent = event; // used in the balloon content string
event.preventDefault();
var balloon = ge.createHtmlStringBalloon('');
balloon.setFeature(event.getTarget());
balloon.setContentString(
'Location: ' + event.getLatitude().toString() + ", " +
event.getLongitude().toString() + '<br /> <br />' +
'<a href="#" onclick="ge.getFeatures().removeChild(currentEvent.getTarget());ge.setBalloon(null);">Delete</a><br /><a href="#" onclick="prompt(\'Enter new name\', \'blah\'\)">Rename</a>');
ge.setBalloon(balloon);
dragInfo = {
placemark: event.getTarget(),
dragged: false
};
}
});
我已对此进行了全面测试,并且当您点击delete
地图已移除并且当前气球已关闭时,它可以正常运行。