Как улучшить производительность рендеринга очень большого шейп-файла?

20

У меня есть полигональный шейп-файл с файловым компонентом 100 МБ .dbf и 500 МБ .shp. Причина, по которой он так велик, заключается в том, что он классифицируется как база земли для всего района.

Каждый раз, когда я просматриваю файл в ArcCatalog или ArcMap и слегка перемещаю окно просмотра, весь файл необходимо перерисовать с нуля. Я пробовал пространственное индексирование и импорт в базу геоданных - ни один из подходов не обеспечивает заметного улучшения производительности в отношении рендеринга.

Страница справки Esri предполагает, что для повышения производительности шейп -файла пользователь может обобщить файл . Хотя это, очевидно, сработает, я не хочу терять какую-либо информацию. Разделение файла не является идеальным, так как я делаю много геообработки / запросов по всей его области. Думаю, я мог бы избежать одновременного просмотра всей области, но иногда, например, полезно видеть, какие части файла выбрал запрос.

Есть ли какой-то другой подход, который я мог бы использовать для улучшения производительности рендеринга?

(Теоретически, создание «пирамид» шейп-файлов было бы идеальным - я не уверен, почему ArcGIS никогда не поддерживал такой подход - по крайней мере, я знаю ...)

youzer
источник
2
Имея такой большой шейп-файл, просто напрашивается на неприятности. По моему опыту, большие шейп-файлы очень легко портятся. Получите его в файловой базе геоданных, чтобы избежать повреждения. Лучшее рисование будет дополнительным бонусом.
Девдатта Тенгше
Как я кратко отмечал выше, я обнаружил, что импорт большого шейп-файла в GDB не создает улучшений - с точки зрения чисто рендеринга. Вы совершенно правы, хотя, с общей точки зрения, не имеет смысла не иметь большой файл shp в GDB (по разным причинам).
youzer
2
Вы рассматривали возможность использования растра вместо шейп-файла?
Кирк Кайкендалл
Я запутался в одном: что, если размер файла равен 2 ГБ, а объем памяти компьютера также равен 2 ГБ, то как ArcGIS будет обрабатывать данные этого файла, так как он будет заполнять всю память
user2174920
если у вас есть миллионы маленьких полигонов, следует использовать растровую позорную поговорку (если только вы не делаете слой почвы ...)
если вы не знаете - просто ГИС

Ответы:

22

Мои мысли:

  1. Экспортируйте свой шейп-файл в класс пространственных объектов файловой базы геоданных - я думаю, что его производительность рисования будет лучше, но я не уверен, насколько
  2. Если вы используете ArcGIS Desktop 10.0 или более поздней версии, переместите его в слой базовой карты - это значительно улучшит производительность рисования
  3. Если вам нравится звук пирамид для векторных данных, обязательно проголосуйте за эту идею ArcGIS .
PolyGeo
источник
3
За исключением того, что вы не можете сделать анализ или выборку на слоях базовой карты IIRC.
blah238
4
Подозреваю, что это может быть достигнуто с помощью второго слоя в оглавлении, указывающего на тот же источник, а не на слой базовой карты, который обычно выключен, но может отображаться, когда это требуется для анализа или выбора.
PolyGeo
PolyGeo - спасибо за ответ. Я пробовал базовый слой, и действительно главное улучшение производительности - когда нажата кнопка «увеличить на слой», файл не отображается с нуля. Обходной путь, который вы предлагаете с учетом комментария blah238, возможно, сработает в некоторых проектах, но я обнаружил дополнительную вещь, которая ограничивает использование базового уровня, это то, что вы не можете визуализировать dbf, используя любые символы. С этим ограничением я мог бы также обобщить файл для справки (не базовый слой), а затем при необходимости отобразить «настоящий» слой. Не очень хорошее решение .. Я буду голосовать за идею "пирамид", как вы предлагаете!
youzer
6

Есть много советов по улучшению производительности ArcMap, которые могут помочь, но вот три совета, которые я использовал.

  1. Я бы удостоверился, что система координат фрейма данных соответствует моему шейп-файлу и любым другим слоям, которые у меня есть в оглавлении; но чем меньше слоев будет отображаться, тем лучше.
  2. Я бы использовал мою символику только на основе простых линий и заливок без прозрачности или других сложностей.
  3. Если вам нужен как обзор, так и возможность панорамирования вблизи, подумайте об использовании лупы или средства просмотра.
Джон
источник
в общем очень хороший совет. Я действительно реализовал все это в своих первоначальных тестах - кажется, что для работы с очень большими классами объектов / шейп-файлами требуется больше / разные приемы.
youzer
4

Вы можете улучшить рендеринг, установив параметры отображения слоя, чтобы слой не отображался в больших масштабах (например,> 1: 10000). Вы можете найти эту опцию в свойствах слоя: Свойства слоя> вкладка «Общие»> «Не показывать слой при уменьшении масштаба за пределами ...»

Кроме того, местоположение хранилища имеет значение - например, если оно хранится на старом сервере с низкой пропускной способностью, вы гарантированно будете иметь низкую производительность. Я обычно обрабатываю 1 ГБ + векторные данные на сервере, что заставляет меня задаться вопросом, нужно ли обновлять спецификации вашей системы (для справки, я использую 12 ГБ ОЗУ, 2-е поколение i7, средняя видеокарта).

введите описание изображения здесь

Аарон
источник
3

Вам нужно сделать карту, чтобы сделать ваши запросы? Что если вы запустили скрипты Python и получили доступ к данным, не рисуя карту? Я не уверен, что ваш точный процесс, потребности и т. Д., Но мысль.

gm70560
источник
3

В качестве продолжения ответа Аарона вы также можете использовать запрос определения, чтобы ограничить число результатов, возвращаемых для визуализации (и оно включает анализ - я считаю, что он работает во многом как выбор). Если не все функции необходимы для просмотра в любой конкретный момент и вы не переключаете регионы на тонну, запрос определения может быть работоспособным решением, но не точным ответом на ваш вопрос или потребности.

nicksan
источник
3

Я слышу ваше разочарование. Я обычно работаю с такими большими шейп-файлами, и у меня вообще нет проблем с отображением. Я согласен со всеми вышеприведенными комментариями, особенно чтобы убедиться, что все в одной проекции, включая фрейм данных. Я предполагаю, что вы скопировали файл локально и не пытаетесь получить к нему доступ по сети? Одна вещь, которая вызовет проблемы с отображением шейп-файлов такого размера, - это наличие большого количества вершин, как в потоковой сети. Единственное решение, которое я нашел в этом, - это создание скрипта Python для определения слоя на лету, поэтому я рисую только несколько за раз. Другое дело было бы обновить графическую память вашего компьютера и графическую карту.

Рут
источник