Перейти к публикации

Позиционирование карты при режиме "Север вверху" (скриншоты + описание) - Предложение по улучшению юзабилити.


Рекомендованные сообщения

Я из тех пользователей которые пользуются режимом "север вверху". Считаю его самым оптимальным т.к. он позволяет не только доехать до места но еще и легко понимать где ты в целом находишься не теряя ориентацию в пространстве.

(Если это имеет какое-то отношение к этой теме: я пользуюсь htc legend - android 2.2 - недавно обновился до NN5 - и там опять таки не реализована моя идея).

 

На данный момент при использовании этого режима позиционирование карты происходит так: текущее местонахождение ВСЕГДА в центре экрана.

Что очевидно не удобно т.к. на экране отображается только очень маленькая часть предстояещего маршрута.

Предположим у нас есть вот такой вот маршрут:

post-233361-1300630055,33_thumb.png

Вот серия картинок которая иллюстрирует текущее позиционирование:

post-233361-1300630066,7.png->post-233361-1300630070,71.png->post-233361-1300630110,26.png->post-233361-1300630114,06.png->post-233361-1300630117,97.png

----------------------------------------------------------------------------------------------------------------------------------------------------------

post-233361-1300630122,26.png->post-233361-1300630127,05.png->post-233361-1300630130,69.png->post-233361-1300630134,9.png->post-233361-1300630138,53.png

 

Это можно сделать намного лучше:

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

текущее местонахождение должно иметь небольшой отступ от края экрана - пикселов 50 например.

В конце поста я подробно опишу простой алгоритм который стоит применить в данной ситуации.

 

Вот серия картинок которая иллюстрирует предлагаемый мной способ позиционирования экрана:

post-233361-1300630468,05.png->post-233361-1300630472,61.png->post-233361-1300630477,1.png->post-233361-1300630482,29.png->post-233361-1300630486,06.png

----------------------------------------------------------------------------------------------------------------------------------------------------------

post-233361-1300630489,88.png->post-233361-1300630494,11.png->post-233361-1300630499,3.png->post-233361-1300630503,37.png->post-233361-1300630508,97.png

 

Что видно из двух серий картинок:

- в первом(текущем) варианте мы постоянно видимо очень маленькую часть маршрута в основном только с одним грядущим поворотом. Весь оставшийся маршрут с конечной точкой мы начинаем видеть только с 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 пикселей от края.

 

 

Что вы думаете об этом?

Изменено пользователем dennisx
Ссылка на комментарий
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...