Поиск объектов на карте с помощью OpenLayers

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

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Denis Rykov » 20 дек 2010, 02:24

Политика безопасности JavaScript запрещается обращаться на другие серверы. Раздел Cross-domain security вам в помощь. А насчёт того - почему не работает ваш сервис, так перейдите по ссылке, отправляемой браузером на сервер и всё станет понятно.
Spatial is now, more than ever, just another column- The Geometry Column.

Djinn18
Участник
Сообщения: 76
Зарегистрирован: 29 ноя 2010, 19:35
Репутация: 0

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Djinn18 » 20 дек 2010, 10:36

все, с этим разобрался
только что писать тут?
geosample = new OpenLayers.Layer.WMS(
"Selected",
"http://gis-lab.info:8180/geoserver/wms",
{layers:"geosample:ecoregions,geosample:road-l-osm,geosample:settlements",transparent:"false"});
на что заменить эту строчку http://gis-lab.info:8180/geoserver/wms если я не использую geoserver

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

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Denis Rykov » 21 дек 2010, 11:46

На адрес вашего WMS сервера.
Spatial is now, more than ever, just another column- The Geometry Column.

Djinn18
Участник
Сообщения: 76
Зарегистрирован: 29 ноя 2010, 19:35
Репутация: 0

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Djinn18 » 21 дек 2010, 11:58

помогите плз
тестовый что на сайте, работает http://niczem.zapto.org/geo/test/test.html
сделал с формой ввода названия, например Акутиха

а вот когда заменил все на свои данные, то никак не получается,
http://niczem.zapto.org/geo/search/search.html

вот расписана все файлы:
Спойлер
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="http://niczem.zapto.org/geo/OpenLayers.js"></script>
<script src="ol-search.js"></script>
<title>Документ без названия</title>
</head>

<body onLoad="init()">
<form name='form'>
<table>
<tr>
<td valign="top">
<div id="map" style="width: 900px; height: 550px">
</div>
</td>
<td>
<p><strong>Название населенного пункта:</strong></p>
<input type='text' name='name' size='16' maxlength='16' value=''>

<input type="button" value="Search" onclick="getext()">
</td>
</tr>
</table>
</form>
</body>
</html>
Спойлер
function init() {
map = new OpenLayers.Map("map");

sel = new OpenLayers.Layer.WMS(
"Selected",
"http://niczem.zapto.org/cgi-bin/mapserv?",
{map:"C:/ms4w/apps/geo/search/layer.map",layers: "selected",sql:"select * from settle_pol_braslav where label='-1'",transparent:"true"},{singleTile:true});

peremen = new OpenLayers.Layer.WMS(
"Selected",
"http://niczem.zapto.org/cgi-bin/mapserv ... /layer.map"
/*"http://gis-lab.info:8180/geoserver/wms"*/,
{layers:"postgis:land_braslav, postgis:roads_lin_braslav, postgis:settle_pol_braslav",transparent:"false"});

map.addLayers([peremen,sel]);
var bounds = new OpenLayers.Bounds.fromString('26.4,55.2,27.5,55.9');
map.zoomToExtent(bounds);

}

function init_AJAX() {
try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) {} //IE
try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) {} //IE
try { return new XMLHttpRequest(); } catch(e) {} //Native Javascript
alert("XMLHttpRequest not supported");
return null;
};

