Страница 1 из 2

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

Добавлено: 14 май 2009, 16:45
hawk1
Я создал следующий шаблон для запроса

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

<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>
Но когда я выбираю режим запроса и щелкаю на объекте, у меня просто обноаляется карта. Почему?

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

Добавлено: 15 май 2009, 10:35
wmk
Я тут про запросы уже писал ... правда только для OL , но и мапфайл тоже описан
OpenLayers : Получение информации об объекте

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

Добавлено: 15 май 2009, 18:36
hawk1
Вообще-то я все делал как описано в руководстве по MapServer на этом сайте.

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

Добавлено: 19 май 2009, 16:18
hawk1
Оказывается, у меня формируется вот такая ссылка

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

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 принимает несколько значений. Как такое может быть?

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

Добавлено: 20 май 2009, 10:16
wmk
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)

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

Добавлено: 20 май 2009, 14:56
hawk1
Обычные шейпфайлы. Мож в шаблоне че не так

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

<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>
Но ведь эта ссылка генерируется автоматически.

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

Добавлено: 20 май 2009, 20:37
hawk1
Оказалось все дело вот в этом фрагменте кода

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

 <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.

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

Добавлено: 20 май 2009, 21:19
hawk1
Объясните, из каких соображений следует задавать параметр TOLERANCE?

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

Добавлено: 23 май 2009, 17:51
hawk1
Почему когда я щелкаю на одном объекте, у меня выводится информация о другом?

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 24 май 2009, 21:16
hawk1
Шаблоны у меня заданы для всех слоев кроме улиц.

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

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

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

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