queryFeatures не возвращает все пересекающиеся функции

Предполагаемый эффект

Когда пользователь щелкает полигональный объект (округ, регион или район/муниципалитет) или использует виджет «Рисование», на карточке панели мониторинга отображается количество пересеченных точечных объектов, возвращенных queryFeatures() (см. ниже).

localitiesLayer.queryFeatures(query).then(function(results) {
    var queriedLocalities = results.features;
    if (queriedLocalities.length > 0) {
        var fossilsFound = queriedLocalities.length;
    } 
}

Проблема

Максимальное количество возвращенных пересекающихся объектов равно 2000, даже если выбрано более 2000 точечных объектов.

На фото ниже всего 2000 местонахождений окаменелостей в этом районе! когда должно быть возвращено более 3000 функций.

2000 местонахождений окаменелостей должно быть больше 3000

Поиск проблемы

Исправлена ​​проблема, когда вместо запроса к векторному слою localitiesLayer запрашивался представление векторного слоя. Это приводит к неразрешимой проблеме, связанной с тем, что количество мест, возвращаемых queryFeatures, изменяется в зависимости от уровня масштабирования (как подробно описано в Справочник по API для queryFeatures FeatureLayerView).

Поскольку кажется, что я застрял, используя запрос на стороне сервера, мне нужно понять, почему это происходит с таким, казалось бы, произвольным числом.

Сначала я подумал, что это связано с возможными проблемами топологии между объектами, но почему это повлияет на полигон, созданный виджетом Draw? Прежде чем написать этот вопрос, я также запустил инструмент интеграции на всех слоях объектов, чтобы убедиться, что нет никаких несовпадающих полигонов.

Вопрос

Почему верхний предел объектов, возвращаемый queryFeatures() на localitiesLayer 2000, даже если более 2000 точечных объектов пересекаются с выбранным полигоном?

Почему запрос с представлением векторного слоя решает эту проблему (хотя, как описано выше, это не является допустимым решением этой проблемы)?

CodePen приложения с ошибкой


person drm1217    schedule 22.01.2021    source источник


Ответы (1)


Обычно сервисы объектов имеют максимальное количество объектов, которые можно получить в одном запросе. Вот что здесь происходит.

Вы можете проверить конечную точку сервиса слоя (LAU_Localities_View - 0), чтобы найти эти значения в Max Record Count, здесь установлено значение 2000.

Поэтому вам придется использовать какую-то другую технику, чтобы иметь все значения. Одним из простых способов является итерация и запрос с дополнительным условием, используя поле в качестве последнего индекса, например OBJECTID. Вам нужно будет упорядочить результат по полю индекса.

person cabesuon    schedule 22.01.2021