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

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

Добавлено: 20 дек 2010, 02:24
Denis Rykov
Политика безопасности JavaScript запрещается обращаться на другие серверы. Раздел Cross-domain security вам в помощь. А насчёт того - почему не работает ваш сервис, так перейдите по ссылке, отправляемой браузером на сервер и всё станет понятно.

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

Добавлено: 20 дек 2010, 10:36
Djinn18
все, с этим разобрался
только что писать тут?
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

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

Добавлено: 21 дек 2010, 11:46
Denis Rykov
На адрес вашего WMS сервера.

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

Добавлено: 21 дек 2010, 11:58
Djinn18
помогите плз
тестовый что на сайте, работает 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

помогите плз

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

Добавлено: 21 дек 2010, 12:08
Djinn18
_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 работают

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

Добавлено: 25 дек 2010, 20:26
Denis Rykov
Указанные адреса не открываются.

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

Добавлено: 05 янв 2011, 04:04
Mavka
Не по самой статье, но может заинтересовать читателей:
[PDF] Adding custom search engines to OpenLayers with OpenSearch-geo

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

Добавлено: 19 окт 2011, 15:43
Kuzmich-rud
добавил слой как в статье:
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: ..

кароче ругается на символ "%". что я делаю не так?

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

Добавлено: 19 окт 2011, 15:53
Mavka
Run-time Substitution - у вас аналогично.

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

Добавлено: 20 окт 2011, 08:28
Kuzmich-rud
Ну по ссылке то же самое. Тот же принцип. У меня другая проблема.

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

Добавлено: 20 окт 2011, 11:06
Mavka
Kuzmich-rud
Вы прописали валидатор?

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

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

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

Добавлено: 20 окт 2011, 11:50
Kuzmich-rud
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 '.' и все заработало. хм... в статье этого не было. еще раз спасибо

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

Добавлено: 20 окт 2011, 11:53
Mavka
А значит по моей ссылке вы даже не заглядывали :(

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

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

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

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

Добавлено: 16 апр 2014, 17:28
Denis Rykov
Locate центрирует карту на место вашего положения. Поиск не работает потому, что какие-то проблемы со связью с сервисом геокодирования. Всё что вам нужно - это сделать некоторое серверное API, которое бы дергал клиент, передавая ему строку поиска, а в ответ получал бы координаты или всего объекта или его цента.