SlideShare a Scribd company logo
MapServer  и  PHP/MapScript Публикация картографических данных  с помощью  PHP Климов Евгений  aka Slach
Вступительное слово phpConf 2006 – Rasmus Lerdorf http://talks.php.net/show/phpclub/25   Вопрос - «Когда будет вся Россия ? »  Ответ - «Картографических данных в  Yahoo  и  Google  нет и их очень сложно получить» Buzz  «надо делать карту своего города»  ;-)
OpenSource  инструменты для  PHP UMN MapServer –  среда разработки для построения картографических интернет приложений, разработанная под эгидой  NASA  и  University of Minnesota (UMN) . Это не полноценная  GIS  система, зато она превосходно справляется с задачами отображения картографических данных как растровых так и векторных Как скачать -  http://mapserver.gis.umn.edu/download   Как ставить -  http://mapserver.gis.umn.edu/docs/howto   Поддерживаемые  OS FreeBSD, Linux (Debian, RedHat, SuSe), Windows, Mac OSX  и т.п. ;)
PHP/MapScript MapScript –  скриптовый интерфейс прорисовки карты для  MapServer,  сделанный с использованием  SWIG http://mapserver.gis.umn.edu/docs/reference/mapscript/   PHP/MapScript – PHP4/5 Extension  для интеграции  MapScript  и  PHP  (существуют  bindings  для  Perl, Python, Ruby, C#, Java) Где брать http://www.maptools.org/php_mapscript/   Как ставить  http://mapserver.gis.umn.edu/docs/howto/phpmapscript-install
PHP/MapScript  плюсы / минусы Плюсы Низкоуровневый интерфейс, обеспечивает доступ практически ко всем объектам карты Позволяет создавать собственные слои ООП Минусы Не включен в  pecl   ;) Не  thread-safe Нет наследования от базовых классов  MapScript ( инициализация через ф-ции  ms_newMapObj)
PHP/MapScript –  простой пример // Загрузка PHP/MapScript  define ( 'MAPSCRIPT_MODULE' ,  dirname ( __FILE__ ). 'php_mapscript.' . PHP_SHLIB_SUFFIX );  if (! extension_loaded ( 'MapScript' ))  dl ( MAPSCRIPT_MODULE );  // открытие файла с картой, производится парсинг .MAP файла  define ( 'MAPFILE' ,  dirname ( __FILE__ ). '/mapinfo.map' ); $oMap  =  ms_newMapObj (  MAPFILE  );  // параметры системы координат для вашей карты, типы проекций и систем координат //  см. http://proj.maptools.org/  $oMap -> setProjection ( 'init=epsg:42304' );  // будем выводить картинку 800x600 в  PNG  формате $oMap -> setsize ( 800 ,  600 );  $oMap -> selectoutputformat ( 'png' );  // прорисовка карты в памяти, поскольку не заданы условия фильтрации данных // и масштаба, карта   строится по всем слоям, с минимальным увеличением и стилями  //  заложенными в карте  $oImage  =  $oMap -> draw ();  // вывод картинки  header ( 'Content-type: image/png' );  // при желании картинку можно вывести в Кеш  $url  =  $oImage -> saveImage ( '' );
Построение карты - с чего начать MapServer  Поддерживаемые форматы Растровые –   с помощью  GDAL  http://www.gdal.org/formats_list.html   Векторные – с помощью  OGR http://www.gdal.org/ogr/ogr_formats.html наиболее распространенные  MapInfo, ESRI, PostGIS MapServer  как  GEO- сервис WMS (client/server), non-transactional WFS (client/server), WMC, WCS, Filter Encoding, SLD, GML, SOS http://www.opengeospatial.org/
Построение карты - правообладатели Открытого картографического рынка НЕТ   http://community.livejournal.com/ru_gis/20981.html http://community.livejournal.com/ru_gis/18353.html   Картографическая деятельность, лицензируемая область деятельности, часть данных попадает под понятие «Государственная тайна». Правообладатели в основном Государственные и Полугосударственные структуры  ( неповоротливы) Но некоторые данные, все таки можно купить  ;-)   http://gisa.ru/organiz_type_data.html   пример для Челябинска (карта  MapInfo\DAT  формата) http://gisa.ru/info_see.php?id=547
Построение карты – формат  MAP  файла (1 /7) MAP … # основные параметры и объекты типа  LEGEND, WEB, QUERYMAP … # определение слоев LAYER … END LAYER … END END #  английский  guide -  http://maps.tikiwiki.org/page/8   #  английский  reference -  http://mapserver.gis.umn.edu/docs/reference/mapfile
Построение карты – формат  MAP  файла (2 /7) # общие параметры карты NAME CHELMAP # при прорисовке с помощью  PHP/MapScript  в  stderr  ( apache error.log)  будет записан порядок и время прорисовки слоев карты DEBUG ON STATUS ON # размер изображения по умолчанию, обычно перекрывается в  MapViewer’ ах SIZE 400 300 # базовый цвет фона для карты, легенды, линейки   масштаба и т.п. IMAGECOLOR 255 255 255 # базовые единицы измерения UNITS METERS # экранное разрешение, используется например при генерации карты в формате  PDF RESOLUTION 72
Построение карты – формат  MAP  файла (3 /7) # путь к файлам векторных и растровых данных карты, используется для «не  SQL » форматов ( ESRI, MapInfo) SHAPEPATH "../data“ # путь к файлу с набором символов в формате  OGR,  набор символов используется для прорисовки таких объектов как «памятники», «остановки», «флаги» и т.п. SYMBOLSET ../fonts/symbols.sym # путь к файлу с набором  TTF  шрифтов используемых при прорисовке надписей на карте FONTSET ../fonts/fonts.txt # размер карты в общей координатной системе в формате  min_x min_y max_x max_y EXTENT  -17000 132000 -5000 144000 # формат вывода по умолчанию  IMAGETYPE png INTERLACE OFF OUTPUTFORMAT NAME png DRIVER "GD/PNG" MIMETYPE "image/png" IMAGEMODE RGB FORMATOPTION  INTERLACE=OFF TRANSPARENT OFF END
Построение карты – формат  MAP  файла (4 /7) # секция определяющая поведение  MapServer  в качестве  GEO- сервиса WEB IMAGEPATH "/var/local/www/sites/map.mpautina.ru/tmp/" IMAGEURL "/img_tmp/" LOG "/var/local/www/sites/map.mpautina.ru/tmp/mapinfo.log" MAXSCALE 150000 MINSCALE 1000 EMPTY "/empty.html" ERROR "/error.html" END # подсветка «найденных объектов» QUERYMAP STYLE HILITE COLOR 255 0 0 END # уменьшенная «копия карты», обычно статическое изображение REFERENCE IMAGE /var/local/www/sites/map.mpautina.ru/www/pmapper/images/chelmap_final.gif EXTENT -17000 132000 -5000 144000 SIZE 150 138 STATUS ON COLOR 200 200 200 OUTLINECOLOR 255 0 0 END
Построение карты – формат  MAP  файла (5 /7) # легенда условных изображений и слоев на карте LEGEND STATUS ON KEYSIZE 18 12 POSITION ul LABEL MINFEATURESIZE auto TYPE BITMAP SIZE MEDIUM COLOR 0 0 89 FORCE true TYPE truetype FONT "arial" SIZE 9 ENCODING windows-1251 END END # линейка масштаба SCALEBAR STATUS EMBED TRANSPARENT ON INTERVALS 4 SIZE 200 3 UNITS kilometers COLOR 254 254 217 OUTLINECOLOR 0 0 0 BACKGROUNDCOLOR 254 254 217 STYLE 0 POSTLABELCACHE true LABEL MINFEATURESIZE auto COLOR 0 0 90 SIZE small END END
Построение карты – формат  MAP  файла (6 /7) # обычный слой типа ПОЛИГОН в формате  MapInfo/TAB LAYER NAME "Avtomobilnye_dorogi“ # подробная информация о рисовании слоя и ошибках выводится в  stderr  ( error.log) DEBUG ON TYPE POLYGON STATUS ON CONNECTIONTYPE OGR CONNECTION "Avtomobilnye_dorogi.TAB" STYLEITEM "AUTO" CLASS NAME " Автомобильные дороги" END END # слой типа ПОЛИГОН с МЕТАДАННЫМИ, по которым можно осуществлять поиск LAYER NAME "Stroenija" DEBUG ON TYPE POLYGON STATUS ON CONNECTIONTYPE OGR CONNECTION "Stroenija.TAB" METADATA "LAYER_ENCODING" "CP1251" "QUERYABLE" "true" "SEARCHFIELD" " Название_улицы" " RESULT_FIELDS" " Название_улицы,Номер_дома" " RESULT_HEADERS" " Название улицы,Номер Дома" END
# Слой типа АНОТАЦИЯ, отображающий подписи номеров домов и названия улиц LAYER NAME "Podpisi_nazvaniy_ulic_i_nomero" DEBUG ON TYPE ANNOTATION MAXSCALE  20000 STATUS ON CONNECTIONTYPE OGR CONNECTION "Podpisi_nazvaniy_ulic_i_nomero.TAB" METADATA "LAYER_ENCODING" "CP1251" END STYLEITEM "AUTO“ CLASS NAME " Названия улиц" LABEL ENCODING windows-1251 TYPE TRUETYPE ANTIALIAS true COLOR 0 255 0 ANGLE 0 BUFFER 5 PARTIALS true END END # конец слоя END Построение карты – формат  MAP  файла (7 /7)
Инструменты просмотра карт –  MapViewer’ ы http://mapserver.gis.umn.edu/docs/link   Chameleon  -  http://chameleon.maptools.org/   framework  для быстрой разработки на базе  PHP/MapScript,  предоставляет набор  widgets , которые можно удобно встраивать в  HTML  шаблон FIST -  http://fist-mapping.org/   еще один  framework,  позволяет редактировать карту P.mapper  -  http://www.pmapper.net/   простой, удобный и настраиваемый  viewer  карт на базе  xajax, PHP/Mapscript, XHTML  +  CSS Ka-Map  -  http://ka-map.maptools.org/   другой  viewer  карт использующий больше  JavaScript , меньше  PHP  и лучше поддерживающий кеширование QGis -  http://www.qgis.org/   полноценная  GIS  система поддерживающая  OGR \ GDAL  форматы и позволяющая генерировать  .MAP  файлы
Сравнение  ka-map  и  p.mapper Ka-Map Плюсы Tile-caching  а-ля  Google Фиксированные масштабы Поддержка нескольких  .MAP  файлов в одной конфигурации Минусы Отсутствие локализации Хаотичная архитектура   в которой есть компоненты  (tools) , но очень много спагетти и процедурного кода Зачатки  AJAX  интерфейса, очень многое сделано на  IFRAME P.mapper Плюсы Хорошо структурированный  HTML+CSS  +  AJAX  интерфейс ООП дизайн  PHP  кода Метки на карте Динамический масштаб Динамический подбор размера карты под размер окна Многоязычность Минусы Динамический масштаб как причина слабого кеширования JavaScript  динамическая расстановка элементов интерфейса (сложно править  layout)
p.Mapper  подводные камни Построен на  utf-8  но не поддерживает слои с 8 bit (cp1251)  кодировкой Необходимость русской локализации Написан (как и  ka-map)  без использования  E_ALL Довольно быстро засоряет  /tmp/  каталог временными изображениями с кусками карты Нестабильность под  RedHat ;-)
Производительность Самое узкое место  CPU  при прорисовке карты скорость прорисовки нелинейно зависит от сложности, объема карты и отображаемой части карты ab -n  100  -C PHPSESSID=acf0df8646f1f69bc7fc446544095ef9  http://local.map.mpautina.ru/pmapper/incphp/xajax/x_load.php?PHPSESSID=acf0df8646f1f69bc7fc446544095ef9&mapW=640&mapH=480&zoom_type=zoompoint Celeron-M 1.7Ghz/512RAM/win32 Apache2+php5.1.6-cgi 2.7 req/sec  !!!  ;-( При высокой нагрузке необходимо вынести  MapSript  на отдельный  PHP-FCGI   daemon  и   реализовать кеширование
Вопросы аудитории Какие есть альтернативы  MapServer? Как обстоят дела с  GPS? Как интегрировать с  Google   /   Yahoo? И т.п. СПАСИБО ЗА ВНИМАНИЕ  ;-)

