PHP MapScript

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Аватара пользователя
qnx
Участник
Сообщения: 61
Зарегистрирован: 13 апр 2012, 12:10
Репутация: 0
Откуда: город-герой Киев

PHP MapScript

Сообщение qnx »

с шаблонизатором smarty мне удастся генерировать map файл, в зависимости от get параметров? mapserver с подобным заработает?
я не совсем понимаю как mapserverу сообщить, чтоб он обращался к map файлу, но предварительно на него накладывал шаблон. относительно mapserverа он то локальный....
КОЖЗГСФ
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: mapserver слои

Сообщение Denis Rykov »

По поводу шаблонов - вам нужен MapScript, то есть API MapServer, если вы хотите использовать Smarty, тогда сюда. А вот конкретно то, что нужно. В общих чертах это выглядит так - клиент посылает WMS-запрос (не важно какой) по какому-то URL, на этом URL его ловит ваш обработчик, который формирует ответ (картинку). Но для формирования ответ ему нужен map-файл, в том примере, что по последней ссылке это строка:

Код: Выделить всё

$oMap = ms_newMapobj("../../service/wms.map");
Но так как вам нужен не статичный map-файл, а каждый раз новый, то вы пишите функцию, которая используя шаблон map-файла генерирует конечный файл, сохраняет его и возвращает путь до него, то есть нечто вроде:

Код: Выделить всё

$oMap = ms_newMapobj(yourFunction(parameters));
Понятно?
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
qnx
Участник
Сообщения: 61
Зарегистрирован: 13 апр 2012, 12:10
Репутация: 0
Откуда: город-герой Киев

Re: mapserver слои

Сообщение qnx »

вроде понятно.
буду думать как реализовывать.

п.с. mapserver может ссылаться на shp, kml, растры, лежащие на другом хосте в локалке, или по глобальному адресу?, это в случае того, если векторные слои будут динамически формироваться скриптом, или лежать отдельно где-то.

п.п.с php mapscript поднялся сам еще с самого начала, пробовал версию mapserverа с помощью его функций выводить.. Тобишь все средства для реализации есть...

п.п.п.с если там возможно формировать файл с помощью php, возможно будет проще без враппера, а самому подтягивать replace нужные значения, или же даже динамически его писать.
КОЖЗГСФ
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: mapserver слои

Сообщение Denis Rykov »

Если на другом хосте - примонтируйте каталог по sshfs или samba.
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
qnx
Участник
Сообщения: 61
Зарегистрирован: 13 апр 2012, 12:10
Репутация: 0
Откуда: город-герой Киев

Re: mapserver слои

Сообщение 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.
при первом варианте у меня такая ошибка вылазит, я так понимаю это уже на что-то правильное похоже..
КОЖЗГСФ
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: mapserver слои

Сообщение Denis Rykov »

Второй способ.

[ Сообщение с мобильного устройства ]
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
qnx
Участник
Сообщения: 61
Зарегистрирован: 13 апр 2012, 12:10
Репутация: 0
Откуда: город-герой Киев

Re: mapserver слои

Сообщение qnx »

Код: Выделить всё

<?php
echo "adfadf";
echo "<br>1";
$request = new OWSRequestObj();
echo "<br>2";
?>
этот код выводит лишь до генерации OWSRequestObj.
дальше код не выполняется и не выводятся даже echo вывод.

результат работы в браузере:
adfadf<br>1
КОЖЗГСФ
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: PHP MapScript

Сообщение 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
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
qnx
Участник
Сообщения: 61
Зарегистрирован: 13 апр 2012, 12:10
Репутация: 0
Откуда: город-герой Киев

Re: PHP MapScript

Сообщение 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
КОЖЗГСФ
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: PHP MapScript

Сообщение Denis Rykov »

HTTP 500 (Internal Server Error) - смотрите логи, что-то не так на серверной стороне. В выводе phpinfo() присутствует MapScript?
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
qnx
Участник
Сообщения: 61
Зарегистрирован: 13 апр 2012, 12:10
Репутация: 0
Откуда: город-герой Киев

Re: PHP MapScript

Сообщение qnx »

http://ameno.control.ua:8880/map.php
судя по phpinfo mapscript установлен..
КОЖЗГСФ
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: PHP MapScript

Сообщение Denis Rykov »

В логах то что?
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
qnx
Участник
Сообщения: 61
Зарегистрирован: 13 апр 2012, 12:10
Репутация: 0
Откуда: город-герой Киев

Re: PHP MapScript

Сообщение 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#
КОЖЗГСФ
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: PHP MapScript

Сообщение Denis Rykov »

А попробуйте старый синтаксис, вот тут про него говорится. В дальнейшем поджидает такой баг, вариант обхода. А вообще дабы не изобретать велосипед - обновите MapServer, 5.6 старовата, мой пример работает на 6.1
Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
qnx
Участник
Сообщения: 61
Зарегистрирован: 13 апр 2012, 12:10
Репутация: 0
Откуда: город-герой Киев

Re: PHP MapScript

Сообщение 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 не то..
КОЖЗГСФ
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя