2011-07-06 1 views
7

J'ai un ensemble de GPS-Position dans ma base de données. Parce que je veux les dessiner sur une carte je suis tombé sur le "Douglas-Peucker-Algorithm" qui va supprimer des points sur une ligne qui ne sont pas "nécassaires" ...Douglas-Peucker-Algorithm

Mais le partout je cherche, je seulement découvrir l'algorithme pour le pixel X/Y - Coordonnées, et non pour la latitude et la longitude ...

Par conséquent je veux transformer Lat/Long dans une vue "X/Y" bidimensionnelle? Est-ce possible, ou est-ce que je pense «trop compliqué»? :)

http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm

+0

Avez-vous été en mesure de trouver une solution? –

Répondre

2

Si vous pouvez supposer que le GPS n'a pas été en mouvement des milliers de kilomètres, et vous n'êtes pas trop près du pôle nord/sud, vous pouvez approximer coordonnées X/Y en kilomètres en multipliant la latitude et la longitude par une constante. Latitude est toujours la même quantité de km par degré (environ 10000 km est de 90 degrés allant de l'équateur à l'un des pôles). Pour la longitude, multipliez par le même nombre de fois cos(latitude).

Il n'est cependant pas beaucoup plus difficile de calculer les positions 3D à partir de la longitude/latitude: Voir this wikipedia article sur les coordonnées sphériques comment faire cela. azimut/élévation sont la longitude/latitude. Ceci est encore une approximation car vous prenez la distance en ligne droite, plutôt que de suivre la surface de la terre, mais pour votre application, je ne peux pas imaginer que ce soit un problème.

Oh, et merci pour le lien vers l'algo de Douglas Peucker ... Je vais essayer dans un autre domaine de problème.

1

Cela dépend de ce que vous voulez qu'une "ligne droite" soit. Si vous voulez une ligne droite sur une carte, alors vous devez convertir vos coordonnées lat/long en utilisant la projection correcte (probablement le Mercator projection, mais il y a un full list on Wikipedia). Cependant, si vous cherchez la ligne la plus droite sur la surface (c'est-à-dire qui coïncide avec great circle), vous ne devriez pas avoir à appliquer de transformation à vos valeurs lat/long.

0

J'ai demandé this question il y a quelque temps, et la réponse que j'ai obtenue m'a permis d'écrire une implémentation en Java pour this project. Il est dans EarthGeometry.java