Рисованные линии кэширования на Android-картах - PullRequest
2 голосов
/ 10 ноября 2011

Я разрабатываю приложение, которое отслеживает линии автомобильных дорог в дополнении Google Maps SDK.

Есть много нарисованных точек, которые непреднамеренно делают Карты очень вялыми для навигации. Похоже, iOS Maps решает эту проблему, поскольку можно нарисовать значительное количество точек без замедления работы карт.

Я начал выборку точек в зависимости от уровня масштабирования. Например. Уровень масштабирования 7 использует и рисует линии для каждой 20-й точки для отслеживания маршрута. Но даже это по-прежнему слишком много очков и заканчивается очень медленным панорамированием и масштабированием.

Два вопроса:

Один: возможно ли определить текущий регион карты, отображаемый в телефоне, и больше не рисовать точки вне экрана?

РЕДАКТИРОВАТЬ - после некоторого начального исследования можно легко обнаружить область отсечения, а не рисовать точки / линии. quickReject - это функция, которую я использовал для этого. С производительностью это не сильно помогает, так как все точки все еще просматриваются, чтобы определить, должны ли они быть нарисованы - я уверен, что это можно оптимизировать.

Два: возможно ли вообще кэшировать, возможно, нарисованный путь (это должно быть сделано для каждого уровня масштабирования, я полагаю, из-за проекции точки?)

1 Ответ

1 голос
/ 10 ноября 2011

Можно ли определить текущую область карты, отображаемую в телефоне, и больше не рисовать точки вне экрана?

Да, вы можете получить проекциючетыре угла вашего экрана:

Projection proj = mapView.getProjection();
GeoPoint topLeft = proj.fromPixels(0, 0);

GeoPoint bottomRight = proj.fromPixels(mapView.getWidth()-1, mapView.getHeight()-1);

double topLat = topLeft.getLatitudeE6()/1E6;
double topLon = topLeft.getLongitudeE6()/1E6;
double bottomLat = bottomRight.getLatitudeE6()/1E6;
double bottomLon = bottomRight.getLongitudeE6()/1E6;

При рендеринге вы должны выбирать только точки, которые лежат в этих границах.

См. Также:

В случае, если вы находитесь на очень высоком уровне масштабирования, см .:

Лично я используюr исключить алгоритмы упрощения , чтобы уменьшить количество точек на прямой траектории.Например, если 20 точек лежат на одной линии, имеет смысл использовать начальную и конечную точки и нарисовать прямую линию.

...