More Related Content

Similar to Php Conf2007 Mapscript (20)

PDF
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Yandex
 
PDF
Фёдор Голубев, Леонид Шныр "Яндекс.Карты: между пользователем и разработчиком"
Yandex
 
PPT
CodeFest 2011. Пчельников Д. — Картографические веб-сервисы? Что это? И как и...
CodeFest
 
PPTX
API Яндекс.Карт
Yandex.Maps
 
PDF
«Карта в браузере: путь от спутникового снимка до пользователя» – Илья Тарату...
2ГИС Технологии
 
PDF
Что API Карт забыл на сервере — Антон Корзунов
Yandex
 
PPTX
Esri и opensource
Vitaly Zagorovskiy
 
PPTX
Как разработать картографический веб сервис
Sergeyev
 
PPT
Geo photo
Sergey Lukin
 
PPTX
DUMP-2012 - Базы данных - "Идеальное хранилище геоданных для вашего приложени...
it-people
 
PPTX
Идеальное хранилище геоданных для вашего приложения
DevDay
 
PPTX
Архитектура портала услуг Росреестра и возможности использования картографиче...
Vitaly Zagorovskiy
 
PPT
KlyuchYuriy_for_code4russia
Olya Suvorova
 
PPTX
Esri и opensource
Maxim Dubinin
 
