Медленно срабатывает exportMapImage

0 голосов
спросил 26 Янв, 07 от Appl (1,340 баллов) в категории Программные продукты Esri

У меня ArcGIS Server 9.1 + ArcSde 9.1

На сервере когда я вызываю
 
m_mapServer.exportMapImage(m_mapDescription, m_imageDescription);
 
функция очень медленно отрабатывает. На небольшую картинку к примеру 133x133 пикселя в среднем 1-1.5 секунды. И таких картинок нужно загрузить штук 12 (по две штуки одновременно). Конечно скорость зависит от количества слоёв, но я заметил, что при небольшом их количестве (например, 1 очень простой слой) скорость не намного возрастает ... полсекунды. В чём может быть проблема? Кто может что-нибудь посоветовать? В принципе имеется кэш картинок на стороне web-сервера и если картинка повторяется то она берётся из кэша. Но при первой загрузке очень медленно. Ещё специфика такая что карта изменяется часто и кэш особо здесь не спасает.

16 Ответы

0 голосов
ответил 26 Янв, 07 от Grigoriy (127,020 баллов)
exportMapImage это по сути функция для печати карты клиенту. Переходите на 9.2 - там есть возможность заранее построить кэш для слоев, которые не изменяются + добавить слои из другого сервиса, в котором происходят изменения. Чудес не бывает, и даже в этом случае придется тщательно подбирать конфигурацию сервисов и оборудования.
0 голосов
ответил 26 Янв, 07 от Appl (1,340 баллов)
а как тогда карта генерируется для стандартного web-контрола в  ArcGIS Server 9.1
0 голосов
ответил 26 Янв, 07 от PITKS1 (20,860 баллов)
Григорий, а вы пробовали построить кеш для сервера ?? Это гемморой еще тот. У ArcSOM-ов течет память при генерации и в итоге весь процесс отваливается. Приходится постоянно контролировать сервер и перестартовывать процесс генерации кеша. На маленьких картах это не заметно, например, Онтарио сгенерировать с масштабом 1:8000 - проблематично.
0 голосов
ответил 06 Фев, 07 от Grigoriy (127,020 баллов)
Пробовали. У сервиса на закладке Pooling нужно увеличивать "The maximum time a client can use service". Так чтобы операция построения кэша успевала заканчиваться. Особенной утечки памяти пока не земечено. По окончании построения - память освобождалась. Карты кэшировались не маленькие. Не знаю как Онтарио, но на весь Казахстан строили :).
0 голосов
ответил 12 Фев, 07 от Appl (1,340 баллов)
Сабжевый вопрос решился когда поставили на мощный сервачок :) Очень приятно стало смотреть.
0 голосов
ответил 12 Фев, 07 от PITKS1 (20,860 баллов)
----------------------------------------------------
У сервиса на закладке Pooling нужно увеличивать "The maximum time a client can use service". Так чтобы операция построения кэша успевала заканчиваться.
-----------------------------------------------------
Не надо. При построении кеша это параметр игнорируется. В бетах надо было, а в RC1 и в релизе они эту проблему пофиксили.
------------------------------------------------------
Особенной утечки памяти пока не земечено. По окончании построения - память освобождалась. Карты кэшировались не маленькие. Не знаю как Онтарио, но на весь Казахстан строили :).
----------------------------------------------------
какой масштаб ??? У меня 1:32000+1:16000+1:8000 для Онтарио строился 140 часов. При этом падал из-за утечек раз 5.

Для проверки утечек - сделайте 1 полигон (с качеством данных хотя-бы 1:10000) для всей границы Казахстана, и попробуйте сгенерировать кеш 1:10000. Упадет быстро. На 4Гб компе падает за 40 мин.

На support.esri.com уже народ обсуждает проблему кеша вовсю.

0 голосов
ответил 09 Март, 07 от Grigoriy (127,020 баллов)
Ну вот теперь можно подводить итоги с построением кэша.

1. Будьте внимательны при первоначальном создании схемы кэша. Нельзя использовать установки по-умолчанию. Как правило, нужно обращать внимание на параметр "Tiling Origin in Map Units (optional)". Если оставить его как есть, то начальная точка, по крайней мере в нашем полушарии, будет не там где надо. Соответственно, кэш потом строится по местам где и данных-то нет.
2. Если решили изменить схему тайлов, то используйте инструмент "Generate Map Server Cache Tiling Scheme". Редактирование conf.xml ручками, как правило приводит команды построения-апдейта в испуг, по причине не правильно посчитанного разрешения растров для данного масштаба. см:
- <LODInfo xsi:type="typens:LODInfo">
<LevelID>8</LevelID>
<Scale>12001</Scale>
<Resolution>3.1752709338752</Resolution>
</LODInfo>
3. Команда первоначального построения кэша, при выполнении этих условий, у меня трудилась в течении четырёх суток и настроила кэша на 50 Гб, не подумав заваливаться.
4. Хуже с update. Команда прекрасно работает, если её запускать руками из диалогового окна на определенный набор масштабов и заданный экстент. Но если её запускать из командной строки, скрипта на питоне, из модели в геопроцессинге, то она в лучшем случае не все параметры учитывает (экстент например), а в худшем вываливается. Очень легко её завалить просто добавив в модель команду и попытаться сделать перечень слоев параметром.
Кэш на весь казахстан построился без проблем от 150000000 до 200000. Точнее мне нет смысла строить - там данных нет. Сейчас строится програмно по отдельным экстентам до 25000. А кое-где и до 2000.
0 голосов
ответил 10 Март, 07 от PITKS1 (20,860 баллов)
Вы SP1 поставили ?? После его установки у меня перестало строить кеш для пустых мест. Только там где есть данные.

Вот этот кеш http://devon.esricanada.com/OBM/
у меня строился 150 часов. Падать начал на 1:16000 и 1:8000. Похоже проблема с количеством файлов. Потому как есть оставить файли 512х512 - падает чаще и быстрее. А если 1024х1024 - намного реже.

А этот кеш http://devon.esricanada.com/NS/
падал каждые 40 мин на 1:10000. Там вода вокруг NS - один полигон на 44Мб. Пока его не порезал - даже SDE его закачать было проблемой.
0 голосов
ответил 12 Март, 07 от Grigoriy (127,020 баллов)
Естественно, ставил.
Речь идет не о том, что данных совсем нет image. Нет данных нужного масштаба на нужную территорию.
Исходные данные в широте-долготе. Проект в проекции. Т.е. у меня даже если команда правильно установит первоначальный экстент проекта (чего не происходит), будет строить кэш далеко за нужными границами.
Ну и ещё есть данные более крупного масштаба на определенные территории. Вот с ними и пришлось повозиться, чтобы строить кэш автоматом.
Причем всё это с командой update_map_server_cache.
Если сразу строить на всю территорию по всем масштабам, то у меня построение работало, как я уже говорил, трое суток подряд и настроило тайлов 512*512 (при размере блока в NTFS 16Kb) на 50 Гб с лишним.
Но данные у меня все в SDE и рисуются в проекте достаточно быстро.
0 голосов
ответил 12 Март, 07 от PITKS1 (20,860 баллов)
А как решаете проблему с отсутствием файлов за пределами детальной территории ?
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...