MapServer пространственные запросы

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

MapServer пространственные запросы

Сообщение hawk1 » 14 май 2009, 16:45

Я создал следующий шаблон для запроса

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

<tr>
<td>[lrn]</td>
<td>[НАЗВАНИЕ]</td>
<td>[ГОД]</td>
<td>[ОПИСАНИЕ]</td>
</tr>
В map-файле прописал

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

LAYER
  NAME churches
  DATA churches
  STATUS ON
  TYPE POLYGON
  LABELITEM "НАЗВАНИЕ"
  CLASSITEM "ТИП"
  TOLERANCE 5000
  HEADER './templates/churches_head.html'    
  FOOTER './templates/churches_footer.html' 
  TEMPLATE './templates/churches_query.html'  
  CLASS
    NAME "Монастырь"
    TEMPLATE './templates/churches_query.html'
    EXPRESSION '1'
    STYLE
      OUTLINECOLOR 197 122 78
    END
  LABEL
        COLOR 0 0 0
        SHADOWCOLOR 10 10 10
        SHADOWSIZE 0 0
        TYPE TRUETYPE
        FONT arial
	  SIZE 10  
        ENCODING CP1251
	  ANTIALIAS TRUE
        ANGLE AUTO
     END
   END
В шаблоне для отображения карты прописал

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

 <select name="mode">
                      <option value="browse">Обзор</option>
                      <option value="map">Карта</option>
                      <option value="query" [query_select]>Запрос информации об 1 объекте</option>
                      <option value="nquery" [nquery_select]>Запрос информации о неск. объектах</option>
                     </select>
Но когда я выбираю режим запроса и щелкаю на объекте, у меня просто обноаляется карта. Почему?

Аватара пользователя
wmk
Активный участник
Сообщения: 102
Зарегистрирован: 11 янв 2009, 17:38
Репутация: 0
Откуда: Казань
Контактная информация:

Re: MapServer пространственные запросы

Сообщение wmk » 15 май 2009, 10:35

Я тут про запросы уже писал ... правда только для OL , но и мапфайл тоже описан
OpenLayers : Получение информации об объекте
OurGuns.ru - пневматическое оружие России и мира
Пневматическое оружие , Страйкбольное оружие , Пейнтбольное оружие

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 15 май 2009, 18:36

Вообще-то я все делал как описано в руководстве по MapServer на этом сайте.

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 19 май 2009, 16:18

Оказывается, у меня формируется вот такая ссылка

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

http://localhost/cgi-bin/mapserv.exe?map=%2Fms4w%2Fapps%2Fmurom%2Fmurom.map&imgext=1775.444339+-4717.014436+9521.180061+1089.863783&imgxy=400.0+300.0&layer=museums&layer=streets&layer=banks&layer=restaurants&layer=churches&layer=tradecenters&layer=parks&layer=hotels&mode=browse&mode=map&mode=query&mode=nquery&mode=browse&submit=%CE%E1%ED%EE%E2%E8%F2%FC&zoom=2
т.е. переменная mode принимает несколько значений. Как такое может быть?

Аватара пользователя
wmk
Активный участник
Сообщения: 102
Зарегистрирован: 11 янв 2009, 17:38
Репутация: 0
Откуда: Казань
Контактная информация:

Re: MapServer пространственные запросы

Сообщение wmk » 20 май 2009, 10:16

http://localhost/cgi-bin/mapserv.exe
?map=%2Fms4w%2Fapps%2Fmurom%2Fmurom.map
&imgext=1775.444339+-4717.014436+9521.180061+1089.863783
&imgxy=400.0+300.0
&layer=museums
&layer=streets
&layer=banks
&layer=restaurants
&layer=churches
&layer=tradecenters
&layer=parks
&layer=hotels
&mode=browse
&mode=map
&mode=query
&mode=nquery
&mode=browse
&submit=%CE%E1%ED%EE%E2%E8%F2%FC
&zoom=2
Но это же получается что он запрашивает
layer=hotels
mode=browse


По идее запрос слоев должен быть таким
LAYERS=podlogka_kazan,water,streets,kazan_merged
А mode должен быть один и кстати у тебя карта какая ??? (wms, wfs)
OurGuns.ru - пневматическое оружие России и мира
Пневматическое оружие , Страйкбольное оружие , Пейнтбольное оружие

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 20 май 2009, 14:56

Обычные шейпфайлы. Мож в шаблоне че не так

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

<html>
<head>
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1251">
<TITLE>Туристическая карта Мурома</TITLE>
<link rel="stylesheet" type="text/css" href="style.css" title="Stylesheet">
<STYLE>
#mainmenu {
  border-color: #000000;
  color:black;
  text-decoration:underline;
  font-size: 12px;
}
body {
    background-color: #FFFFCC;
}
</STYLE>
</head>
<body>
<TABLE width=100% bgcolor="#4169E1">
  <TR bgcolor = "#4169E1">
    <TD><IMG src="logo.gif" height=160 width=100%></TD>
    <TD><H3><P ALIGN=right><FONT COLOR="FFFAFA">Туристическая<BR>карта<BR>Мурома</FONT></P></H3>
    </TD>
  </TR>
</TABLE>
<TABLE width=100% bgcolor="#CCCCCC">
  <TR>
    <TD width="40%">
      <div align="center"><A HREF="index.html" id="mainmenu">Главная</A>
    </div></TD>
    <TD width="19%">
      <div align="center"><A HREF="searchobject.html" id="mainmenu">Поиск объекта</A>
      </div></TD>
    <TD width="41%">
      <div align="center"><A HREF="searchroute.html" id="mainmenu">Поиск маршрута</A>
      </div></TD>
  </TR>
</TABLE>
<div>
<form name="mapserv" method="GET" action="/cgi-bin/mapserv.exe">
  <!-- Скрытые CGI переменные -->
  <input type="hidden" name="map" value="[map]">
  <input type="hidden" name="imgext" value="[mapext]">
  <input type="hidden" name="imgxy" value="[center]">
  <table align="center" width="410" border="1">
  <tr>
  <td bgcolor="#ffcc66">
  <input type="checkbox" name="layer" value="museums" [museums_check]>Музеи<br>
  <input type="checkbox" enabled="false" name="layer" value="streets" [streets_check]>Улицы<br>
  <input type="checkbox" name="layer" value="banks" [banks_check]>Финансовые учреждения<br>
  <input type="checkbox" name="layer" value="restaurants" [restaurants_check]>Кафе, бары, рестораны<br>
  <input type="checkbox" name="layer" value="churches" [churches_check]>Храмы<br>
  <input type="checkbox" name="layer" value="tradecenters" [tradecenters_check]>Торговые центры<br>
  <input type="checkbox" name="layer" value="parks" [parks_check]>Парки<br>
  <input type="checkbox" name="layer" value="hotels" [hotels_check]>Гостиницы<br>
  <input type="checkbox" name="layer" value="squares" [squares_check]>Площади<br>
  <input type="checkbox" name="layer" value="hospitals" [hospitals_check]>Медицинские учреждения<br>
  </td>
  <input type="hidden" name="mode" value="browse">
  <input type="hidden" name="mode" value="map">
  <input type="hidden" name="mode" value="query">
  <input type="hidden" name="mode" value="nquery">
  <td>
              <table width="400" border="1">
              <tr>
                  <td>
                  <!-- SPECIFY MAP MODE -->
                  <div align="center">Режим карты:<br>
                   <select name="mode">
                      <option value="browse" [browse_select]>
                       Просмотр </option>
                      <option value="query" [query_select]>
                      Запрос информации об 1 объекте</option>
                     <option value="nquery" [nquery_select]>
                     Запрос информации о неск. объектах</option>
                   </select>
                  </div>
                  </td>
                  <td>
                  <!-- FORM SUBMIT BUTTON -->
                  <div align="center">
                      <input type="submit" name="submit" value="Обновить">
                    </div>
                  </td>
                  <td>
                  <!-- ZOOM/PAN CONTROLS -->
                <div align="center">Карта: <br>
                      <select name="zoom">
                          <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>
              </tr>
              <tr>
    <td colspan="3" align="center" valign="top">
      <img src="[scalebar]">
      <input type="image" name="img" src="[img]" width="600" height="450" border="0">
    </td>
    <td>
      <p> Легенда:<br>
      <img name="legend" src="[legend]"></p>
      <p> Мини-карта:<br>
      <input type="image" name="ref" src="[ref]" border=0><p>
    </td>
  </tr>
</table>
</form>
</div>
</table>
<BR>
<HR>
<CENTER><FONT COLOR="#CCCCCC" SIZE="2pt">Разработчик: Ястребов С.А. (гр.ИС-105)<BR> Муром 2009</FONT></CENTER>
</body>
</html>
Но ведь эта ссылка генерируется автоматически.

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 20 май 2009, 20:37

Оказалось все дело вот в этом фрагменте кода

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

 <input type="hidden" name="mode" value="browse">
  <input type="hidden" name="mode" value="map">
  <input type="hidden" name="mode" value="query">
  <input type="hidden" name="mode" value="nquery">
Но теперь выдает ошибку msQueryByPoint(): Search returned no results. No matching record(s) found.

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 20 май 2009, 21:19

Объясните, из каких соображений следует задавать параметр TOLERANCE?

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 23 май 2009, 17:51

Почему когда я щелкаю на одном объекте, у меня выводится информация о другом?

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: MapServer пространственные запросы

Сообщение KolesovDmitry » 23 май 2009, 20:02

hawk1 писал(а):Объясните, из каких соображений следует задавать параметр TOLERANCE?
Если коротко, то этот параметр - радиус поиска вокруг места, где был сделан щелчек мышью. Т.е. если вы говорите

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

TOLERANCE 100
то вокруг того места, где вы щелкнули мышью очерчиваются круг радиусом 100 единиц и выбираются объекты (или первый попавшийся объект - в зависимости от запроса), лежащие в этом круге. Какой радиус выбрать и какие единицы использовать зависит от задачи. Посмотрите подробности в документации, раздел Tolerance.
hawk1 писал(а):Почему когда я щелкаю на одном объекте, у меня выводится информация о другом?
Скорее всего, у вас запрос на выборку одного объекта, вот вы и получаете только один из N объектов, попавших в круг вашего радиуса.

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 24 май 2009, 12:12

При крупном масштабе все более менее работает, а вот при мелком выдает сообщение msQueryByPoint(): Search returned no results. No matching record(s) found даже для таких крупных объектов, как парки.

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: MapServer пространственные запросы

Сообщение KolesovDmitry » 24 май 2009, 19:03

hawk1 писал(а):При крупном масштабе все более менее работает, а вот при мелком выдает сообщение msQueryByPoint(): Search returned no results. No matching record(s) found даже для таких крупных объектов, как парки.
Скорее всего в заданной точке (в выбранным радиусом поиска) не находится ни одного объекта. В этом случае, можно показать пользователю специальную страницу, на которой можете написать, что-то вроде "объектов не найдено". Адрес этой страницы указвается в разделе WEB при помощи ключевого слова EMPTY:

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

WEB
  ...
  EMPTY [url]
  ...
END
Есть второй вариант, при котором возникает эта ошибка: вы точно знаете, что в этой точке есть объект. Тогда ваш случай описан в документации и означает, что вы попросту не настроили шаблоны для возвращения результатов.

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 24 май 2009, 21:16

Шаблоны у меня заданы для всех слоев кроме улиц.

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 25 май 2009, 20:00

Не могу понять, каким же установить TOLERANCE, чтобы при щелчке по объекту пользователь гарантированно получал информацию именно об этом объекте.

hawk1
Интересующийся
Сообщения: 38
Зарегистрирован: 28 фев 2009, 17:30
Репутация: 0

Re: MapServer пространственные запросы

Сообщение hawk1 » 26 май 2009, 17:41

А не используется ли при запросах какое либо смещение? Просто мне кажется, что результат возвращается для точки, смещенной на некоторое расстояние, относительно той, по которой на самом деле был произведен щелчок.

Ответить

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

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

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