Поиск объектов на карте с помощью OpenLayers
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Поиск объектов на карте с помощью OpenLayers
Политика безопасности JavaScript запрещается обращаться на другие серверы. Раздел Cross-domain security вам в помощь. А насчёт того - почему не работает ваш сервис, так перейдите по ссылке, отправляемой браузером на сервер и всё станет понятно.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 76
- Зарегистрирован: 29 ноя 2010, 19:35
- Репутация: 0
Re: Поиск объектов на карте с помощью OpenLayers
все, с этим разобрался
только что писать тут?
только что писать тут?
на что заменить эту строчку http://gis-lab.info:8180/geoserver/wms если я не использую geoservergeosample = new OpenLayers.Layer.WMS(
"Selected",
"http://gis-lab.info:8180/geoserver/wms",
{layers:"geosample:ecoregions,geosample:road-l-osm,geosample:settlements",transparent:"false"});
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Поиск объектов на карте с помощью OpenLayers
На адрес вашего WMS сервера.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 76
- Зарегистрирован: 29 ноя 2010, 19:35
- Репутация: 0
Re: Поиск объектов на карте с помощью OpenLayers
помогите плз
тестовый что на сайте, работает http://niczem.zapto.org/geo/test/test.html
сделал с формой ввода названия, например Акутиха
а вот когда заменил все на свои данные, то никак не получается,
http://niczem.zapto.org/geo/search/search.html
вот расписана все файлы:
и
я уже не знаю где что не так, потратил несколько дней и ничего не нашел
хочу разобраться, так как потом это мне нужно как-то вставить сюда http://niczem.zapto.org/geo/braslav.html
помогите плз
тестовый что на сайте, работает 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>
<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 = 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
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";
}
?>
$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
помогите плз
-
- Участник
- Сообщения: 76
- Зарегистрирован: 29 ноя 2010, 19:35
- Репутация: 0
Re: Поиск объектов на карте с помощью OpenLayers
значит не на файл?_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
Указанные адреса не открываются.
Spatial is now, more than ever, just another column- The Geometry Column.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Поиск объектов на карте с помощью OpenLayers
Не по самой статье, но может заинтересовать читателей:
[PDF] Adding custom search engines to OpenLayers with OpenSearch-geo
[PDF] Adding custom search engines to OpenLayers with OpenSearch-geo
лангольеры под окном жрали время ом-ном-ном
- Kuzmich-rud
- Интересующийся
- Сообщения: 22
- Зарегистрирован: 17 май 2010, 15:34
- Репутация: 0
Re: Поиск объектов на карте с помощью OpenLayers
добавил слой как в статье:
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: ..
кароче ругается на символ "%". что я делаю не так?
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
Run-time Substitution - у вас аналогично.
лангольеры под окном жрали время ом-ном-ном
- Kuzmich-rud
- Интересующийся
- Сообщения: 22
- Зарегистрирован: 17 май 2010, 15:34
- Репутация: 0
Re: Поиск объектов на карте с помощью OpenLayers
Ну по ссылке то же самое. Тот же принцип. У меня другая проблема.
Последний раз редактировалось Kuzmich-rud 18 июн 2012, 18:48, всего редактировалось 1 раз.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Поиск объектов на карте с помощью OpenLayers
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
спасибо, прописал sql_validation_pattern '.' и все заработало. хм... в статье этого не было. еще раз спасибоMavka писал(а):Kuzmich-rud
Вы прописали валидатор?И что пишет в логи при включенной отладке?Код: Выделить всё
LAYER ... DATA "the_geom from (%sql%) as street using unique gid using srid=28406" ... METADATA sql_validation_pattern '.' END END
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: Поиск объектов на карте с помощью OpenLayers
А значит по моей ссылке вы даже не заглядывали :(
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 21
- Зарегистрирован: 04 мар 2014, 12:21
- Репутация: 0
Re: Поиск объектов на карте с помощью OpenLayers
Можете подсказать почему в представленных примерах на оф.сайте на работает поиск
openlayers.org/dev/examples/mobile-jq.html
openlayers.org/dev/examples/mobile-sencha.html
И в первом примере не понятно как работает кнопка "Locate"
Задача состоит в том чтобы организовать поиск по определенной колонке в атрибутивной таблице в нескольких слоях
после нахождения объекта вывести его на экране поместив в центр. Поиск с выпадающим списком мало приемлем т.к. только в одном слое объектов может быть более 300
Имя колонки "Name"
слоев несколько
Данные в шейп файлах
основа Mapserver
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
Locate центрирует карту на место вашего положения. Поиск не работает потому, что какие-то проблемы со связью с сервисом геокодирования. Всё что вам нужно - это сделать некоторое серверное API, которое бы дергал клиент, передавая ему строку поиска, а в ответ получал бы координаты или всего объекта или его цента.
Spatial is now, more than ever, just another column- The Geometry Column.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 84 гостя