Как я могу получить и сохранить выбранную функцию geom для использования в других функциях в моем приложении Azure Maps - PullRequest
0 голосов
/ 21 апреля 2020

Я использую событие 'click' для объектов на карте. Я использую «глобальную» переменную, которую я могу использовать повторно, но когда я пытаюсь использовать переменную снова, она сообщает, что переменная «неопределена». Мне не удалось понять, что или почему для этого параметра установлено значение «undefined», поэтому я удивляюсь, есть ли способ сохранить, скажем, идентификатор объекта geom, который я затем могу просто «спрятать» на веб-странице, а затем извлечь это значение снова, чтобы выбрать функцию, не нажимая ее снова?

// 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!

Рик ...

1 Ответ

0 голосов
/ 22 апреля 2020

Глядя на ваш код, единственная причина, по которой я могу думать, что shp не определен, это то, что changeFeatureProperties вызывается перед getFeatureProps или что getFeatureProps вызывается, когда ни одна фигура не была нажата. Это событие на карте или на слое?

Можно использовать идентификаторы, а формы, хранящиеся в источнике данных, можно получить по идентификатору с помощью функции getShapeById.

Также стоит отметить, что формы, возвращаемые событиями, могут быть объектным объектом atlas.Shape или Geo JSON. Если форма была добавлена ​​в DataSource, будет возвращен объект atlas.Shape, в большинстве случаев это будет объект Geo JSON. Чтобы справиться с этим, добавьте оператор 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'){
      ...
   }
}
...