Вопрос

Я использую картографический сервер для создания карты, которая будет отображаться с помощью API карты Google.Я сталкиваюсь с проблемами производительности.

Все мои карты имеют формат шейп-файла.

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

При рендеринге карты с помощью инструмента shp2img с использованием командной строки

shp2img -i gif -m C:\myfolder\mymapfile.map -o C:\myfolder\test.gif -all_debug 5 -map_debug 5

Я получаю следующие показатели из файлов журналов:

[Thu Apr 30 13:50:19 2009].148000 msLoadMap(): 0.000s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap(): Layer 0 (PWorld2), 0.032s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap(): Drawing Label Cache, 0.000s
[Thu Apr 30 13:50:19 2009].180000 msDrawMap() total time: 0.032s
[Thu Apr 30 13:50:19 2009].195000 msSaveImage() total time: 0.015s
[Thu Apr 30 13:50:19 2009].195000 msFreeMap(): freeing map at 01595E18.
[Thu Apr 30 13:50:19 2009].195000 freeLayer(): freeing layer at 0159CD00.
[Thu Apr 30 13:50:19 2009].195000 shp2img total time: 0.047s

При рендеринге той же карты через картографический сервер используйте

http://localhost/cgi-bin/mapserv.exe?mymapfile.map&layers=&mode=tile&tilemode=gmap&tile=1+1+2

файл журнала дает это:

[Thu Apr 30 13:51:50 2009].664000 CGI Request 1 on process 3520
[Thu Apr 30 13:51:50 2009].664000 msTileSetExtent (-10013744.792915, 8348.961808) (-5009.377085, 10010405.208192)
[Thu Apr 30 13:51:51 2009].23000 msDrawMap(): Layer 0 (PWorld2), 0.359s
[Thu Apr 30 13:51:51 2009].23000 msDrawMap(): Drawing Label Cache, 0.000s
[Thu Apr 30 13:51:51 2009].23000 msDrawMap() total time: 0.359s
[Thu Apr 30 13:51:51 2009].23000 msSaveImage() total time: 0.000s
[Thu Apr 30 13:51:51 2009].23000 mapserv request processing time (loadmap not incl.): 0.359s
[Thu Apr 30 13:51:51 2009].23000 msFreeMap(): freeing map at 01598690.

Для той же карты инструмент shp2img отображает карту в 10 раз быстрее, чем картографический сервер.При добавлении дополнительных слоев и использовании режима мозаики для карты Google это время может составлять до 10 секунд.

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

Это было полезно?

Решение

Между запросом shp2img и запросом Mapserv есть несколько различий:

1) shp2img создает одно изображение, ваш запрос Mapserv генерирует плитки.Это означает, что ему, возможно, придется визуализировать 9 плиток для одной и той же ограничивающей рамки вместо 1.Это приводит к накладным расходам.Попробуйте выполнить рендеринг без установленной опции «Плитки» и запустите тест еще раз.

2) У вас есть небольшие накладные расходы для запроса CGI в Mapserv 3) Mapserv нажимает изображение через HTTP, в то время как SHP2img пишет непосредственно на диск.4) Вы не указали слой в запросе к серверу, что означает, что сервер ищет слои.

Другие советы

Вы можете прочитать это:http://mapserver.org/optimization/index.html

  • Одним из наиболее важных моментов является удаление неиспользуемых проекций из файла EPSG.Например.под RedHat 6 /usr/share/proj/epsg у меня есть 3 проекции.
  • Удалить неиспользуемые шрифты
  • Парсер файла карты читает файл сверху вниз, поэтому наиболее используемые слои помещаются вверху файла (парсер EPSG работает таким же образом).

Файлы форм «должны иметь» одну и ту же проекцию вызывающего объекта, иначе Mapserver должен будет перепроецировать их на лету.

НАПРИМЕР.Из моего кода OpenLayers (900913):

var options = {
    projection: new OpenLayers.Projection('EPSG:900913'), //aka  EPSG:3785
    displayProjection: new OpenLayers.Projection('EPSG:4326'), //geographic 

Все мои шейп-файлы основаны на проекциях 900913.

У меня есть пара предложений, но нет однозначных ответов. Я не особо занимался настройкой картографического сервера, но работал с людьми, которые это делали.

  1. Вы можете провести множество оптимизаций картографического сервера, я бы проверил список рассылки.
  2. Сделайте файл карты как можно меньшим, так как открытие и анализ файла карты могут занять у картографического сервера много времени.
  3. Создайте все плитки заранее и просто используйте картографический сервер, чтобы получить файлы.Тайлинг на лету происходит не очень быстро.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top