function getext() {
var req = init_AJAX();
req.open("GET", "http://niczem.zapto.org/geo/search/ol-s ... ame.value));
req.onreadystatechange = function () {
if (req.readyState==4) {
if (req.status==200) {
var response = req.responseText.split("|");
sel.mergeNewParams({sql:response[0]});
var bounds = new OpenLayers.Bounds.fromString(response[1]);
map.zoomToExtent(bounds);
}
}
};
req.send(null);
}
Спойлер
MAP
STATUS ON
IMAGETYPE PNG
EXTENT 26.4 55.2 27.5 55.9
SIZE 900 800
FONTSET "fonts/fonts.list"

WEB
IMAGEPATH "/tmp/ms_tmp/"
IMAGEURL "/tmp/"
METADATA
wms_title "OpenLayears search example"
wms_abstract "OpenLayears search example"
wms_srs "EPSG:4326"
wms_feature_info_mime_type "text/html"
END
END
PROJECTION
"init=epsg:4326"
END

LAYER
NAME "selected"
CONNECTIONTYPE postgis
CONNECTION "user=------------- password=-------- dbname=postgis host=87.252.238.126"
DATA "the_geom from (%SQL%) as newtable using unique gid using srid=4326"
TYPE POLYGON
CLASS
STYLE
OUTLINECOLOR 255 0 0
ANTIALIAS TRUE
WIDTH 2
END
END
METADATA
wms_srs "EPSG:4326"
END
END
END
и
Спойлер
<?php

$dbh = pg_connect("host=87.252.238.126 dbname=postgis user=-------------- password=-------------") or
die("Error in connection: " . pg_last_error());

$code = $_REQUEST['name'];

$str = "SELECT * FROM settle_pol_braslav WHERE label='".$code."'";
echo $str."|";

$result = pg_query($dbh, "select ST_XMin(ST_Union(the_geom)) as st_xmin,
ST_YMin(ST_Union(the_geom)) as st_ymin,ST_XMax(ST_Union(the_geom)) as st_xmax,
ST_YMax(ST_Union(the_geom)) as st_ymax from ($str) AS foo");
$row = pg_fetch_array($result);

if (!empty($row['st_xmin'])&&!empty($row['st_ymin'])&&!empty($row['st_xmax'])&&!empty($row['st_ymax'])){
echo $row['st_xmin'].",".$row['st_ymin'].",".$row['st_xmax'].",".$row['st_ymax'];
}
else {
echo "26.4,55.2,27.5,55.9";
}
?>
я уже не знаю где что не так, потратил несколько дней и ничего не нашел
хочу разобраться, так как потом это мне нужно как-то вставить сюда http://niczem.zapto.org/geo/braslav.html

помогите плз

Djinn18
Участник
Сообщения: 76
Зарегистрирован: 29 ноя 2010, 19:35
Репутация: 0

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Djinn18 » 21 дек 2010, 12:08

_DR_ писал(а):На адрес вашего WMS сервера.
значит не на файл?
просто вот что я вставил, но не помогло
peremen = new OpenLayers.Layer.WMS(
"Selected",
"http://niczem.zapto.org/cgi-bin/mapserv ... /layer.map"
/*"http://gis-lab.info:8180/geoserver/wms"*/,
{layers:"postgis:land_braslav, postgis:roads_lin_braslav, postgis:settle_pol_braslav",transparent:"false"});
чуть выше все расписал
я использую mapserver, а не geoserver
читал про wms на mapserver, адаптированные map файлы под wms работают

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

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Denis Rykov » 25 дек 2010, 20:26

Указанные адреса не открываются.
Spatial is now, more than ever, just another column- The Geometry Column.

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

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Mavka » 05 янв 2011, 04:04

Не по самой статье, но может заинтересовать читателей:
[PDF] Adding custom search engines to OpenLayers with OpenSearch-geo
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Kuzmich-rud
Интересующийся
Сообщения: 22
Зарегистрирован: 17 май 2010, 15:34
Репутация: 0

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Kuzmich-rud » 19 окт 2011, 15:43

добавил слой как в статье:
LAYER
NAME "selected"
...
CONNECTION "dbname='some_map' host=localhost port=5432 user='postgres' password='*****' sslmode=disable"
DATA "the_geom from layer using unique gid using srid=28406"
TYPE LINE
блаблабла...

пытаюсь скормить в урле запрос: http://localhost/cgi-bin/mapserv.exe?ma ... from+layer

и сервер возвращает:
msDrawMap(): Image handling error. Failed to draw layer named 'selected'. msPostGISLayerWhichShapes(): Query error. Error (ERROR: syntax error at or near "%" LINE 1: ..

кароче ругается на символ "%". что я делаю не так?
Последний раз редактировалось Kuzmich-rud 18 июн 2012, 18:55, всего редактировалось 3 раза.

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

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Mavka » 19 окт 2011, 15:53

Run-time Substitution - у вас аналогично.
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Kuzmich-rud
Интересующийся
Сообщения: 22
Зарегистрирован: 17 май 2010, 15:34
Репутация: 0

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Kuzmich-rud » 20 окт 2011, 08:28

Ну по ссылке то же самое. Тот же принцип. У меня другая проблема.
Последний раз редактировалось Kuzmich-rud 18 июн 2012, 18:48, всего редактировалось 1 раз.

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

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Mavka » 20 окт 2011, 11:06

Kuzmich-rud
Вы прописали валидатор?

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

LAYER
    ...
    DATA "the_geom from (%sql%) as street using unique gid using srid=28406"
    ...
    METADATA
        sql_validation_pattern '.'
    END
END
И что пишет в логи при включенной отладке?
лангольеры под окном жрали время ом-ном-ном

Аватара пользователя
Kuzmich-rud
Интересующийся
Сообщения: 22
Зарегистрирован: 17 май 2010, 15:34
Репутация: 0

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Kuzmich-rud » 20 окт 2011, 11:50

Mavka писал(а):Kuzmich-rud
Вы прописали валидатор?

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

LAYER
    ...
    DATA "the_geom from (%sql%) as street using unique gid using srid=28406"
    ...
    METADATA
        sql_validation_pattern '.'
    END
END
И что пишет в логи при включенной отладке?
спасибо, прописал   sql_validation_pattern '.' и все заработало. хм... в статье этого не было. еще раз спасибо

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

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Mavka » 20 окт 2011, 11:53

А значит по моей ссылке вы даже не заглядывали :(
лангольеры под окном жрали время ом-ном-ном

Александр2014
Интересующийся
Сообщения: 21
Зарегистрирован: 04 мар 2014, 12:21
Репутация: 0

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Александр2014 » 16 апр 2014, 08:25

Можете подсказать почему в представленных примерах на оф.сайте на работает поиск
openlayers.org/dev/examples/mobile-jq.html
openlayers.org/dev/examples/mobile-sencha.html
И в первом примере не понятно как работает кнопка "Locate" :?

Задача состоит в том чтобы организовать поиск по определенной колонке в атрибутивной таблице в нескольких слоях
после нахождения объекта вывести его на экране поместив в центр. Поиск с выпадающим списком мало приемлем т.к. только в одном слое объектов может быть более 300
Имя колонки "Name"
слоев несколько
Данные в шейп файлах
основа Mapserver

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

Re: Поиск объектов на карте с помощью OpenLayers

Сообщение Denis Rykov » 16 апр 2014, 17:28

Locate центрирует карту на место вашего положения. Поиск не работает потому, что какие-то проблемы со связью с сервисом геокодирования. Всё что вам нужно - это сделать некоторое серверное API, которое бы дергал клиент, передавая ему строку поиска, а в ответ получал бы координаты или всего объекта или его цента.
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «Материалы сайта»

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

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