Проблема с адресом (http://...) в ОС Windows

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Аватара пользователя
arzobispo
Активный участник
Сообщения: 230
Зарегистрирован: 10 сен 2008, 10:28
Репутация: 3
Контактная информация:

Проблема с адресом (http://...) в ОС Windows

Сообщение arzobispo »

dВсем привет!
Решил избавиться от длинных адресов, например

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

http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/example/polt.map&layer=veget&mode=map 
, чтобы писать сразу домен.

Для этого в файле httpd.conf заменил стандартные пути и настройки на свои:
Listen 80
DocumentRoot "/ms4w/apps/pk/templates"
<Directory "/ms4w/apps/pk/templates">
DirectoryIndex index.html

Получилось, что при вводе в адресную строку адреса

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

http://localhost
отображается страница, а карты нет! При нажатии на то место, где должна быть карта или при поиске объекта выводится сообщение об ошибке:

msEvalRegex(): Regular expression error. String (
[map]) failed expression test.


Что делать и что где еще поменять?

Для удобства привожу кусок map-файла и кусок из index.html.

Map-файл:

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

MAP
IMAGETYPE GIF
EXTENT -1.45 -0.98 0.41 0.81
SIZE 550 550
FONTSET        "./fonts/fonts.list"

WEB 
   TEMPLATE   "/ms4w/apps/pk/templates/index.html"
   IMAGEPATH   "/ms4w/tmp/ms_tmp/"
   IMAGEURL   "/ms_tmp/"
END

  LAYER 
   здесь идет описание для вывода информации об объекте при нажатии на карту
  END

LAYER 
  NAME "base" 
  CONNECTIONTYPE postgis
  CONNECTION "user=postgres password=123 dbname=postgis host=localhost"
  DATA "the_geom FROM prostokarta USING SRID=4326"
  TYPE POLYGON
   CLASS
    COLOR 125 234 100
    OUTLINECOLOR 100 100 100
  END
END

LAYER
  NAME "prostokarta"
  CONNECTIONTYPE postgis
  CONNECTION "user=postgres password=123 dbname=postgis host=localhost"
  DATA "the_geom FROM 
   ...
END
END
index.html

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

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<form name="mapserv" method="GET" action="/cgi-bin/mapserv.exe">
<input type="hidden" name="map" value="[map]">
<input type="hidden" name="imgext" value="[mapext]">
<input type="hidden" name="imgxy" value="[center]">
<input type="hidden" name="layer" value="tovary">
<input type="hidden" name="layer" value="base">
<input type="hidden" name="layer" value="prostokarta">
<input type="hidden" name="mode" value="browse">
<div align="center">

 <tr>

  <td width=130 bgcolor="404040">
   <div align="center"> 
    <select name="zoom">
     <option value='' selected></option>
     <option value="4" [zoom_4_select]>Увеличить в 4x</option>
     <option value="3" [zoom_3_select]>Увеличить в 3x</option>
     <option value="2" [zoom_2_select]>Увеличить в 2x</option>
     <option value="1" [zoom_1_select]>По центру</option>
     <option value="-2" [zoom_-2_select]>Уменьшить в 2x</option>
     <option value="-3" [zoom_-3_select]>Уменьшить в 3x</option>
     <option value="-4" [zoom_-4_select]>Уменьшить в 4x</option>
    </select>
   </div>
  </td>
  <td>
   <div align="center">
    <select name="mode">   
     <option value="browse" [browse_select]> Просмотр </option>
     <option value="query" [query_select]> Зпр инф 1 об</option>
    </select>
   </div>
  </td>
  <td>

    <input type="submit" name="submit" value="Обновить">
   </div>
  </td>
  <td width=20 bgcolor="404040"></td>
 </tr>

<table width=940 height=550 cellpadding="0" cellspacing="0" border="1">
 <tr>
  <td width=700>
   <table>
    <tr>
     <td width=550>
      <input type="image" name="img" src="[img]" width="550" height="550">
     </td>
     <td width=150>
   <div align="left">Коморка</div>
   <select name ="group" size=1>
   <option value='Шкурки'>Пинокио</option>
   <option value='Буратино'>Буратино</option>
   </select><br><br>
   <input type="submit"  value="Запросить">

     </td>
    </tr>
   </table>
  </td>
 </tr>
</table>

</div>
</form>
</body>
</html>
[/map]
Последний раз редактировалось arzobispo 05 ноя 2009, 10:17, всего редактировалось 2 раза.
С Уважением, Антон
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Проблема с адресом (http://...)

Сообщение Максим Дубинин »

пристегивайтесь, турбулентность прямо по курсу
Аватара пользователя
arzobispo
Активный участник
Сообщения: 230
Зарегистрирован: 10 сен 2008, 10:28
Репутация: 3
Контактная информация:

Re: Проблема с адресом (http://...)

Сообщение arzobispo »

Вот зашел по линку, привожу, что там написано и сразу возникли вопросы (вопросы ниже):
Сведения о сценарии
Если вы хотите, чтобы избежать необходимости указывать параметр "map" в Вашем MapServer URL, одним решением является использование "обертку". В основном, обертка CGI программа, которая получает входящий запрос CGI, изменяет параметры запроса в некотором роде, а потом руки от фактической обработки в другую программу CGI (например, MapServer).

Следующий скрипт представляет собой оболочку для CGI поступают запросы, которые должны быть достаточно общими, чтобы работать на любой операционной системе с / BIN / SH:

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

#!/bin/sh
MAPSERV="/path/to/my/mapserv"
MAPFILE="/path/to/my/mapfile.map"
if [ "${REQUEST_METHOD}" = "GET" ]; then
  if [ -z "${QUERY_STRING}" ]; then
    QUERY_STRING="map=${MAPFILE}"
  else
    QUERY_STRING="map=${MAPFILE}&${QUERY_STRING}"
  fi
  exec ${MAPSERV}
else
  echo "Sorry, I only understand GET requests."
fi
exit 1
# End of Script
Вы должны установить MAPSERV и MAPFILE переменными в соответствии с вашей конфигурацией. MAPSERV указывает на ваш MapServer исполняемым и MAPFILE указывает на mapfile MapServer вы хотите использовать. Обе переменные должны быть абсолютные пути к файлам, что ваш сервер имеет разрешение на доступ, хотя они не обязательно (и, вероятно, не должна) быть в веб-доступных местах. Затем поместите скрипт CGI вашего веб-сервера-BIN каталог, и сделать его исполняемым.

Хотя этот сценарий только устанавливает параметр "map", это легко изменить, чтобы установить любое количество других параметров MapServer также. Например, если вы хотите, чтобы ваши MapServer в "map" режиме, вы можете просто добавить 'mode=map' на передней панели переменную QUERY_STRING. Не забывайте, что отдельные параметры с амперсанда ('&').

Наконец, обратите внимание, что скрипт работает только для GET запросов.

Вопросы:
Куда добавить этот кусок кода? То что его поместить в директорию / BIN / SH - понял, а там же надо какой то файл создать и с каким то расширением же, так вот какое расширение будет?

Как его сделать исполняемым?

Надо ли еще что то добавиь в файл httpd.conf или уже ничего не надо?

Что значит
вы можете просто добавить 'mode=map' на передней панели переменную QUERY_STRING.
подчеркнутая фраза?
Если правильно понял, то

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

  
...
 else
    QUERY_STRING="map=${MAPFILE}&${QUERY_STRING}"
  fi
заменить MAPFILE и QUERY_STRING на соответствующие значение и написать так:

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

QUERY_STRING="map=${polt.map}&${ms4w/apps/gmap/htdocs/polt.map&mode=map}"
?


Что за параметры
Не забывайте, что отдельные параметры с амперсанда ('&').
?

В итоге скрипт будет выглядеть так?

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

#!/bin/sh
MAPSERV="/cgi-bin/mapserv.exe"
MAPFILE="/ms4w/apps/example/polt.map"
if [ "${REQUEST_METHOD}" = "GET" ]; then
  if [ -z "${ms4w/apps/gmap/htdocs/polt.map&mode=map}" ]; then
    QUERY_STRING="map=${polt.map}"
  else
    QUERY_STRING="map=${polt.map}&${ms4w/apps/gmap/htdocs/polt.map&mode=map}"
  fi
  exec ${/cgi-bin/mapserv.exe}
else
  echo "Sorry, I only understand GET requests."
fi
exit 1
# End of Script
или не так?
С Уважением, Антон
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Проблема с адресом (http://...)

Сообщение Максим Дубинин »

Положить в cgi-bin
сделать chmod +x
Экспериментируй
пристегивайтесь, турбулентность прямо по курсу
Аватара пользователя
arzobispo
Активный участник
Сообщения: 230
Зарегистрирован: 10 сен 2008, 10:28
Репутация: 3
Контактная информация:

Re: Проблема с адресом (http://...)

Сообщение arzobispo »

sim писал(а):Положить в cgi-bin
сделать chmod +x
Экспериментируй
У файла будет Имя chmod, а расширение какое?
С Уважением, Антон
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Проблема с адресом (http://...)

Сообщение Mavka »

sim привел "команду" для linux. Т.е. в консоли пишем:

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

chmod +x <и_вот_тут_имя_твоего_скрипта>
В атрибуты файла добавится x (от eXecute) и он станет программой (по типу exe и com в Windows)
Расширение не имеет значения и может совершенно отсутствовать, но, т.к. это shell-скрипт, пусть будет ".sh"
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
arzobispo
Активный участник
Сообщения: 230
Зарегистрирован: 10 сен 2008, 10:28
Репутация: 3
Контактная информация:

Re: Проблема с адресом (http://...)

Сообщение arzobispo »

Mavka писал(а):sim привел "команду" для linux. Т.е. в консоли пишем:

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

chmod +x <и_вот_тут_имя_твоего_скрипта>
В атрибуты файла добавится x (от eXecute) и он станет программой (по типу exe и com в Windows)
Расширение не имеет значения и может совершенно отсутствовать, но, т.к. это shell-скрипт, пусть будет ".sh"
Так этот скрипт токо для Линукса, у меня Виндовс и ни фига не работает :( И вот не знаю Что делать...
С Уважением, Антон
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Проблема с адресом (http://...)

Сообщение Mavka »

По Windows нет интерпретатора shell (в составе какого-нибудь cygwin он должен быть). Скрипт придется переписать на python или php. В документации к MapServer (пункт 9.12) есть варианты на нескольких языках.

Теперь о целесообразности - врапперы используют для сервисов типа WMS и WFS. У вас я как понимаю решение на базе phpscripts? Он вам действительно нужен?

P.S. Не зависимо от языка программирования, враппер - это программа (cgi). Чтобы Apache ее запускал, нужно в настройках директории специально оговорить. Пример для скрипта на python:

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

<Directory "/work/web">
  Options ExecCGI
  AddHandler cgi-script .py
</Directory> 
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
arzobispo
Активный участник
Сообщения: 230
Зарегистрирован: 10 сен 2008, 10:28
Репутация: 3
Контактная информация:

Re: Проблема с адресом (http://...) в ОС Windows

Сообщение arzobispo »

У меня используется такая связка MapServer+PostgreSQL+PostGIS и без php. Причем, что самое интересное видел такую хитрую связку: в начале используют метод POST, а потом GET. У меня сразу GET.
Вот смотри:

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

<form name="mapserv" method="GET" action="/cgi-bin/mapserv.exe">
<input type="hidden" name="map" value="[map]">
<input type="hidden" name="imgext" value="[mapext]">
<input type="hidden" name="imgxy" value="[center]">
если параметр map сразу передаем (определяем)

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

<input type="hidden" name="map" value="/ms4w/apps/тут_лежит_файл.map">

то MapServer задает следующий вопрос, где:

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

value="[mapext]"
value="[center]"
Причем, фича в том, что парамент mapext определяется каждый раз по разному и зависит от того, какой кусок карты смотрит пользователь, также и для center. И как тут быть? :shock:

Хотя, у автора книги B.Kropla - Beginning MapServer - Open Source GIS Development. 2005 всё работает из под ОС Windows... :roll:
С Уважением, Антон
Аватара пользователя
arzobispo
Активный участник
Сообщения: 230
Зарегистрирован: 10 сен 2008, 10:28
Репутация: 3
Контактная информация:

Re: Проблема с адресом (http://...) в ОС Windows

Сообщение arzobispo »

Проблема решена.
С Уважением, Антон
Аватара пользователя
Mavka
Гуру
Сообщения: 2060
Зарегистрирован: 14 мар 2008, 17:36
Репутация: 9

Re: Проблема с адресом (http://...) в ОС Windows

Сообщение Mavka »

И чаво было?
лангольеры под окном жрали время ом-ном-ном
Аватара пользователя
arzobispo
Активный участник
Сообщения: 230
Зарегистрирован: 10 сен 2008, 10:28
Репутация: 3
Контактная информация:

Re: Проблема с адресом (http://...) в ОС Windows

Сообщение arzobispo »

Решается проблема двумя путями:
1.В начале используем метод POST на одной html-формочке, и из нее передаем данные в другую, у которой используется метод GET.
2.Либо пишем часть координат вручную и от них MS начинает дальше плясать.
С Уважением, Антон
Ответить

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

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

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