JS API ArcGIS Server содержит новый класс FeatureTable , который показывает таблицу атрибутов, соответствующую FeatureLayer. Существует опция syncSelection, которая:
Включает взаимодействие между картой и таблицей объектов. Если для этого свойства задано значение true, можно выбрать элемент на карте, щелкнув строку в таблице, и выбрать строку таблицы, щелкнув элемент на карте.
Тем не менее, это, кажется, не учитывает набор выбора, сделанный программно против слоя.
Взяв образец по адресу https://developers.arcgis.com/javascript/3/sandbox/sandbox.html?sample=featuretable , если я применяю выделение к FeatureLayer, это не отражается в FeatureTable:
// Create the feature layer
myFeatureLayer = new FeatureLayer("https://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/Warren_College_Trees/FeatureServer/0", {
mode: FeatureLayer.MODE_SELECTION,
visible: true,
outFields: ["*"],
id: "fLayer"
});
var myQuery = new Query();
myQuery.where = "Spp_Code ='SABA'";
myFeatureLayer.selectFeatures(myQuery,FeatureLayer.SELECTION_NEW)
Это правильно применяет выделение к слою объектов (обратите внимание, что карта содержит только одну точку), но не к таблице объектов (в ней перечислены все 1146 точек с выбранным 0):
Есть ли способ обновить таблицу функций, чтобы отразить выбранный набор?
Ответы:
Начиная с версии 3.16 и выше, реализация этого
SyncSelection
логического значения немного отличается от описанного вами:Итак, я знаю, что это королевская боль, но я полагаю, что вам нужно пройтись по выбранным объектам слоев карты и выбрать их СНОВА, вызвав событие щелчка выбора для них (программно).
источник
Это мое решение для просмотра только того, что видно на карте (на виду :)
...
источник
Подцепите
selection-complete
событие, используйтеgetSelectedFeatures()
, сопоставьте результат с массивом идентификаторов и передайте егоFeatureTable
через viaselectRows
. Затем подключитесьselectFeatures
кclick
событию, и все готово.Как грубая идея:
источник