我正在对地图中的要素使用'click'事件。我正在使用应该可以重用的“全局”变量,但是当我再次尝试使用var时,它报告var为“未定义”。我一直无法弄清楚将其设置为“未定义”的原因或原因,因此想知道是否有任何方法可以存储geom功能的ID,然后我可以简单地“隐藏”在网页上,然后检索该ID。再次选择功能的值而无需再次单击功能?
// Global vars
var map, shp;
// Called by click event
function getFeatureProps (e) {
shp = e; // store selected feature (e) for use later
...do other things...
alert(shp); // reports [object] as expected
}
// Called from button
function changeFeatureProperties () {
if (shp.shapes[0].getType() == 'Polygon') { // ERROR: shp is undefined
...only if Polygon...
}
else if (shp.shapes[0].getType() == 'Point') {
...only if Point...
}
...do other things...
}
TIA!
Rick ...
查看您的代码,我能想到的未定义shp的唯一原因是,在getFeatureProps之前调用了changeFeatureProperties,或者在未单击任何形状时调用了getFeatureProps。事件是在地图上还是在图层上?
ID可以使用,并且可以使用getShapeById函数通过ID检索存储在DataSource中的形状。
同样值得注意的是,事件返回的形状可以是atlas.Shape或GeoJSON要素对象。如果将形状添加到数据源,则将返回atlas.Shape对象,在大多数其他情况下,它将是GeoJSON功能。要处理此问题,请添加一个if语句,例如
if(e.shapes[0] instanceof atlas.Shape){
if(e.shapes[0].getType() === 'Polygon'){
...
}
} else {
//Shape is a GeoJSON feature.
if(e.shapes[0].geometry.type === 'Polygon'){
...
}
}