Глядя на ваш код, единственная причина, по которой я могу думать, что 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'){
...
}
}