Использование классов Label против запросов определения - что лучше всего работает?

11

Что обеспечит наилучшую производительность для работы в ArcMap с очень большими наборами данных, хранящимися в базе геоданных ArcSDE? Несколько классов меток, использующих сложные запросы SQL для маркировки определенных функций, или несколько копий одного и того же слоя, использующих одни и те же сложные запросы SQL, заданные в качестве запроса определения для каждого слоя?

ianbroad
источник
2
Я думаю, что «несколько копий одного и того же слоя, каждый со своим собственным определением запроса и простой маркировкой на основе полей», войдет в список избранных, но у меня нет метрик, которые бы подкрепляли это чувство, поэтому я считаю, что это отличный вопрос. Будет ли класс объектов файловой базы геоданных с одним миллионом полигонов рассматриваться как очень большой набор данных на вашем языке?
PolyGeo

Ответы:

5

Предполагая, что запросы SQL для классов меток такие же, как и для разделенных слоев, однослойный подход с несколькими классами меток будет быстрее. Зачем?:

Маркировка в ArcMap выполнит один запрос для рисования слоя, а затем один запрос для каждого класса меток. Таким образом, слой с 4 классами меток будет запрашивать один раз (1 запрос) для всех прорисованных объектов, а затем всего 4 дополнительных раза (по одному для каждого класса меток или еще 4 запроса) = всего 5 запросов.

Если вы разделите слои, у вас будет 1 отфильтрованный запрос (запрос определения) для каждого слоя (4 запроса) плюс тот же запрос для каждого класса меток (еще 4 запроса) = всего 8 запросов.

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

Обратите внимание, что в ArcGIS Server кеш используется для маркировки объектов, и 1 слой с 4 классами меток, скорее всего, будет обрабатываться одним запросом, когда классы меток используют довольно стандартный SQL без специфических для поставщика функций.

Крейг Уильямс
источник
2
Но в сценарии запроса определения я бы не создавал классы меток. Они будут просто помечены на основе значения одного поля. Или я неправильно читаю третий абзац?
ianbroad
Классы меток используются для маркировки подмножества объектов, определенных предложением SQL where (точно так же, как запрос определения), и имеют свой собственный текстовый символ, выражение метки и правила размещения. Из вашего описания мне непонятно, как переход от классов к запросу определения позволяет пометить только одно поле. Вы имеете в виду сложные выражения меток, а не сложные запросы SQL?
Крейг Уильямс
1
Нет, я просто имею в виду, что для обоих сценариев ни одно из них не использует выражение метки. Оба помечены с использованием одного поля.
ianbroad
4
Я работаю в команде маркировки в Esri. Я хорошо знаком с тем, как это работает. Расположение вызова в запросе не повлияет на производительность, но вы захотите уменьшить общее количество запросов.
Крейг Уильямс
1
Я думаю, что теперь понимаю ваш ответ, Крейг, но мне интересно, есть ли способ перефразировать его, чтобы было легче понять. Я должен был прочитать это несколько раз, чтобы понять, что ваша математика на самом деле, вероятно, не так, как я и другие сначала подумали.
jmpreiks
2

Я выполнил несколько очень простых тестов, используя некоторые данные NHD, поступающие из соединения SDE, и обнаружил очень небольшую разницу между обоими методами.

  1. 7 классов надписей в одном слое, а также 7 отдельных символов: 36 секунд
  2. 7 Отдельные слои с запросами определения, по одному классу меток в каждом без запроса: 37 секунд

Несколько предостережений:

  1. Мой тест был очень простым с простыми ярлыками и простыми запросами, сложные запросы должны быть проверены, так как это было частью вопроса.
  2. Около трети общего времени заняло рисование символов.
  3. Мое время было с секундомером, так что погрешность довольно большая.
jmpreiks
источник
+1 за ваши тесты. Интересно, имеет ли значение разница между конфликтами меток или нет? Возможно, вы можете увеличить размер шрифта, чтобы множество ярлыков перекрывалось. Затем отключите опцию размещения перекрывающихся надписей. Есть ли разница сейчас?
Йенс
1
На самом деле в моих тестах было много конфликтов меток, потому что мне приходилось показывать большую степень, чтобы получить действительно длительное время обработки, которое я мог легко измерить.
Jmpreiks
1
Нет такой вещи, как «нет меток классов», как всегда есть.
Крейг Уильямс
Правда Крейг, я отредактировал свой ответ, чтобы уточнить.
jmpreiks
1

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

Вам все равно придется проверить. Однако я бы использовал запросы определений, а не метки классов.

geogeek
источник
1
Да, пожалуйста, проверьте (и сообщите, если можете). Я также склоняюсь к определению запросов, но по соображениям удобства использования. Диалоги выражений надписей мучительно медлительны и на несколько уровней клика глубже, чем по умолчанию. К ним также проще добраться в python.
Мэтт Уилки
Я не думаю, что это квалифицируется как ответ без какой-либо технической базы или количественного тестирования. Это может ввести в заблуждение некоторых людей. Было бы лучше в качестве комментария к первоначальному вопросу.
Jmpreiks
Я бы сделал это, если бы у меня была возможность комментировать. Спасибо за отрицательное голосование. Просто пытаюсь помочь.
Geogeek