Центр слоя

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Центр слоя

Сообщение kliver » 15 май 2012, 18:32

Добрый вечер.
Хочу поинтересоваться, возможно ли используя геосервер и опенлаерс отображать при загрузке страницы центр wms слоя? Этот слой постоянно изменяется, появляются новые полигоны. Как понимаю за это отвечает OpenLayers.Bounds.
Сейчас я их устанавливаю переписыванием значения из геосервера вручную. Можно ли как то автоматизировать этот процесс? Или лишь вручную можно задать максимально возможную границу?

Еще попутно такой вопрос. В qgis я создаю полигоны около Екатеринбурга. У проекта выставлена epsg:900913. Затем сохраняю слой в mif файл и ставлю свою ск. Загружаю файл в postgis в которой так же есть строка с определением моей ск. Далее делаю wms в geoserver из загруженного файла в постгис. В Geoserver так же занесена моя ск. У wms слоя я ставлю epsg:900913. При создании карты средствами Openlayers в свойствах проставляю projection:"EPSG:900913"....и полигоны оказываются в Камеруне. На каком этапе возможна ошибка?

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

Re: Центр слоя

Сообщение Denis Rykov » 16 май 2012, 06:59

По первому вопросу: чтобы вытянуть, допустим, bbox слоя с именем myLayerName по WMS, нужно спросить его у WMS-сервера, используя запрос GetCapabilities. В OpenLayers это будет выглядеть так:

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


wms = new OpenLayers.Format.WMSCapabilities();
OpenLayers.Request.GET({
url:"wmsURL&service=WMS&request=GetCapabilities",
success: function(e){
response = wms.read(e.responseText);
}
});
capability = response.capability;
for (var i=0, len=capability.layers.length; i<len; i+=1) {
var layerObj = capability.layers;
if (layerObj.name === myLayerName) {
map.zoomToExtent(OpenLayers.Bounds.fromArray(layerObj.llbbox));
break;
}
}

По второму вопросу ничего не понял. Сами данные в какой проекции хранятся?
Spatial is now, more than ever, just another column- The Geometry Column.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Центр слоя

Сообщение kliver » 17 май 2012, 12:02

По второму вопросу я сумбурно конечно спросил, но уже разобрался с ошибкой.

А по первому. Функция getExtent() возвращает тот же самый bbox или это разные вещи?
Просто сейчас пытаюсь сделать так что бы при фильтрации слоя, то есть оставлении на нем только одного полигона карта фокусировалась на нем.
Делаю так

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

ex=layer.getExtent();
zoomToExtent(ex);
Но ничего не происходит

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

Re: Центр слоя

Сообщение Denis Rykov » 17 май 2012, 12:16

getExtent же возвращает текущий охват, поэтому смысл ваших действий сводится к тому что вы получаете текущий охват и говорите OL - сделай зум на текущий охват, естественно, ничего не произойдёт. А как фильтрация объектов слоя по вашему должна повлиять на его охват? Ответ - никак. Охват слоя (если мы говорим про WMS) - это его атрибут, который задаётся на этапе его описания на сервере, именно этот атрибут я и предлагал вам получать в предыдущем посте. Если бы у вас был векторный слой, то можно прямо на клиенте получить охват определенного набора объектов, если же слой растровый, то для этого нужно отправить на сервер, например, id объектов, рассчитать bbox, вернуть его клиенту и уже только потом зумить.
Spatial is now, more than ever, just another column- The Geometry Column.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Центр слоя

Сообщение kliver » 17 май 2012, 12:21

Я записал maxExtent по размеру Свердловской области в настройках map. Потом программно выбираю полигоны которые хочу оставить в слое. И после фильтрации вызываю getExtent и вывожу в алерт. И он изменяется.
Но охват все равно не меняется и остается равным первоначально записаному?

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

Re: Центр слоя

Сообщение Denis Rykov » 17 май 2012, 12:26

Я чего-то не понимаю, какие полигоны? У вас векторный слой? В первом посте вы написали, что речь идёт о WMS.
Spatial is now, more than ever, just another column- The Geometry Column.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Центр слоя

