我如何在Azure Maps应用程序中获取和存储选定的geom要素以用于其他功能

问题描述 投票:0回答:1

我正在对地图中的要素使用'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 ...

javascript geometry maps azure-maps
1个回答
0
投票

查看您的代码,我能想到的未定义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'){
      ...
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.