Javascript 将属性附加到KmlPlacemark GE插件
我将Lat/Lon数据作为GeoJSON输入,每个点都有与之相关的附加属性。我需要能够在单击Javascript 将属性附加到KmlPlacemark GE插件,javascript,google-earth-plugin,Javascript,Google Earth Plugin,我将Lat/Lon数据作为GeoJSON输入,每个点都有与之相关的附加属性。我需要能够在单击KmlPlacemark时将这些属性传递到回调函数中。我知道我可以使用闭包并在闭包上单独注册事件侦听器,但我更喜欢在GEWindow对象上有一个侦听器 我的解决方案涉及将属性作为JSON数据粘贴到placemark id中 var data = {foo: 123, bar: 321}; var placemark = ge.createPlacemark(JSON.stringify(data));
KmlPlacemark
时将这些属性传递到回调函数中。我知道我可以使用闭包并在闭包上单独注册事件侦听器,但我更喜欢在GEWindow
对象上有一个侦听器
我的解决方案涉及将属性作为JSON数据粘贴到placemark id中
var data = {foo: 123, bar: 321};
var placemark = ge.createPlacemark(JSON.stringify(data));
然后在回调中,它被解析回一个对象
google.earth.addEventListener(ge.getWindow(), 'click', function(e){
var target = e.getTarget(),
data;
if (target && target.getType() == 'KmlPlacemark'){
data = JSON.parse(target.getId());
myHandler(target, data);
}
});
有没有一种不那么老套的方法呢?我找到了一个我很满意的解决方案。我使用递增的id作为placemarks,并使用id作为键将属性存储在对象中 虚拟数据 创建地点标记 事件处理程序中的查找属性
var pointData = [
{lat: 123, lon: 123, properties: {foo: 1, bar: 2}},
{lat: 123, lon: 123, properties: {foo: 1, bar: 2}},
{lat: 123, lon: 123, properties: {foo: 1, bar: 2}}
];
var properties = {},
currentId = 0;
pointData.forEach(function(point){
var id = (currentId++).toString();
point = ge.createPoint(''),
placemark = ge.createPlacemark(id);
point.setLatitude(point.lat);
point.setLongitude(point.lon);
placemark.setGeometry(point);
properties[id] = point.properties;
});
google.earth.addEventListener(ge.getWindow(), 'click', function(e){
var target = e.getTarget(),
data;
if (target && target.getType() == 'KmlPlacemark'){
data = properties[target.getId()];
myHandler(target, data);
}
});