dennisx Опубликовано 20 марта, 2011 Поделиться Опубликовано 20 марта, 2011 Я из тех пользователей которые пользуются режимом "север вверху". Считаю его самым оптимальным т.к. он позволяет не только доехать до места но еще и легко понимать где ты в целом находишься не теряя ориентацию в пространстве. (Если это имеет какое-то отношение к этой теме: я пользуюсь htc legend - android 2.2 - недавно обновился до NN5 - и там опять таки не реализована моя идея). На данный момент при использовании этого режима позиционирование карты происходит так: текущее местонахождение ВСЕГДА в центре экрана.Что очевидно не удобно т.к. на экране отображается только очень маленькая часть предстояещего маршрута. Предположим у нас есть вот такой вот маршрут:Вот серия картинок которая иллюстрирует текущее позиционирование:->->->->----------------------------------------------------------------------------------------------------------------------------------------------------------->->->-> Это можно сделать намного лучше: нужно пизиционировать экран так чтобы в него входила максимально возможная часть маршрута + текущее местонахождение должно иметь небольшой отступ от края экрана - пикселов 50 например.В конце поста я подробно опишу простой алгоритм который стоит применить в данной ситуации. Вот серия картинок которая иллюстрирует предлагаемый мной способ позиционирования экрана:->->->->----------------------------------------------------------------------------------------------------------------------------------------------------------->->->-> Что видно из двух серий картинок:- в первом(текущем) варианте мы постоянно видимо очень маленькую часть маршрута в основном только с одним грядущим поворотом. Весь оставшийся маршрут с конечной точкой мы начинаем видеть только с 9-ой картинки - почти в самом конце маршрута.- в первом варианте в случае движения справа налево иконки которые показывают время прибытия и расстояние до конечной точки будут почти полностью закрывать будущий маршрут!- во втором варианте мы видим значительно большую часть маршрута всегда. Весь оставшийся маршрут с конечной точкой мы начинаем видеть уже только с 4-ой - картинки почти в самом начале пути!По моему вывод очевиден - второй вариант значительно превосходит первый по удобству пользования! Описание алгоритма:Дано:- допустим размер экрана у нас: x в ширину и y в высоту.- допустим текущее положение не должно быть ближе к краю экрана чем на B пикселей (B - border)- допустим мы знаем координаты(географические) всех точек маршрута начиная с текущего положения машины: 0..N (а мы их конечно знаем): (lon0, lat0)...(lonN, latN)- мы знаем текущий масштаб - M (а мы его знаем - он сейчас вычисляется от скорости движения на сколько я понял)- необходимо определить координаты(географические) центра экранаЧто делаем:1) вычисляем размеры экрана (x - B ) на (y - B ) в географических координатах при текущем масштабе M (при небольших маштабах погрешность от того что земля не плоская - будет минимальна)допустим получилось (lonM на latM)2) создаем объект "прямоугольник" - rect (условный - суть - 2 пары координат) с обеми парам координат равными (lon0, lat0)3) цикл I от 1 до N по всем точкам маршрута. В нем делаем следующее: - сохраняем текущий прямоугольник в rect_bak - расширяем нашь прямоугольник rect на координату (lonI, latI) - проверяем является ли получившийся прямоугольник rect размерами больше чем (lonM на latM) -- если да тогда: находим пересечение последнего отрезка маршрута с одной из границ прямоугольника размером (lonM на latM), точка пересечения - это наша последняя точка маршрута которая поместится на экран. Расширяем rect_bak на эту координату и записываем это в rect -- если нет тогда: продолжаем цикл.в результате цикла получаем 2 пары координат rect((lonFinal1, latFinal1) и (lonFinal2, latFinal2)) - это координаты прямоугольника центр которого должен быть в центре экрана. Если же помещение этого прямоугольника в центр экрана приводит к тому что текущее положение находится ближе чем B пикселей от края экрана тогда мы должны сдвинуть центр на максимум B/2 пикселей в необходимую(в высоту и/или в ширину) сторону так чтобы текущее положение находилось ровно в B пикселей от края. Что вы думаете об этом? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Заархивировано
Эта тема находится в архиве и закрыта для дальнейших ответов.