Центр слоя
-
- Участник
- Сообщения: 83
- Зарегистрирован: 19 мар 2011, 18:15
- Репутация: 0
Центр слоя
Добрый вечер.
Хочу поинтересоваться, возможно ли используя геосервер и опенлаерс отображать при загрузке страницы центр wms слоя? Этот слой постоянно изменяется, появляются новые полигоны. Как понимаю за это отвечает OpenLayers.Bounds.
Сейчас я их устанавливаю переписыванием значения из геосервера вручную. Можно ли как то автоматизировать этот процесс? Или лишь вручную можно задать максимально возможную границу?
Еще попутно такой вопрос. В qgis я создаю полигоны около Екатеринбурга. У проекта выставлена epsg:900913. Затем сохраняю слой в mif файл и ставлю свою ск. Загружаю файл в postgis в которой так же есть строка с определением моей ск. Далее делаю wms в geoserver из загруженного файла в постгис. В Geoserver так же занесена моя ск. У wms слоя я ставлю epsg:900913. При создании карты средствами Openlayers в свойствах проставляю projection:"EPSG:900913"....и полигоны оказываются в Камеруне. На каком этапе возможна ошибка?
Хочу поинтересоваться, возможно ли используя геосервер и опенлаерс отображать при загрузке страницы центр 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: Центр слоя
По первому вопросу: чтобы вытянуть, допустим, 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.
-
- Участник
- Сообщения: 83
- Зарегистрирован: 19 мар 2011, 18:15
- Репутация: 0
Re: Центр слоя
По второму вопросу я сумбурно конечно спросил, но уже разобрался с ошибкой.
А по первому. Функция getExtent() возвращает тот же самый bbox или это разные вещи?
Просто сейчас пытаюсь сделать так что бы при фильтрации слоя, то есть оставлении на нем только одного полигона карта фокусировалась на нем.
Делаю так
Но ничего не происходит
А по первому. Функция getExtent() возвращает тот же самый bbox или это разные вещи?
Просто сейчас пытаюсь сделать так что бы при фильтрации слоя, то есть оставлении на нем только одного полигона карта фокусировалась на нем.
Делаю так
Код: Выделить всё
ex=layer.getExtent();
zoomToExtent(ex);
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Центр слоя
getExtent же возвращает текущий охват, поэтому смысл ваших действий сводится к тому что вы получаете текущий охват и говорите OL - сделай зум на текущий охват, естественно, ничего не произойдёт. А как фильтрация объектов слоя по вашему должна повлиять на его охват? Ответ - никак. Охват слоя (если мы говорим про WMS) - это его атрибут, который задаётся на этапе его описания на сервере, именно этот атрибут я и предлагал вам получать в предыдущем посте. Если бы у вас был векторный слой, то можно прямо на клиенте получить охват определенного набора объектов, если же слой растровый, то для этого нужно отправить на сервер, например, id объектов, рассчитать bbox, вернуть его клиенту и уже только потом зумить.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 83
- Зарегистрирован: 19 мар 2011, 18:15
- Репутация: 0
Re: Центр слоя
Я записал maxExtent по размеру Свердловской области в настройках map. Потом программно выбираю полигоны которые хочу оставить в слое. И после фильтрации вызываю getExtent и вывожу в алерт. И он изменяется.
Но охват все равно не меняется и остается равным первоначально записаному?
Но охват все равно не меняется и остается равным первоначально записаному?
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Центр слоя
Я чего-то не понимаю, какие полигоны? У вас векторный слой? В первом посте вы написали, что речь идёт о WMS.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 83
- Зарегистрирован: 19 мар 2011, 18:15
- Репутация: 0
Re: Центр слоя
Да WMS слой. На нем полигоны. Я путаюсь в формулировке?
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Центр слоя
А как вы программно выбираете полигоны на WMS-слое?
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 83
- Зарегистрирован: 19 мар 2011, 18:15
- Репутация: 0
Re: Центр слоя
CQL фильтр
Научный руководитель пояснил мне, что getExtent() то что мне нужно. И это наверное я просто ввел вас в заблуждение своими точными вопросами.
Но теперь тогда дело в другом getExtent() возвращает что то неверное. Сначала подумал, что дело в проекции.
и сделал
И это при том что в настройках слоя на геосервере выставлено native srs=70066, declared srs=900913 и задано reproject native to declared.
Но это не дало результатов все равно функция возвращает не те результаты.
Научный руководитель пояснил мне, что getExtent() то что мне нужно. И это наверное я просто ввел вас в заблуждение своими точными вопросами.
Но теперь тогда дело в другом getExtent() возвращает что то неверное. Сначала подумал, что дело в проекции.
и сделал
Код: Выделить всё
projection = new OpenLayers.Projection('EPSG: 70066');
displayProjection = new OpenLayers.Projection('EPSG: 900913');
ex=layer.getExtent().transform(projection, displayProjection);
Но это не дало результатов все равно функция возвращает не те результаты.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Центр слоя
Если у вас нет векторных данных, то единственный способ получить охват - запрашивать его с сервера. Вы пробовали мой пример с GetCapabilities?
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 83
- Зарегистрирован: 19 мар 2011, 18:15
- Репутация: 0
Re: Центр слоя
Да попробовал, но не уверен, что сделал все верно.
И огнежук сказал что response is not defined. Я неверное что то сделал. Ссылка вроде та, по крайней мере если просто ввести ее в адресную строку то капабилитиес вернется.
И еще пожайста я хотел уточни по формулировке. Если я делаю слой на геосервере из постгис таблицы. То что это будет wms слой или векторный? Заранее извините за глупый вопрос.
На стокекчендже говорят что из wms вообще никак не получить bbox. Нужно создавать wfs и использовать функцию getDataExtent(). По какому пути все таки идти?
Код: Выделить всё
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;
}
}
И еще пожайста я хотел уточни по формулировке. Если я делаю слой на геосервере из постгис таблицы. То что это будет wms слой или векторный? Заранее извините за глупый вопрос.
На стокекчендже говорят что из wms вообще никак не получить bbox. Нужно создавать wfs и использовать функцию getDataExtent(). По какому пути все таки идти?
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Центр слоя
Данные PostGIS таблицы можно опубликовать как растр (WMS) и как вектор (WFS). Не уверен, что нельзя обойтись без WFS. Уберите пробел перед точкой:
Код: Выделить всё
response .capability
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 83
- Зарегистрирован: 19 мар 2011, 18:15
- Репутация: 0
Re: Центр слоя
Но ваш пример про капабилитес работает и с вмс?
Пробел уже убран.
Пробел уже убран.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: Центр слоя
Код: Выделить всё
success: function(e){
console.log(e);
response = wms.read(e.responseText);
}
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Участник
- Сообщения: 83
- Зарегистрирован: 19 мар 2011, 18:15
- Репутация: 0
Кто сейчас на конференции
Сейчас этот форум просматривают: Ahrefs [Bot] и 9 гостей