Android рисует путь на картеПросмотр из большого количества точек долготы / широты - PullRequest
3 голосов
/ 02 августа 2010

Я пишу приложение, которое должно нарисовать «маршрут», состоящий из множества точек GPS (long + lat). Точки расположены близко друг к другу и не следуют по дорогам, просто проведите линию между каждой точкой.

Текущая реализация, которую я имею, очень медленная, поскольку я зацикливаюсь на всех координатах GPS и создаю новую точку и оверлейный элемент в подробном наложении. Это займет около 20 секунд, чтобы загрузить все эти точки и нарисовать их в виде карты. Есть ли способ, с помощью которого я могу построить серию линий или точку из координат GPS и нарисовать их на виде карты?

Пример текущей реализации:

 for each set of long+lats // removed to simplify
    point= new GeoPoint(latitude,longitude);
    overlayitem = new OverlayItem(point,"","");
    itemizedOverlay.addOverlay(overlayitem);
 mapOverlays.add(itemizedOverlay);
 mMapController.setCenter(point);

Заранее спасибо, надеюсь, я объяснил это достаточно хорошо.

Ответы [ 2 ]

3 голосов
/ 02 августа 2010

Мне не совсем понятно, что вы делаете, потому что я не уверен, как itemizedOverlay рисует между точками.Но держу пари, что основная проблема в том, что вы используете кучу OverlayItems, когда гораздо быстрее просто пропустить эту часть полностью и переопределить метод itemizedOverlay draw().Я делал это раньше, и это хорошо работает для рисования линий.Основной псевдокод:

create List of GeoPoints
add List to ItemizedOverlay
add a dummy marker to ItemizedOverlay (so that it knows to call `draw()`)
in ItemizedOverlay.draw(), use mapView.getProjection() to map the array of GeoPoints to x,y coords
use Canvas.drawLines() to draw a line between all your points

Поскольку скорость имеет значение, обязательно создайте объекты Paint в конструкторе ItemizedOverlay;они могут использоваться повторно столько раз, сколько вы хотите.

Также как примечание, похоже, что вы используете addOverlay(), как показано в Hello, MapView demo .Единственная проблема с этим - они вызывают populate() каждый раз, когда вы добавляете элемент;если вы добавляете несколько точек, лучше сразу добавить несколько оверлеев, а затем в конце вызвать populate().

3 голосов
/ 02 августа 2010

Проверьте мой ответ с примером кода здесь:

Как нарисовать путь на карте, используя файл kml?

В этом примере анализируются файлы kml (формат xml)как предусмотрено Google Maps или Google Earth для расчета маршрута) и рисует географические точки на карте.Если у вас уже есть список географических точек, вы можете просто посмотреть на метод drawPath ();и настройте способ передачи ему параметров гео-координат (я инкапсулировал его в простой bean-компонент, который я назвал NavigationDataSet).

...