Php Conf2007 Mapscript
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Php Conf2007 Mapscript

  • 4,655 views
Uploaded on

MapServer architecture, MapScript examples, MapInfo format description

MapServer architecture, MapScript examples, MapInfo format description

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
4,655
On Slideshare
4,649
From Embeds
6
Number of Embeds
1

Actions

Shares
Downloads
82
Comments
0
Likes
0

Embeds 6

http://www.slideshare.net 6

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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 пример для Челябинска (карта MapInfoDAT формата) 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?
    • И т.п.
    • СПАСИБО ЗА ВНИМАНИЕ ;-)