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:
лангольеры под окном жрали время ом-ном-ном
			
						- 
				koma
- Новоприбывший
- Сообщения: 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. Без координат, линеек и прочих заморочек настоящих карт. Он в принципе и создавался для старинных карт без привязки.
			
			
									
						
							лангольеры под окном жрали время ом-ном-ном
			
						- 
				vzik19
- Интересующийся
- Сообщения: 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">, опять иероглифы, у кого как?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей

