Страница 1 из 2
PHP MapScript
Добавлено: 17 май 2012, 13:15
qnx
с шаблонизатором smarty мне удастся генерировать map файл, в зависимости от get параметров? mapserver с подобным заработает?
я не совсем понимаю как mapserverу сообщить, чтоб он обращался к map файлу, но предварительно на него накладывал шаблон. относительно mapserverа он то локальный....
Re: mapserver слои
Добавлено: 18 май 2012, 05:50
Denis Rykov
По поводу шаблонов - вам нужен MapScript, то есть API MapServer, если вы хотите использовать Smarty, тогда
сюда. А
вот конкретно то, что нужно. В общих чертах это выглядит так - клиент посылает WMS-запрос (не важно какой) по какому-то URL, на этом URL его ловит ваш обработчик, который формирует ответ (картинку). Но для формирования ответ ему нужен map-файл, в том примере, что по последней ссылке это строка:
Код: Выделить всё
$oMap = ms_newMapobj("../../service/wms.map");
Но так как вам нужен не статичный map-файл, а каждый раз новый, то вы пишите функцию, которая используя шаблон map-файла генерирует конечный файл, сохраняет его и возвращает путь до него, то есть нечто вроде:
Код: Выделить всё
$oMap = ms_newMapobj(yourFunction(parameters));
Понятно?
Re: mapserver слои
Добавлено: 18 май 2012, 08:32
qnx
вроде понятно.
буду думать как реализовывать.
п.с. mapserver может ссылаться на shp, kml, растры, лежащие на другом хосте в локалке, или по глобальному адресу?, это в случае того, если векторные слои будут динамически формироваться скриптом, или лежать отдельно где-то.
п.п.с php mapscript поднялся сам еще с самого начала, пробовал версию mapserverа с помощью его функций выводить.. Тобишь все средства для реализации есть...
п.п.п.с если там возможно формировать файл с помощью php, возможно будет проще без враппера, а самому подтягивать replace нужные значения, или же даже динамически его писать.
Re: mapserver слои
Добавлено: 18 май 2012, 09:45
Denis Rykov
Если на другом хосте - примонтируйте каталог по sshfs или samba.
Re: mapserver слои
Добавлено: 18 май 2012, 18:15
qnx
после того, как сформировал php файл, то к нему обращаться как?
http://ameno.control.ua:8880/cgi-bin/mapserv?
map=/var/www/map2/index_gen_map.php&LAYERS=rstr&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A3857&BBOX=3135752.6479346,6428048.3297754,3136975.640387,6429271.3222278&WIDTH=256&HEIGHT=256
http://ameno.control.ua:8880/map2/index_gen_map.php?LAYERS=rstr&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A3857&BBOX=3135752.6479346,6428048.3297754,3136975.640387,6429271.3222278&WIDTH=256&HEIGHT=256
Код: Выделить всё
msLoadMap(): Regular expression error. MS_DEFAULT_MAPFILE_PATTERN validation failed. msEvalRegex(): Regular expression error. String failed expression test.
при первом варианте у меня такая ошибка вылазит, я так понимаю это уже на что-то правильное похоже..
Re: mapserver слои
Добавлено: 18 май 2012, 18:34
Denis Rykov
Второй способ.
[ Сообщение с мобильного устройства ]
Re: mapserver слои
Добавлено: 18 май 2012, 20:15
qnx
Код: Выделить всё
<?php
echo "adfadf";
echo "<br>1";
$request = new OWSRequestObj();
echo "<br>2";
?>
этот код выводит лишь до генерации OWSRequestObj.
дальше код не выполняется и не выводятся даже echo вывод.
результат работы в браузере:
adfadf<br>1
Re: PHP MapScript
Добавлено: 19 май 2012, 21:42
Denis Rykov
Пример скрипта:
Код: Выделить всё
<?php
$request = new OWSRequestObj();
$request->loadParams();
ms_ioinstallstdouttobuffer();
$oMap = ms_newMapobj("/usr/local/www/gis-lab/data/share/DR/sandbox/mapscript/test.map");
$oMap->owsDispatch($request);
$contenttype = ms_iostripstdoutbuffercontenttype();
if ($contenttype == 'image/png')
header('Content-type: image/png');
ms_iogetStdoutBufferBytes();
ms_ioresethandlers();
?>
Используемый map-файл:
Код: Выделить всё
MAP
SIZE 512 512
MAXSIZE 4096
IMAGECOLOR 255 255 255
IMAGETYPE PNG
SHAPEPATH "/usr/local/www/gis-lab/data/share/DR/sandbox/mapscript/data/vector/"
OUTPUTFORMAT
NAME "png"
EXTENSION "png"
MIMETYPE "image/png"
DRIVER AGG/PNG
IMAGEMODE RGBA
FORMATOPTION "INTERLACE=OFF"
END
EXTENT -180 -90 180 90
PROJECTION
"init=epsg:4326"
END
WEB
METADATA
ows_title "test"
wms_enable_request "*"
ows_service_onlineresource "/usr/local/www/gis-lab/data/share/DR/sandbox/mapscript/test.map"
wms_srs "epsg:4326 epsg:3857 epsg:900913"
#wms_feature_info_mime_type "text/html"
END
END
# Озёра
LAYER
NAME "hydro_poly"
TYPE polygon
DATA "hydro_poly/hydro_poly"
DUMP TRUE
TEMPLATE dummy.html
PROJECTION
"init=epsg:4326"
END
EXTENT -180 -90 180 90
METADATA
gml_include_items "all"
wms_include_items "all"
END
CLASS
NAME ""
STYLE
COLOR 0 204 255
OUTLINECOLOR 0 66 255
#SYMBOL 0
#WIDTH 1
END
END
END
END
Пример URL для запроса:
Код: Выделить всё
http://gis-lab.info/share/DR/sandbox/mapscript/mapscript.php?LAYERS=hydro_poly&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A900913&BBOX=3894768.9414994,9274797.2369415,17367253.797057,15335947.831&WIDTH=1377&HEIGHT=619
Re: PHP MapScript
Добавлено: 19 май 2012, 22:18
qnx
скопировал Ваш код.. с ссылкой на свой map файл
http://ameno.control.ua:8880/map2/fldwmsin.map (с таким сейчас благополучно работает карта)
но с mapscript ничего не видно в браузере.
обращаюсь так
Код: Выделить всё
http://ameno.control.ua:8880/map2/index_gen_map.php?LAYERS=rstr&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A3857&BBOX=3135752.6479346,6428048.3297754,3136975.640387,6429271.3222278&WIDTH=256&HEIGHT=256
Re: PHP MapScript
Добавлено: 20 май 2012, 02:56
Denis Rykov
HTTP 500 (Internal Server Error) - смотрите логи, что-то не так на серверной стороне. В выводе phpinfo() присутствует MapScript?
Re: PHP MapScript
Добавлено: 20 май 2012, 08:37
qnx
http://ameno.control.ua:8880/map.php
судя по phpinfo mapscript установлен..
Re: PHP MapScript
Добавлено: 20 май 2012, 20:21
Denis Rykov
В логах то что?
Re: PHP MapScript
Добавлено: 20 май 2012, 20:45
qnx
в логах таки не находит тот класс...
Код: Выделить всё
root@gisrv:/var/log/apache2# tail -4 error.log
[Sun May 20 20:30:53 2012] [error] [client 66.249.73.79] File does not exist: /var/www/robots.txt
[Sun May 20 21:42:22 2012] [error] [client 93.72.173.189] PHP Fatal error: Class 'OWSRequestObj' not found in /var/www/map2/index_gen_map.php on line 4
[Sun May 20 21:42:22 2012] [error] [client 93.72.173.189] File does not exist: /var/www/favicon.ico
[Sun May 20 21:42:27 2012] [error] [client 93.72.173.189] PHP Fatal error: Class 'OWSRequestObj' not found in /var/www/map2/index_gen_map.php on line 4
root@gisrv:/var/log/apache2#
Re: PHP MapScript
Добавлено: 20 май 2012, 21:28
Denis Rykov
А попробуйте старый синтаксис, вот
тут про него говорится. В дальнейшем поджидает
такой баг,
вариант обхода. А вообще дабы не изобретать велосипед - обновите MapServer, 5.6 старовата, мой пример работает на 6.1
Re: PHP MapScript
Добавлено: 20 май 2012, 23:33
qnx
Код: Выделить всё
root@gisrv:/var/www/map2# tail -12 /var/log/apache2/error.log
[Sun May 20 21:53:15 2012] [error] [client 93.72.173.189] PHP Notice: Undefined index: mimeType in /var/www/py/proxy.php on line 13, referer: http://ameno.control.ua:8880/map2/index_kml_new_my.html
[Sun May 20 21:53:15 2012] [error] [client 93.72.173.189] PHP Notice: Undefined index: url in /var/www/py/proxy.php on line 19, referer: http://ameno.control.ua:8880/map2/index_kml_new_my.html
[Sun May 20 21:53:53 2012] [error] [client 93.72.173.189] File does not exist: /var/www/favicon.ico
[Sun May 20 22:07:12 2012] [error] [client 83.246.196.7] File does not exist: /var/www/favicon.ico
[Sun May 20 23:41:31 2012] [error] [client 213.160.129.110] File does not exist: /var/www/favicon.ico
/usr/lib/python2.6/dist-packages/mod_python/importer.py:32: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
/usr/lib/python2.6/dist-packages/mod_python/importer.py:1546: DeprecationWarning: catching of string exceptions is deprecated
except apache.PROG_TRACEBACK, traceblock:
/usr/lib/python2.6/dist-packages/mod_python/importer.py:32: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
[Mon May 21 00:17:03 2012] [error] [client 176.36.201.111] File does not exist: /var/www/favicon.ico
root@gisrv:/var/www/map2#
судя по моим логам там что-то похлеще вылазит)...
немножко не та тема, но что-то в proxy.php не то..