2010-08-02 6 views
2

Je suis en train d'écrire une application qui doit tracer un "itinéraire" composé de beaucoup de points GPS (long + lat). Les points sont proches les uns des autres et ne suivent pas les routes, le simple fait de tracer une ligne entre chaque point est idéal.Android tracer un chemin sur une mapView à partir d'une grande quantité de points de longitude/latitude

La mise en œuvre actuelle que j'ai est très lente que je suis en boucle sur toutes les coordonnées GPS et en créant un nouveau point et overlayitem dans une superposition détaillée. Cela prend environ 20 secondes pour charger tous ces points et les dessiner sur la carte. Existe-t-il un moyen de construire une série de lignes ou de pointer à partir des coordonnées GPS et de les dessiner sur la carte?

Exemple de mise en œuvre actuelle:

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); 

Merci à l'avance, espérons que je l'ai expliqué assez bien.

Répondre

3

Vérifiez ma réponse avec exemple de code ici:

How to draw a path on a map using kml file?

Cet exemple parse un fichier KML (format XML fourni par Google Maps ou Google Earth pour le calcul d'itinéraire) et dessine des points géographiques sur la carte . Si vous avez déjà une liste de points géographiques, vous pouvez simplement regarder la méthode drawPath(); et ajustez la façon dont vous lui passez les paramètres des coeurs de géo (je l'ai encapsulé dans un simple haricot que j'ai nommé NavigationDataSet).

+0

Merci, il a fallu quelques modifications, mais j'ai réussi à le faire fonctionner, merci. – stealthcopter

3

Ce que vous faites n'est pas tout à fait clair car je ne suis pas sûr de la façon dont itemizedOverlay dessine entre les points. Mais je parie que le problème principal est que vous utilisez un tas de OverlayItems quand il serait beaucoup plus rapide d'ignorer entièrement cette partie et de surcharger la méthode draw() de itemizedOverlay. Je l'ai déjà fait et ça marche plutôt bien pour le dessin au trait. Le pseudo-code de base est:

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 

Depuis la vitesse est une préoccupation, assurez-vous de créer les objets de peinture dans le constructeur de la ItemizedOverlay; ils peuvent être réutilisés autant que vous le souhaitez.

Notez également que vous utilisez addOverlay() comme illustré dans the Hello, MapView demo. Le seul problème avec l'utilisation de cela est qu'ils appellent populate() chaque fois que vous ajoutez un élément; Si vous ajoutez un tas de points, il est préférable d'ajouter un tas de superpositions à la fois, puis appelez populate() à la fin.

+0

Malheureusement, je ne peux pas choisir les deux réponses comme correctes, mais cette information m'a aussi été utile, merci :) – stealthcopter

Questions connexes