Страница 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?
Если коротко, то этот параметр - радиус поиска вокруг места, где был сделан щелчек мышью. Т.е. если вы говорите
то вокруг того места, где вы щелкнули мышью очерчиваются круг радиусом 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:
Есть второй вариант, при котором возникает эта ошибка: вы точно знаете, что в этой точке есть объект. Тогда ваш случай описан
в документации и означает, что вы попросту не настроили шаблоны для возвращения результатов.
Re: MapServer пространственные запросы
Добавлено: 24 май 2009, 21:16
hawk1
Шаблоны у меня заданы для всех слоев кроме улиц.
Re: MapServer пространственные запросы
Добавлено: 25 май 2009, 20:00
hawk1
Не могу понять, каким же установить TOLERANCE, чтобы при щелчке по объекту пользователь гарантированно получал информацию именно об этом объекте.
Re: MapServer пространственные запросы
Добавлено: 26 май 2009, 17:41
hawk1
А не используется ли при запросах какое либо смещение? Просто мне кажется, что результат возвращается для точки, смещенной на некоторое расстояние, относительно той, по которой на самом деле был произведен щелчок.