OpenLayers: начало работы
- Bzzzuka
- Участник
- Сообщения: 81
- Зарегистрирован: 12 окт 2009, 13:06
- Репутация: 0
- Откуда: Казань
- Контактная информация:
Re: OpenLayers: начало работы
Да шейп с файлом проекции отдельно.. пока не могу посмотреть.. не дома.. Но геосервер кстати эту проекцию не определил
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OpenLayers: начало работы
По цифрам похоже на "Пулково 1942 зона 8", это epsg:28407.
лангольеры под окном жрали время ом-ном-ном
- Bzzzuka
- Участник
- Сообщения: 81
- Зарегистрирован: 12 окт 2009, 13:06
- Репутация: 0
- Откуда: Казань
- Контактная информация:
Re: OpenLayers: начало работы
PROJCS["unnamed",GEOGCS["unnamed",DATUM["D_PULKOVO-1942",SPHEROID["unnamed",6378137,298.257223563]],PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],
PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],
PARAMETER["false_northing",0],UNIT["METER",1]]
UNIT["degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",51],
PARAMETER["scale_factor",1],PARAMETER["false_easting",9500000],
PARAMETER["false_northing",0],UNIT["METER",1]]
- Bzzzuka
- Участник
- Сообщения: 81
- Зарегистрирован: 12 окт 2009, 13:06
- Репутация: 0
- Откуда: Казань
- Контактная информация:
Re: OpenLayers: начало работы
Кстати никто не подскажет адреса wms серверов.. мне нужен 1 со спутниковыми снимками и один с растровой подложкой, на территорию Татарстана.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OpenLayers: начало работы
Проекция - epsg:28409 (9-я зона). Её и вписать в GeoServer'е.
Остальные со своим API и тараканами по использованию - Google, Bing и т.д..
Из новенького - CloudMade. Он тайловый (TMS). Мне нравится, но пока не разбирался в лицензиях.
Он один - VMap0: http://labs.metacarta.com/wms/vmap0Кстати никто не подскажет адреса wms серверов..
Остальные со своим API и тараканами по использованию - Google, Bing и т.д..
Из новенького - CloudMade. Он тайловый (TMS). Мне нравится, но пока не разбирался в лицензиях.
лангольеры под окном жрали время ом-ном-ном
- Bzzzuka
- Участник
- Сообщения: 81
- Зарегистрирован: 12 окт 2009, 13:06
- Репутация: 0
- Откуда: Казань
- Контактная информация:
Re: OpenLayers: начало работы
Подскажите в чем проблема? var bounds и var options не работают
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OpenLayers map preview</title>
<link rel="stylesheet"href="http://localhost:8080/geoserver/www/openlayers/theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="style.css" type="text/css" />
<script src="http://localhost:8080/geoserver/www/openlayers/OpenLayers.js"></script>
<script
src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhR_wWLPFku8Ix9i2SXYRVK3e45q1BQUd_beF8d
tzKET_EteAjPdGDwqpQ'></script>
<script type="text/javascript">
// Задаем глобальные переменные для правильной
// отладки в Firebug
var map = null;
function init(){
map = new OpenLayers.Map('map');
var gmap = new OpenLayers.Layer.Google(
"Google Streets", // the default
{numZoomLevels: 20}
);
var gsat = new OpenLayers.Layer.Google(
"Google Satellite",
{type: G_SATELLITE_MAP, numZoomLevels: 22}
);
var t1_wms = new OpenLayers.Layer.WMS(
"Tatarstan bounds",
"http://localhost:8080/geoserver/wms",
{layers: 'Tatarstan:tatar_region',
transparent: "true",
format: "image/png"},
{isBaseLayer: false, visibility: false}
);
var t2_wms = new OpenLayers.Layer.WMS(
"Tatarstan city",
"http://localhost:8080/geoserver/wms",
{layers: 'Tatarstan:contour_region',
transparent: "true",
format: "image/png"},
{isBaseLayer: false, visibility: false}
);
var bounds = new OpenLayers.Bounds(
9259037.001, 5985816.934,
9705598.098, 6283991.955
);
var options = {
maxExtent: bounds,
maxResolution: 1744.3792851562466,
projection: "EPSG:28409",
units: 'degrees'
};
map.addLayers([gmap, gsat, t1_wms, t2_wms]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomToMaxExtent();
}
</script>
</head>
<body onload="init()">
<h1 id="title">Несколько слоев</h1>
<p>
Демонстрация простейшей картой с несколькими слоями
</p>
<div style="width: 512px; height: 341px; border: 2px solid black;" id="map"></div>
</body>
</html>
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OpenLayers: начало работы
Вы их определяете, но нигде не используете. Попробуйте так:
Замечу, что для EPSG:28409 должны быть untis: 'm'.
Код: Выделить всё
var bounds = new OpenLayers.Bounds(
9259037.001, 5985816.934,
9705598.098, 6283991.955
);
var options = {
maxExtent: bounds,
maxResolution: 1744.3792851562466,
projection: "EPSG:28409",
units: 'degrees'
};
map = new OpenLayers.Map('map', options);
лангольеры под окном жрали время ом-ном-ном
- Bzzzuka
- Участник
- Сообщения: 81
- Зарегистрирован: 12 окт 2009, 13:06
- Репутация: 0
- Откуда: Казань
- Контактная информация:
Re: OpenLayers: начало работы
Спасибо, теперь они заработали но не так как мне нужно.. я хотела что бы в окне карты был только Татарстан но видимо произошел конфликт с гугловскими подложками, теперь он показывает верхнюю часть гугловской подложки и все... вверх вниз не работают, options нужно добавить в каждое объявление слоя?
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OpenLayers: начало работы
Получается, что координаты нужно задавать в WGS84 (что лично меня сильно удивило):
Код: Выделить всё
var bounds = new OpenLayers.Bounds(
47.33, 54.13, 54.27, 56.54
);
лангольеры под окном жрали время ом-ном-ном
- Bzzzuka
- Участник
- Сообщения: 81
- Зарегистрирован: 12 окт 2009, 13:06
- Репутация: 0
- Откуда: Казань
- Контактная информация:
Re: OpenLayers: начало работы
уже лучше.. только вот мои слои теперь не видно потому наверно они куда нить ни туда улетели.. ведь проекция у них явно не wgs, и куда девать вот эту строчку? projection: "EPSG:28409",
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Небольшое отступление о проекциях
Небольшое отступление о проекциях
Поднакопилось типовых вопросов.
WMS сервер (GeoServer, UMN MapServer, etc.)
При создании слоя как правило требуется указать в какой проекции находятся исходные данные (shapefile, БД и т.п.). В дальнейшей работе сервисов эта проекция нигде не проявляет. Типовой запрос на сервер WMS:
включает в себя систему координат (SRS) и охват (BBOX) требуемой карты. (Обратите внимание, что BBOX всегда задается в единицах соответствующей SRS - скажем, для epsg:900913 охват будет задаваться в метрах от -20037508.34 до +20037508.34). Получив запрос, сервер перепроецирует исходные данные в требуемую СК. Т.е. клиенты (OpenLayers, Qgis и т.п.) не знают (и не должны знать!) в какой проекции хранятся данные.
UMN MapServer
В файле настроек дополнительно указывается проекция на уровне MAP:
Она совместно с EXTENT определяет полный охват карты и на то в какой проекции хранятся данные слоев не влияет.
В отличие от GeoServer и UMN MapServer, по-умолчанию, принимает запросы от клиентов только в соответствии со списком проекции, внесенных в wms_srs:
Опять же, к проекции исходных данных этот параметр не имеет отношения.
Общее
Суть выше описанного состоит в том, что:
Когда создается карта:
в свойстве projection указывается проекция, в которой вы хотите увидеть всю карту. При этом, если используются такие слои как Google Maps и OSM (обычно в качестве подложки), то они автоматически и жёстко включают проекцию epsg:900913 (меркатор на сфере).
При подключении слоя WMS указывать проекцию не требуется. Теоретически, она может быть любой (в рамках дозволенного - EPSG, ESRI, SR-ORG и т.д.). OpenLayer делает запрос на сервер WMS в соответствии с проекцией карты. Если map.projection в процессе работы изменяется, то все слои заново запрашиваются на сервере WMS с указанием новой проекции.
Поднакопилось типовых вопросов.
WMS сервер (GeoServer, UMN MapServer, etc.)
При создании слоя как правило требуется указать в какой проекции находятся исходные данные (shapefile, БД и т.п.). В дальнейшей работе сервисов эта проекция нигде не проявляет. Типовой запрос на сервер WMS:
Код: Выделить всё
http://server.com/wms?
SERVICE=WMS&
&SRS=EPSG:4326
&BBOX=-180,-90,180,90
...
UMN MapServer
В файле настроек дополнительно указывается проекция на уровне MAP:
Код: Выделить всё
MAP
EXTENT -180 -90 180 90
PROJECTION
"init=epsg:4326"
END # proj
LAYER
NAME "mylayer"
DATA ...
PROJECTION
"init=epsg:28409"
END # proj
END # layer
END
В отличие от GeoServer и UMN MapServer, по-умолчанию, принимает запросы от клиентов только в соответствии со списком проекции, внесенных в wms_srs:
Код: Выделить всё
WEB
METADATA
"wms_srs" "EPSG:900913 EPSG:4326"
END
END
Общее
Суть выше описанного состоит в том, что:
- Сервер должен знать в какой СК хранятся данные;
- Понимать какую СК от него требуют клиенты;
- Уметь преобразовывать 1-е во 2-е.
Когда создается карта:
Код: Выделить всё
map = new OpenLayers.Map('map',
{projection: "EPSG:28409"}
)
При подключении слоя WMS указывать проекцию не требуется. Теоретически, она может быть любой (в рамках дозволенного - EPSG, ESRI, SR-ORG и т.д.). OpenLayer делает запрос на сервер WMS в соответствии с проекцией карты. Если map.projection в процессе работы изменяется, то все слои заново запрашиваются на сервере WMS с указанием новой проекции.
лангольеры под окном жрали время ом-ном-ном
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OpenLayers: начало работы
Дано хотел высказать мысль про использование параметра 'map' в таком контексте:
Если мы используем параметры, которые отсутствуют у класса, то они будут просто подставлены в строку запроса к серверу:
Т.е. OpenLayers их никак не обрабатывает. Таким же способом я применяю стили SLD и фильтры различных мастей.
Но дело в том, что свойство 'map' в реальности присутствует у прародителя - OpenLayers.Layer. Особо не интересовался его функциональностью, но судя по описанию используется оно не часто. И возможна ситуация когда оно все-таки получит свое значение и работа сервиса WMS прервется. Так что лучше использовать в 'url' полный идентификатор сервиса WMS:
Код: Выделить всё
var basemap = new OpenLayers.Layer.WMS("Boston",
"http://boston.freemap.in/cgi-bin/mapserv?",
{
map: '/www/freemap.in/boston/map/gmaps.map',
...
}
);
Код: Выделить всё
http://gis-lab.info/cgi-bin/mapserv
?SERVICE=WMS
&VERSION=1.1.1
...
&map=/www/freemap.in/boston/map/gmaps.map
Но дело в том, что свойство 'map' в реальности присутствует у прародителя - OpenLayers.Layer. Особо не интересовался его функциональностью, но судя по описанию используется оно не часто. И возможна ситуация когда оно все-таки получит свое значение и работа сервиса WMS прервется. Так что лучше использовать в 'url' полный идентификатор сервиса WMS:
лангольеры под окном жрали время ом-ном-ном
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 01 фев 2011, 16:54
- Репутация: 0
Re: OpenLayers: начало работы
Добрый день!
Передо мной поставлена следующая задача:
Есть картра складского помещения в растре, в разных масштабах.
Могу ли я "порезав" эту карту на тайлы, затем отображать ее в браузере пользователя (естесственно с функциями скроллинга, масштабирования, кликания по объектам и передачи информации о клике для обработки на спец сервера)
если да, то наведите пожалуйста на то, как это можно сделать
(насколько я понимаю, тайлы должны хранится в виде http://myserver.com/map/5/1567.png?)
спасибо за любую помощь!
Передо мной поставлена следующая задача:
Есть картра складского помещения в растре, в разных масштабах.
Могу ли я "порезав" эту карту на тайлы, затем отображать ее в браузере пользователя (естесственно с функциями скроллинга, масштабирования, кликания по объектам и передачи информации о клике для обработки на спец сервера)
если да, то наведите пожалуйста на то, как это можно сделать
(насколько я понимаю, тайлы должны хранится в виде http://myserver.com/map/5/1567.png?)
спасибо за любую помощь!
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: OpenLayers: начало работы
Если вас устроит просмотр больших картинок с зумом, то подойдет IIPImage. Без координат, линеек и прочих заморочек настоящих карт. Он в принципе и создавался для старинных карт без привязки.
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 35
- Зарегистрирован: 10 авг 2010, 15:02
- Репутация: 0
Re: OpenLayers: начало работы
все дело в строкеBzzzuka писал(а):подскажите где здесь может быть ошибка.. карта не отображается.. есть только иконки зумаКод: Выделить всё
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>OpenLayers Example</title> <script src="http://localhost:8080/geoserver/www/openlayers/OpenLayers.js"></script> </head> <body> <div style="width:100%; height:100%" id="map"></div> <script defer="defer" type="text/javascript"> var map = new OpenLayers.Map('map'); var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://localhost:8080/geoserver/wms", {layers: 'Tatarstan:tatar_region'}); map.addLayers([wms]); map.zoomToMaxExtent(); </script> </body> </html>
map.addLayers([wms]);
как раз хотела спросить, почему при указании нескольких wms слоев в квадратных скобках пропадает карта? сейчас подгружаю каждый слой отдельно как
map.addLayer(adm_wms);
Еще у меня вопрос по кодировке, если я использую дополнительные элементы управления из gis-lab.info/qa/openlayers-begin.html, то у меня буквы иероглифами, все читается при изменении кодировки на utf-8, в коде вставляю строчку
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">, опять иероглифы, у кого как?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя