градусы из MousePosition в OL
- 
				Artem
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 01 сен 2010, 05:59
- Репутация: 0
градусы из MousePosition в OL
Добрый день.
в OpenLayers есть метод new OpenLayers.Control.MousePosition(), прекрасно работает, только вот проекция у меня не EPSG:4326, поэтому координаты показывает в метрах. Вопрос: можно ли заставить этот метод отдавать координаты в классическом виде (градусы-минуты-секунды)?
Спасибо за внимание.
			
			
									
						
										
						в OpenLayers есть метод new OpenLayers.Control.MousePosition(), прекрасно работает, только вот проекция у меня не EPSG:4326, поэтому координаты показывает в метрах. Вопрос: можно ли заставить этот метод отдавать координаты в классическом виде (градусы-минуты-секунды)?
Спасибо за внимание.
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: градусы из MousePosition в OL
Вероятно, для этого нужно указать displayProjection в свойствах контроллера.
			
			
									
						
							лангольеры под окном жрали время ом-ном-ном
			
						- 
				Artem
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 01 сен 2010, 05:59
- Репутация: 0
Re: градусы из MousePosition в OL
Так?
Или надо в здесь указывать?
Не работает, видимо чего-то недопонял. Может поправит кто? Не совсем понятна логика transform
			
			
													Код: Выделить всё
map.addControl(new OpenLayers.Control.MousePosition({numDigits: 4, displayProjection: new OpenLayers.Projection.transform(new OpenLayers.Projection("EPSG:3576"), new OpenLayers.Projection("EPSG:4326"))}));Код: Выделить всё
var options = {
	projection: new OpenLayers.Projection("EPSG:4326"),
	displayProjection: new OpenLayers.Projection.transform(new OpenLayers.Projection("EPSG:3576"), new OpenLayers.Projection("EPSG:4326")),
	maxExtent: new OpenLayers.Bounds(-1852750, -3935945, 1482369, -727819)
};
					Последний раз редактировалось Artem 22 сен 2010, 16:28, всего редактировалось 1 раз.
									
			
						
										
						- 
				Artem
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 01 сен 2010, 05:59
- Репутация: 0
Re: градусы из MousePosition в OL
Код: Выделить всё
      <script defer="defer" type="text/javascript">
	var lat = -2330945; 
	var lon = -205335;
	var zoom = 0;
	var map, layer;
	var options = 
	{
		displayProjection: new OpenLayers.Projection.transform(new OpenLayers.Projection("EPSG:3576"), new OpenLayers.Projection("EPSG:4326")),
		numDigits: 4
	};
        var map = new OpenLayers.Map('map');
        var wms = new OpenLayers.Layer.WMS(
		"WMS",
		"http://XX.XX.XX.XX/cgi-bin/mapserv.exe?map=/ms4w/apps/map/map_wms.map&layer=sub",
		{layers: 'sub'},
		{
			maxExtent: new OpenLayers.Bounds(-1852750, -3935945, 1482369, -727819), 
			maxResolution: 'auto', 
			projection:"EPSG:3576",
			units: "m",
		}
		);
        map.addLayer(wms);
	map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);
	map.addControl(new OpenLayers.Control.MousePosition({numDigits: 4, displayProjection: new OpenLayers.Projection.transform(new OpenLayers.Projection("EPSG:3576"), new OpenLayers.Projection("EPSG:4326"))}));
map.addControl(new OpenLayers.Control.MousePosition(options));
        map.zoomToMaxExtent();
      </script>
- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: градусы из MousePosition в OL
Вот это ж надо так самого себя подставить. Битый час пытался заставить его работать. А всего то надо было вспомнить то, о чем сам же недавно писал.
Скачиваете proj4js.
Указываете проекцию:
И все работает. Проверено.
			
			
									
						
							Скачиваете proj4js.
Указываете проекцию:
Код: Выделить всё
map.addControl(
    new OpenLayers.Control.MousePosition({
        displayProjection: new OpenLayers.Projection('EPSG:4326')
    })
); лангольеры под окном жрали время ом-ном-ном
			
						- 
				Artem
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 01 сен 2010, 05:59
- Репутация: 0
Re: градусы из MousePosition в OL
Спасибо, работает, только всё равно выдаёт десятичные градусы, чтоб выдавать градусы-минуты-секунды пришлось вбить такой костыль:
Логика такая: подключаю "MousePosition", делаю "displayProjection: new OpenLayers.Projection('EPSG:4326')", получаю, соответственно, значения в градусах и при помощи самописной функции преобразую их в читаемый вид. Далее по "map.events.register" выгружаю эту информацию в новый слой. Теперь вопрос такой: возможно ли более изящное решение? 
			
			
									
						
										
						Код: Выделить всё
	function TransformDegree()
	{
		var degree = OpenLayers.Util.getElement("controlmouse").innerHTML;
		var arr_deg=degree.split(', ');
		return 'с.ш.'+Math.floor(arr_deg[1])+'°'+Math.floor((arr_deg[1]-Math.floor(arr_deg[1]))*60)+'\''+((((arr_deg[1]-Math.floor(arr_deg[1]))*60)-Math.floor((arr_deg[1]-Math.floor(arr_deg[1]))*60))*60).toFixed(4)+'\'\''+
'в.д.'+Math.floor(arr_deg[0])+'°'+Math.floor((arr_deg[0]-Math.floor(arr_deg[0]))*60)+'\''+((((arr_deg[0]-Math.floor(arr_deg[0]))*60)-Math.floor((arr_deg[0]-Math.floor(arr_deg[0]))*60))*60).toFixed(4)+'\'\'';
	}
map.addControl(new OpenLayers.Control.MousePosition(options));
map.events.register("mousemove", map, function(e) {var position = this.events.getMousePosition(e); OpenLayers.Util.getElement("coords").innerHTML = TransformDegree();});

- Mavka
- Гуру
- Сообщения: 2060
- Зарегистрирован: 14 мар 2008, 17:36
- Репутация: 9
Re: градусы из MousePosition в OL
В OpenLayers.Control.MousePosition есть метод formatOutput, который нужно переопределить. На вход он получает один параметр (latlon), а возвращать должен html-код (или просто строку текста).
			
			
									
						
							лангольеры под окном жрали время ом-ном-ном
			
						- 
				Artem
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 01 сен 2010, 05:59
- Репутация: 0
Re: градусы из MousePosition в OL
Ага, так лучше, спасибо.
			
			
									
						
										
						- 
				dravig
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: градусы из MousePosition в OL
А каким образом можно загнать градусные значения широты и долготы (исходные координаты опять таки в метрах) в переменные?
			
			
									
						
										
						- 
				dravig
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: градусы из MousePosition в OL
И почти сразу решил проблему вот так:
var source = new Proj4js.Proj('EPSG:4326');
var dest = new Proj4js.Proj('EPSG:3395');
var p = new Proj4js.Point(70,70);
Proj4js.transform(source, dest, p);
			
			
									
						
										
						var source = new Proj4js.Proj('EPSG:4326');
var dest = new Proj4js.Proj('EPSG:3395');
var p = new Proj4js.Point(70,70);
Proj4js.transform(source, dest, p);
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 14 гостей
