Страница 3 из 6
Re: OpenLayers: начало работы
Добавлено: 04 окт 2010, 12:22
Bzzzuka
Да шейп с файлом проекции отдельно.. пока не могу посмотреть.. не дома.. Но геосервер кстати эту проекцию не определил
Re: OpenLayers: начало работы
Добавлено: 04 окт 2010, 13:02
Mavka
По цифрам похоже на "Пулково 1942 зона 8", это epsg:28407.
Re: OpenLayers: начало работы
Добавлено: 04 окт 2010, 21:44
Bzzzuka
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]]
Re: OpenLayers: начало работы
Добавлено: 04 окт 2010, 22:00
Bzzzuka
Кстати никто не подскажет адреса wms серверов.. мне нужен 1 со спутниковыми снимками и один с растровой подложкой, на территорию Татарстана.
Re: OpenLayers: начало работы
Добавлено: 05 окт 2010, 12:08
Mavka
Проекция - epsg:28409 (9-я зона). Её и вписать в GeoServer'е.
Кстати никто не подскажет адреса wms серверов..
Он один - VMap0:
http://labs.metacarta.com/wms/vmap0
Остальные со своим API и тараканами по использованию -
Google, Bing и т.д..
Из новенького -
CloudMade. Он тайловый (TMS). Мне нравится, но пока не разбирался в лицензиях.
Re: OpenLayers: начало работы
Добавлено: 09 окт 2010, 19:08
Bzzzuka
Подскажите в чем проблема? 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>
Re: OpenLayers: начало работы
Добавлено: 09 окт 2010, 19:24
Mavka
Вы их определяете, но нигде не используете. Попробуйте так:
Код: Выделить всё
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);
Замечу, что для EPSG:28409 должны быть untis: 'm'.
Re: OpenLayers: начало работы
Добавлено: 09 окт 2010, 19:38
Bzzzuka
Спасибо, теперь они заработали но не так как мне нужно.. я хотела что бы в окне карты был только Татарстан но видимо произошел конфликт с гугловскими подложками, теперь он показывает верхнюю часть гугловской подложки и все... вверх вниз не работают, options нужно добавить в каждое объявление слоя?
Re: OpenLayers: начало работы
Добавлено: 09 окт 2010, 20:07
Mavka
Получается, что координаты нужно задавать в WGS84 (что лично меня сильно удивило):
Код: Выделить всё
var bounds = new OpenLayers.Bounds(
47.33, 54.13, 54.27, 56.54
);
Re: OpenLayers: начало работы
Добавлено: 09 окт 2010, 20:23
Bzzzuka
уже лучше.. только вот мои слои теперь не видно потому наверно они куда нить ни туда улетели.. ведь проекция у них явно не wgs, и куда девать вот эту строчку? projection: "EPSG:28409",
Небольшое отступление о проекциях
Добавлено: 10 окт 2010, 14:51
Mavka
Небольшое отступление о проекциях
Поднакопилось типовых вопросов.
WMS сервер (GeoServer, UMN MapServer, etc.)
При создании слоя как правило требуется указать в какой проекции находятся исходные данные (shapefile, БД и т.п.). В дальнейшей работе сервисов эта проекция нигде не проявляет. Типовой запрос на сервер WMS:
Код: Выделить всё
http://server.com/wms?
SERVICE=WMS&
&SRS=EPSG:4326
&BBOX=-180,-90,180,90
...
включает в себя систему координат (SRS) и охват (BBOX) требуемой карты. (Обратите внимание, что BBOX всегда задается в единицах соответствующей SRS - скажем, для epsg:900913 охват будет задаваться в метрах от -20037508.34 до +20037508.34). Получив запрос, сервер перепроецирует исходные данные в требуемую СК. Т.е. клиенты (OpenLayers, Qgis и т.п.) не знают (и не должны знать!) в какой проекции хранятся данные.
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
Она совместно с EXTENT определяет полный охват карты и на то в какой проекции хранятся данные слоев не влияет.
В отличие от GeoServer и UMN MapServer, по-умолчанию, принимает запросы от клиентов только в соответствии со списком проекции, внесенных в wms_srs:
Код: Выделить всё
WEB
METADATA
"wms_srs" "EPSG:900913 EPSG:4326"
END
END
Опять же, к проекции исходных данных этот параметр не имеет отношения.
Общее
Суть выше описанного состоит в том, что:
- Сервер должен знать в какой СК хранятся данные;
- Понимать какую СК от него требуют клиенты;
- Уметь преобразовывать 1-е во 2-е.
OpenLayers
Когда создается карта:
Код: Выделить всё
map = new OpenLayers.Map('map',
{projection: "EPSG:28409"}
)
в свойстве projection указывается проекция, в которой вы хотите увидеть всю карту. При этом, если используются такие слои как Google Maps и OSM (обычно в качестве подложки), то они автоматически и жёстко включают проекцию epsg:900913 (меркатор на сфере).
При подключении слоя WMS указывать проекцию не требуется. Теоретически, она может быть любой (в рамках дозволенного - EPSG, ESRI, SR-ORG и т.д.). OpenLayer делает запрос на сервер WMS в соответствии с проекцией карты. Если map.projection в процессе работы изменяется, то все слои заново запрашиваются на сервере WMS с указанием новой проекции.
Re: OpenLayers: начало работы
Добавлено: 04 ноя 2010, 15:28
Mavka
Дано хотел высказать мысль про использование параметра 'map' в таком контексте:
Код: Выделить всё
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
Т.е. OpenLayers их никак не обрабатывает. Таким же способом я применяю стили SLD и фильтры различных мастей.
Но дело в том, что свойство 'map' в реальности присутствует у прародителя -
OpenLayers.Layer. Особо не интересовался его функциональностью, но судя по описанию используется оно не часто. И возможна ситуация когда оно все-таки получит свое значение и работа сервиса WMS прервется. Так что лучше использовать в 'url' полный идентификатор сервиса WMS:
Re: OpenLayers: начало работы
Добавлено: 01 фев 2011, 17:28
koma
Добрый день!
Передо мной поставлена следующая задача:
Есть картра складского помещения в растре, в разных масштабах.
Могу ли я "порезав" эту карту на тайлы, затем отображать ее в браузере пользователя (естесственно с функциями скроллинга, масштабирования, кликания по объектам и передачи информации о клике для обработки на спец сервера)
если да, то наведите пожалуйста на то, как это можно сделать
(насколько я понимаю, тайлы должны хранится в виде
http://myserver.com/map/5/1567.png?)
спасибо за любую помощь!
Re: OpenLayers: начало работы
Добавлено: 02 фев 2011, 13:09
Mavka
Если вас устроит просмотр больших картинок с зумом, то подойдет
IIPImage. Без координат, линеек и прочих заморочек настоящих карт. Он в принципе и создавался для старинных карт без привязки.
Re: OpenLayers: начало работы
Добавлено: 01 мар 2011, 15:04
vzik19
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">, опять иероглифы, у кого как?