PDF
Пространственные характеристики
Дмитрий Колодезев
 
PDF
«Открытая веб картография», Илья Таратухин
DevDay
 
PPTX
Yamaps
Dyadya Lesha
 
PPT
Народная Яндекс.Карта
Yandex.Maps
 
PPT
Народная Яндекс.Карта
Yandex.Maps
 
PDF
Владимир Зайцев - Как сделать Яндекс.Карты
Yandex
 
Правильная организация клиент-карточного взаимодействия — Антон Корзунов
Yandex
 
Фёдор Голубев, Леонид Шныр "Яндекс.Карты: между пользователем и разработчиком"
Yandex
 
CodeFest 2011. Пчельников Д. — Картографические веб-сервисы? Что это? И как и...
CodeFest
 
API Яндекс.Карт
Yandex.Maps
 
«Карта в браузере: путь от спутникового снимка до пользователя» – Илья Тарату...
2ГИС Технологии
 
Что API Карт забыл на сервере — Антон Корзунов
Yandex
 
Esri и opensource
Vitaly Zagorovskiy
 
Как разработать картографический веб сервис
Sergeyev
 
Geo photo
Sergey Lukin
 
DUMP-2012 - Базы данных - "Идеальное хранилище геоданных для вашего приложени...
it-people
 
Идеальное хранилище геоданных для вашего приложения
DevDay
 
Архитектура портала услуг Росреестра и возможности использования картографиче...
Vitaly Zagorovskiy
 
KlyuchYuriy_for_code4russia
Olya Suvorova
 
Esri и opensource
Maxim Dubinin
 
Пространственные характеристики
Дмитрий Колодезев
 
«Открытая веб картография», Илья Таратухин
DevDay
 
Yamaps
Dyadya Lesha
 
Народная Яндекс.Карта
Yandex.Maps
 
Народная Яндекс.Карта
Yandex.Maps
 
Владимир Зайцев - Как сделать Яндекс.Карты
Yandex
 

More from Slach (6)

PPTX
Open source субд глазами обычного программиста
Slach
 
PPTX
Sampling profiling
Slach
 
PPTX
мониторинг производительности Web приложений на python
Slach
 
PPTX
мониторинг производительности приложения на PINBA
Slach
 
PPT
phpConf 2010 Классификация систем хранения
Slach
 
PPT
XML Native Database на примере SednaXML
Slach
 
Open source субд глазами обычного программиста
Slach
 
Sampling profiling
Slach
 
мониторинг производительности Web приложений на python
Slach
 
мониторинг производительности приложения на PINBA
Slach
 
phpConf 2010 Классификация систем хранения
Slach
 
XML Native Database на примере SednaXML
Slach
 
Ad

Php Conf2007 Mapscript

  • 1. MapServer и PHP/MapScript Публикация картографических данных с помощью PHP Климов Евгений aka Slach
  • 2. Вступительное слово phpConf 2006 – Rasmus Lerdorf http://talks.php.net/show/phpclub/25 Вопрос - «Когда будет вся Россия ? » Ответ - «Картографических данных в Yahoo и Google нет и их очень сложно получить» Buzz «надо делать карту своего города» ;-)
  • 3. OpenSource инструменты для PHP UMN MapServer – среда разработки для построения картографических интернет приложений, разработанная под эгидой NASA и University of Minnesota (UMN) . Это не полноценная GIS система, зато она превосходно справляется с задачами отображения картографических данных как растровых так и векторных Как скачать - http://mapserver.gis.umn.edu/download Как ставить - http://mapserver.gis.umn.edu/docs/howto Поддерживаемые OS FreeBSD, Linux (Debian, RedHat, SuSe), Windows, Mac OSX и т.п. ;)
  • 4. PHP/MapScript MapScript – скриптовый интерфейс прорисовки карты для MapServer, сделанный с использованием SWIG http://mapserver.gis.umn.edu/docs/reference/mapscript/ PHP/MapScript – PHP4/5 Extension для интеграции MapScript и PHP (существуют bindings для Perl, Python, Ruby, C#, Java) Где брать http://www.maptools.org/php_mapscript/ Как ставить http://mapserver.gis.umn.edu/docs/howto/phpmapscript-install
  • 5. PHP/MapScript плюсы / минусы Плюсы Низкоуровневый интерфейс, обеспечивает доступ практически ко всем объектам карты Позволяет создавать собственные слои ООП Минусы Не включен в pecl ;) Не thread-safe Нет наследования от базовых классов MapScript ( инициализация через ф-ции ms_newMapObj)
  • 6. PHP/MapScript – простой пример // Загрузка PHP/MapScript define ( 'MAPSCRIPT_MODULE' , dirname ( __FILE__ ). 'php_mapscript.' . PHP_SHLIB_SUFFIX ); if (! extension_loaded ( 'MapScript' )) dl ( MAPSCRIPT_MODULE ); // открытие файла с картой, производится парсинг .MAP файла define ( 'MAPFILE' , dirname ( __FILE__ ). '/mapinfo.map' ); $oMap = ms_newMapObj ( MAPFILE ); // параметры системы координат для вашей карты, типы проекций и систем координат // см. http://proj.maptools.org/ $oMap -> setProjection ( 'init=epsg:42304' ); // будем выводить картинку 800x600 в PNG формате $oMap -> setsize ( 800 , 600 ); $oMap -> selectoutputformat ( 'png' ); // прорисовка карты в памяти, поскольку не заданы условия фильтрации данных // и масштаба, карта строится по всем слоям, с минимальным увеличением и стилями // заложенными в карте $oImage = $oMap -> draw (); // вывод картинки header ( 'Content-type: image/png' ); // при желании картинку можно вывести в Кеш $url = $oImage -> saveImage ( '' );
  • 7. Построение карты - с чего начать MapServer Поддерживаемые форматы Растровые – с помощью GDAL http://www.gdal.org/formats_list.html Векторные – с помощью OGR http://www.gdal.org/ogr/ogr_formats.html наиболее распространенные MapInfo, ESRI, PostGIS MapServer как GEO- сервис WMS (client/server), non-transactional WFS (client/server), WMC, WCS, Filter Encoding, SLD, GML, SOS http://www.opengeospatial.org/
  • 8. Построение карты - правообладатели Открытого картографического рынка НЕТ http://community.livejournal.com/ru_gis/20981.html http://community.livejournal.com/ru_gis/18353.html Картографическая деятельность, лицензируемая область деятельности, часть данных попадает под понятие «Государственная тайна». Правообладатели в основном Государственные и Полугосударственные структуры ( неповоротливы) Но некоторые данные, все таки можно купить ;-) http://gisa.ru/organiz_type_data.html пример для Челябинска (карта MapInfo\DAT формата) http://gisa.ru/info_see.php?id=547
  • 9. Построение карты – формат MAP файла (1 /7) MAP … # основные параметры и объекты типа LEGEND, WEB, QUERYMAP … # определение слоев LAYER … END LAYER … END END # английский guide - http://maps.tikiwiki.org/page/8 # английский reference - http://mapserver.gis.umn.edu/docs/reference/mapfile
  • 10. Построение карты – формат MAP файла (2 /7) # общие параметры карты NAME CHELMAP # при прорисовке с помощью PHP/MapScript в stderr ( apache error.log) будет записан порядок и время прорисовки слоев карты DEBUG ON STATUS ON # размер изображения по умолчанию, обычно перекрывается в MapViewer’ ах SIZE 400 300 # базовый цвет фона для карты, легенды, линейки масштаба и т.п. IMAGECOLOR 255 255 255 # базовые единицы измерения UNITS METERS # экранное разрешение, используется например при генерации карты в формате PDF RESOLUTION 72
  • 11. Построение карты – формат MAP файла (3 /7) # путь к файлам векторных и растровых данных карты, используется для «не SQL » форматов ( ESRI, MapInfo) SHAPEPATH "../data“ # путь к файлу с набором символов в формате OGR, набор символов используется для прорисовки таких объектов как «памятники», «остановки», «флаги» и т.п. SYMBOLSET ../fonts/symbols.sym # путь к файлу с набором TTF шрифтов используемых при прорисовке надписей на карте FONTSET ../fonts/fonts.txt # размер карты в общей координатной системе в формате min_x min_y max_x max_y EXTENT -17000 132000 -5000 144000 # формат вывода по умолчанию IMAGETYPE png INTERLACE OFF OUTPUTFORMAT NAME png DRIVER "GD/PNG" MIMETYPE "image/png" IMAGEMODE RGB FORMATOPTION INTERLACE=OFF TRANSPARENT OFF END
  • 12. Построение карты – формат MAP файла (4 /7) # секция определяющая поведение MapServer в качестве GEO- сервиса WEB IMAGEPATH "/var/local/www/sites/map.mpautina.ru/tmp/" IMAGEURL "/img_tmp/" LOG "/var/local/www/sites/map.mpautina.ru/tmp/mapinfo.log" MAXSCALE 150000 MINSCALE 1000 EMPTY "/empty.html" ERROR "/error.html" END # подсветка «найденных объектов» QUERYMAP STYLE HILITE COLOR 255 0 0 END # уменьшенная «копия карты», обычно статическое изображение REFERENCE IMAGE /var/local/www/sites/map.mpautina.ru/www/pmapper/images/chelmap_final.gif EXTENT -17000 132000 -5000 144000 SIZE 150 138 STATUS ON COLOR 200 200 200 OUTLINECOLOR 255 0 0 END
  • 13. Построение карты – формат MAP файла (5 /7) # легенда условных изображений и слоев на карте LEGEND STATUS ON KEYSIZE 18 12 POSITION ul LABEL MINFEATURESIZE auto TYPE BITMAP SIZE MEDIUM COLOR 0 0 89 FORCE true TYPE truetype FONT "arial" SIZE 9 ENCODING windows-1251 END END # линейка масштаба SCALEBAR STATUS EMBED TRANSPARENT ON INTERVALS 4 SIZE 200 3 UNITS kilometers COLOR 254 254 217 OUTLINECOLOR 0 0 0 BACKGROUNDCOLOR 254 254 217 STYLE 0 POSTLABELCACHE true LABEL MINFEATURESIZE auto COLOR 0 0 90 SIZE small END END
  • 14. Построение карты – формат MAP файла (6 /7) # обычный слой типа ПОЛИГОН в формате MapInfo/TAB LAYER NAME "Avtomobilnye_dorogi“ # подробная информация о рисовании слоя и ошибках выводится в stderr ( error.log) DEBUG ON TYPE POLYGON STATUS ON CONNECTIONTYPE OGR CONNECTION "Avtomobilnye_dorogi.TAB" STYLEITEM "AUTO" CLASS NAME " Автомобильные дороги" END END # слой типа ПОЛИГОН с МЕТАДАННЫМИ, по которым можно осуществлять поиск LAYER NAME "Stroenija" DEBUG ON TYPE POLYGON STATUS ON CONNECTIONTYPE OGR CONNECTION "Stroenija.TAB" METADATA "LAYER_ENCODING" "CP1251" "QUERYABLE" "true" "SEARCHFIELD" " Название_улицы" " RESULT_FIELDS" " Название_улицы,Номер_дома" " RESULT_HEADERS" " Название улицы,Номер Дома" END
  • 15. # Слой типа АНОТАЦИЯ, отображающий подписи номеров домов и названия улиц LAYER NAME "Podpisi_nazvaniy_ulic_i_nomero" DEBUG ON TYPE ANNOTATION MAXSCALE 20000 STATUS ON CONNECTIONTYPE OGR CONNECTION "Podpisi_nazvaniy_ulic_i_nomero.TAB" METADATA "LAYER_ENCODING" "CP1251" END STYLEITEM "AUTO“ CLASS NAME " Названия улиц" LABEL ENCODING windows-1251 TYPE TRUETYPE ANTIALIAS true COLOR 0 255 0 ANGLE 0 BUFFER 5 PARTIALS true END END # конец слоя END Построение карты – формат MAP файла (7 /7)
  • 16. Инструменты просмотра карт – MapViewer’ ы http://mapserver.gis.umn.edu/docs/link Chameleon - http://chameleon.maptools.org/ framework для быстрой разработки на базе PHP/MapScript, предоставляет набор widgets , которые можно удобно встраивать в HTML шаблон FIST - http://fist-mapping.org/ еще один framework, позволяет редактировать карту P.mapper - http://www.pmapper.net/ простой, удобный и настраиваемый viewer карт на базе xajax, PHP/Mapscript, XHTML + CSS Ka-Map - http://ka-map.maptools.org/ другой viewer карт использующий больше JavaScript , меньше PHP и лучше поддерживающий кеширование QGis - http://www.qgis.org/ полноценная GIS система поддерживающая OGR \ GDAL форматы и позволяющая генерировать .MAP файлы
  • 17. Сравнение ka-map и p.mapper Ka-Map Плюсы Tile-caching а-ля Google Фиксированные масштабы Поддержка нескольких .MAP файлов в одной конфигурации Минусы Отсутствие локализации Хаотичная архитектура в которой есть компоненты (tools) , но очень много спагетти и процедурного кода Зачатки AJAX интерфейса, очень многое сделано на IFRAME P.mapper Плюсы Хорошо структурированный HTML+CSS + AJAX интерфейс ООП дизайн PHP кода Метки на карте Динамический масштаб Динамический подбор размера карты под размер окна Многоязычность Минусы Динамический масштаб как причина слабого кеширования JavaScript динамическая расстановка элементов интерфейса (сложно править layout)
  • 18. p.Mapper подводные камни Построен на utf-8 но не поддерживает слои с 8 bit (cp1251) кодировкой Необходимость русской локализации Написан (как и ka-map) без использования E_ALL Довольно быстро засоряет /tmp/ каталог временными изображениями с кусками карты Нестабильность под RedHat ;-)
  • 19. Производительность Самое узкое место CPU при прорисовке карты скорость прорисовки нелинейно зависит от сложности, объема карты и отображаемой части карты ab -n 100 -C PHPSESSID=acf0df8646f1f69bc7fc446544095ef9 http://local.map.mpautina.ru/pmapper/incphp/xajax/x_load.php?PHPSESSID=acf0df8646f1f69bc7fc446544095ef9&mapW=640&mapH=480&zoom_type=zoompoint Celeron-M 1.7Ghz/512RAM/win32 Apache2+php5.1.6-cgi 2.7 req/sec !!! ;-( При высокой нагрузке необходимо вынести MapSript на отдельный PHP-FCGI daemon и реализовать кеширование
  • 20. Вопросы аудитории Какие есть альтернативы MapServer? Как обстоят дела с GPS? Как интегрировать с Google / Yahoo? И т.п. СПАСИБО ЗА ВНИМАНИЕ ;-)