Сообщение kliver » 17 май 2012, 12:33

Да WMS слой. На нем полигоны. Я путаюсь в формулировке?

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

Re: Центр слоя

Сообщение Denis Rykov » 17 май 2012, 12:35

А как вы программно выбираете полигоны на WMS-слое?
Spatial is now, more than ever, just another column- The Geometry Column.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Центр слоя

Сообщение kliver » 17 май 2012, 12:36

CQL фильтр

Научный руководитель пояснил мне, что getExtent() то что мне нужно. И это наверное я просто ввел вас в заблуждение своими точными вопросами.
Но теперь тогда дело в другом getExtent() возвращает что то неверное. Сначала подумал, что дело в проекции.
и сделал

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

projection = new OpenLayers.Projection('EPSG: 70066');
displayProjection = new OpenLayers.Projection('EPSG: 900913');
ex=layer.getExtent().transform(projection, displayProjection);
И это при том что в настройках слоя на геосервере выставлено native srs=70066, declared srs=900913 и задано reproject native to declared.

Но это не дало результатов все равно функция возвращает не те результаты.

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

Re: Центр слоя

Сообщение Denis Rykov » 18 май 2012, 10:00

Если у вас нет векторных данных, то единственный способ получить охват - запрашивать его с сервера. Вы пробовали мой пример с GetCapabilities?
Spatial is now, more than ever, just another column- The Geometry Column.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Центр слоя

Сообщение kliver » 18 май 2012, 11:48

Да попробовал, но не уверен, что сделал все верно.

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

wms = new OpenLayers.Format.WMSCapabilities();
OpenLayers.Request.GET({
    url:"http://localhost:8080/geoserver/wms/filedata?request=GetCapabilities",
    success: function(e){
        response = wms.read(e.responseText);
    }
});
capability = response .capability;
for (var i=0, len=capability.layers.length; i<len; i+=1) { 
    var layerObj = capability.layers[i]; 
    if (layerObj.name === filedata) { 
        map.zoomToExtent(OpenLayers.Bounds.fromArray(layerObj.llbbox)); 
        break; 
    } 
}
И огнежук сказал что response is not defined. Я неверное что то сделал. Ссылка вроде та, по крайней мере если просто ввести ее в адресную строку то капабилитиес вернется.

И еще пожайста я хотел уточни по формулировке. Если я делаю слой на геосервере из постгис таблицы. То что это будет wms слой или векторный? Заранее извините за глупый вопрос.

На стокекчендже говорят что из wms вообще никак не получить bbox. Нужно создавать wfs и использовать функцию getDataExtent(). По какому пути все таки идти?

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

Re: Центр слоя

Сообщение Denis Rykov » 18 май 2012, 12:39

Данные PostGIS таблицы можно опубликовать как растр (WMS) и как вектор (WFS). Не уверен, что нельзя обойтись без WFS. Уберите пробел перед точкой:

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

response .capability
Spatial is now, more than ever, just another column- The Geometry Column.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Центр слоя

Сообщение kliver » 18 май 2012, 12:46

Но ваш пример про капабилитес работает и с вмс?

Пробел уже убран.

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

Re: Центр слоя

Сообщение Denis Rykov » 18 май 2012, 12:57

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

success: function(e){
        console.log(e);
        response = wms.read(e.responseText);
    }
Посмотрите в фаербаге что записано в свойстве responseText объекта e и выложите куда-нибудь текст того, что возвращает GetCapabilities.
Spatial is now, more than ever, just another column- The Geometry Column.

kliver
Участник
Сообщения: 83
Зарегистрирован: 19 мар 2011, 18:15
Репутация: 0

Re: Центр слоя

Сообщение kliver » 18 май 2012, 13:14

http://ifolder.ru/30560624

В геткапабилитиес тоже самое.

Ответить

Вернуться в «Веб-картография»

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

Сейчас этот форум просматривают: Ahrefs [Bot] и 9 гостей