Как вычислить минимальную высоту для показа линии целиком?

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
Kosmos
Интересующийся
Сообщения: 25
Зарегистрирован: 29 июн 2012, 09:46
Репутация: 0

Как вычислить минимальную высоту для показа линии целиком?

Сообщение Kosmos »

Здравствуйте.
Собственно вот... Я работаю с Google Earth API
Пусть у меня есть координаты линии из трех точек (хотя может быть и из четырех и больше... Так что средняя точка не то что надо)
latitude / longitude
56,1 / 46,1
56,2 / 46,2
56,3 / 46,3

Если я установлю высоту камеры так:

Код: Выделить всё

var lookAt = ge.createLookAt('');
lookAt.setLatitude(56.2);
lookAt.setLongitude(46.2);
lookAt.setRange(5000.0);
То, конечно, увижу всю линию, но слишком далеко, а если так:

Код: Выделить всё

lookAt.setRange(10.0);
то увижу только одну точку.

А как бы подобрать такую минимально нужную высоту, чтобы была видна вся линия? Есть ли какие-то методы, формулы?
Аватара пользователя
novia
Гуру
Сообщения: 2261
Зарегистрирован: 29 апр 2011, 15:06
Репутация: 489
Откуда: Тель-Авив

Re: Как вычислить минимальную высоту для показа линии целико

Сообщение novia »

если известен угол зрения камеры - легко зная протяженность линии вычислить высоту. попробуйте считать этот углол равным 60 градусов.
понравилось? жми палец вверх :!:
Kosmos
Интересующийся
Сообщения: 25
Зарегистрирован: 29 июн 2012, 09:46
Репутация: 0

Re: Как вычислить минимальную высоту для показа линии целико

Сообщение Kosmos »

Верно ли я понял?
Допустим, я вычислил длину линии, пусть это LENGTH
То, минимально нужное расстояние, чтобы увидеть эту линию целиком, вычисляется по формуле: RANGE = LENGTH / ТАНГЕНС(60);?
В общем-то, у меня что-то считается и камера прилетает к центру линии, я даже к RANGE еще 5 прибавляю, но вне поля зрения остаются примерно по 10% от концов линии.

Пользовался учебником по геометрии :)
Кроме того, если дан один из углов, равный 30°, и один катет длиной a, второй катет можно вычислить по формуле тангенсов. Формула для вычисления катета приведена ниже:
tg α = a / b = tg 30°= a / b.
Соответственно, катет a равен: a = b * tg α
<-- Вот отсюда взял. т.е. катет это длина линии LENGTH, если угол обзора камеры 60 градусов, то можно разбить треугольник на два прямоугольных. Получается на поверхности Земли лежит известный катет и к нему прилегает угол в 60 градусов, так как угол обзора камеры (60 градусов) был разбит на половину, и стал 30 градусов
Последний раз редактировалось Kosmos 10 авг 2012, 15:43, всего редактировалось 1 раз.
Аватара пользователя
novia
Гуру
Сообщения: 2261
Зарегистрирован: 29 апр 2011, 15:06
Репутация: 489
Откуда: Тель-Авив

Re: Как вычислить минимальную высоту для показа линии целико

Сообщение novia »

попробуйте уменьшать значение угла при расчете минимального расстояния для просмотра. хотя приведенный метод не обеспечит видимости всей линии всегда. особенно при большой протяженности линий.

попробуйте посоздавать KML графику линий - запоминайте их протяженность и тыкайте в левой части экрана на спике - гугл сам приведет камеру к объекту. после этого запишите расстояние от камеры до поверхности Земли.

повторите несколько раз. если зависимость есть - используйте ее при расчетах.
понравилось? жми палец вверх :!:
Kosmos
Интересующийся
Сообщения: 25
Зарегистрирован: 29 июн 2012, 09:46
Репутация: 0

Re: Как вычислить минимальную высоту для показа линии целико

Сообщение Kosmos »

RANGE = LENGTH / ТАНГЕНС(40);
Вот так сойдет :)
Спасибо за помощь!
Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 1 гость