градусы из MousePosition в OL
-
- Интересующийся
- Сообщения: 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 в свойствах контроллера.
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 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 раз.
-
- Интересующийся
- Сообщения: 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')
})
);
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 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-код (или просто строку текста).
лангольеры под окном жрали время ом-ном-ном
-
- Интересующийся
- Сообщения: 29
- Зарегистрирован: 01 сен 2010, 05:59
- Репутация: 0
Re: градусы из MousePosition в OL
Ага, так лучше, спасибо.
-
- Участник
- Сообщения: 54
- Зарегистрирован: 18 мар 2010, 16:58
- Репутация: 0
Re: градусы из MousePosition в OL
А каким образом можно загнать градусные значения широты и долготы (исходные координаты опять таки в метрах) в переменные?
-
- Участник
- Сообщения: 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);
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя