2011-04-09 5 views
1

Salut les amis dans mon application gps j'ai converti le point Geo en pixels. J'ai deux points de géo donc je convertis ces deux points en pixels maintenant je prends différent de ces deux points de pixels et je veux convertir cette différence en kilomètresje veux convertir les pixels google map en kilomètres

+0

Je ne comprends pas. pouvez-vous mapper chaque pixel à sa latitude et sa longitude? si vous le pouvez, alors la formule de Haversine peut vous donner une distance assez précise. –

+0

je veux cartographier les pixels en kilomètres .. –

+0

oui, mais vous devez savoir comment la distance en pixels correspond à des kilomètres, et les données de géolocalisation sont votre clé. –

Répondre

3

Je ne recommanderais pas d'utiliser les pixels de vue pour faire le calcul de la distance . Si vous avez les points géographiques, vous devriez les utiliser. Tout se résume à un calcul géodésique. Et la précision dépend de la façon dont vous modélisez la terre. Ce que vous voulez est d'utiliser great circle lines géodésique pour effectuer des calculs de distance.

Si vous le modèle de la terre comme une sphère (en utilisant la loi des cosinus):

double earthAverageRadius = 6378137; //Average mean in meters when modeling the world as a sphere 
double angle = Math.acos(Math.sin(point1.x) * Math.sin(point2.x) 
        + Math.cos(point1.x) * Math.cos(point2.x) * Math.cos(point1.y- point2.y)); 
double distance = angle * pi * earthAverageRadius; // distance in metres 

je recommande également à la recherche dans le Haversine formula, qui est numériquement plus stable. En utilisant la formule de Haversine, l'angle calculé dans le code précédent serait:

double a = Math.pow(Math.sin((point2.x-point1.x)/2.0), 2.0) 
       + Math.cos(point1.x) * Math.cos(point2.x) * Math.pow(Math.sin((point2.y-point1.y)/2.0), 2.0); 
double angle = 2 * Math.asin(Math.min(1.0, Math.sqrt(a))); 

Si vous voulez une plus grande précision (pour les grandes distances), vous devriez envisager la modélisation de la terre comme un ellipsoïde, bien que les calculs de cette situation sont considérablement Plus fort.

EDIT: Notez également que ce qui précède ne tient que si vous donnez la longitude et la latitude en radians. Donc, vous devrez d'abord faire cette conversion.

+0

c'est de la haversine, avec un 'n', du 'demi-versus'. –

+0

Bonne prise. Correction d'une faute de frappe. – Tovi7

+0

Ou utilisez juste Location.distanceTo (Location) – Snake

Questions connexes