Calculer le point central de plusieurs latitude/longitude paires de coordonnées
Étant donné un ensemble de latitude et de longitude des points, comment puis-je calculer la latitude et la longitude du point central de ce jeu (aka un point qui serait le centre d'une vue sur tous les points)?
EDIT: Python solution que j'ai utilisé:
Convert lat/lon (must be in radians) to Cartesian coordinates for each location.
X = cos(lat) * cos(lon)
Y = cos(lat) * sin(lon)
Z = sin(lat)
Compute average x, y and z coordinates.
x = (x1 + x2 + ... + xn) / n
y = (y1 + y2 + ... + yn) / n
z = (z1 + z2 + ... + zn) / n
Convert average x, y, z coordinate to latitude and longitude.
Lon = atan2(y, x)
Hyp = sqrt(x * x + y * y)
Lat = atan2(z, hyp)
- Quant à votre solution: il est probable que vos erreurs ne pas être trop grands avec votre hypothèse d'une forme sphérique de la terre, mais la terre est mieux décrit comme un ellipsoïde.
- A écrit cela comme une fonction python et partagé, il est gist.github.com/3718961
- Il est très important de noter que cela suppose que vos lat et long sont en radians! J'ai été de me gratter la tête pendant un moment, ne comprenant pas que. Pour convertir en radians de nombre décimal, il faut multiplier la virgule * pi/180. Ensuite, pour convertir de retour de radians en décimal, il faut multiplier par 180/pi. HTH
- Nous allons voir à une forme sphérique de la Terre et de normaliser les distances par rapport à R, du rayon de la Terre. Prendre deux points sur l'Équateur, à l'expression de leurs positions en coordonnées rectangulaires:
P1=(1,0,0)
etP2=(0,1,0)
. Le point central, par votre approche, estPc=(0.5,0.5,0)
et de sa distance au centre de la Terre estd=sqrt(0.5)~0.7
. Est-ce, d'un point de ~1900km sous la surface, exactement ce que vous voulez? - Désolé pour le retard, mais je me demandais, quelles sont les mathématiques derrière cet algorithme, quelqu'un pourrait-il me conseiller certaines lectures où c'est expliqué? Merci!
- Si vous ne l'avez pas déjà fait, consultez le lien dans mon commentaire sous la accepté de répondre à
- Qu'est-ce que
z
, pls? - Fixe python fonction avec ceci les gist. Fonction gère la liste des coordonnées géographiques en degrés.
Vous devez vous connecter pour publier un commentaire.
La simple approche de la juste moyenne est bizarre bord des cas, avec des angles quand ils enrouler à partir de 359' à 0'.
Un beaucoup plus tôt question sur DONC demandé de trouver la moyenne d'une série de boussole angles.
Une extension de l'approche recommandée il y a pour coordonnées sphériques serait:
Merci! Voici une version de C# de l'OP, les solutions à l'aide de degrés. Il utilise la Système.De l'appareil.Emplacement.GeoCoordinate classe
J'ai trouvé ce post très utile donc, voici la solution en PHP. J'ai été en utilisant avec succès, et juste voulu sauver un autre dev certain temps.
Très utile post! J'ai mis en place ce en JavaScript, par la présente, mon code. J'ai utilisé cela avec succès.
Version Javascript de la fonction d'origine
Dans l'intérêt de peut-être sauver quelqu'un d'une ou deux minutes, voici la solution qui a été utilisé en Objective-C au lieu de python. Cette version prend un NSArray de NSValues qui contiennent MKMapCoordinates, qui a été appelé dans ma mise en œuvre:
<GLKit/GLKMath.h>
et l'utilisationGLKMathDegreesToRadians
etGLKMathRadiansToDegrees
très agréable solutions, juste ce dont j'avais besoin pour mon projet swift, voici donc une swift port. merci & voici également une aire de jeux projet:
https://github.com/ppoh71/playgounds/tree/master/centerLocationPoint.playground
Si vous êtes intéressés à obtenir une très simplifiée au 'centre' de points (par exemple, pour simplement le centre d'une carte au centre de votre gmaps polygone), alors voici une approche de base qui a fonctionné pour moi.
Renvoie le milieu lat/lng coordonner pour le centre d'un polygone.
Dans Django c'est trivial (et qui fonctionne vraiment, j'ai eu des problèmes avec un certain nombre de solutions pas correctement le retour négatifs pour la latitude).
Par exemple, disons que vous êtes à l'aide de django-geopostcodes (dont je suis l'auteur).
point
est un DjangoPoint
instance qui peut ensuite être utilisé pour faire des choses telles que de récupérer tous les objets qui sont à moins de 10 km du centre point;Modification de ce raw Python est triviale;
Sous le capot de Django est à l'aide de GEOS - plus de détails au https://docs.djangoproject.com/en/1.10/ref/contrib/gis/geos/
C'est le même que la moyenne pondérée problème où tous les poids sont les mêmes, et il y a deux dimensions.
Trouver la moyenne de toutes les latitudes pour votre centre de la latitude et de la moyenne de toutes les longitudes pour le centre de longitude.
Caveat Emptor: C'est une distance proche du rapprochement et de l'erreur se déchaînent lorsque les écarts à la moyenne sont plus que quelques miles en raison de la courbure de la Terre. Rappelez-vous que les latitudes et les longitudes sont en degrés (pas vraiment une grille).
Si vous souhaitez prendre en compte l'ellipsoïde utilisé, vous pouvez trouver les formules
ici http://www.ordnancesurvey.co.uk/oswebsite/gps/docs/A_Guide_to_Coordinate_Systems_in_Great_Britain.pdf
voir l'Annexe B
Le document contient beaucoup d'autres choses utiles
B
Si vous voulez tous les points pour être visible dans l'image, vous voulez les extrema de la latitude et de la longitude et assurez-vous que votre point de vue comprend les valeurs quelle que soit la bordure que vous voulez.
(À partir de Alnitak réponse, comment calculer les extrema peut être un peu problématique, mais si ils sont quelques degrés de chaque côté de la longitude qui s'enroule autour de vous, vous pourrez appeler le tir et prendre à droite la portée.)
Si vous ne voulez pas fausser quelle que soit la carte que ces points sont sur, puis ajuster la zone de délimitation de la hauteur de sorte qu'il s'adapte à ce que les pixels que vous avez alloué à la vue, mais ne comprend toujours les extrema.
De garder les points centré à l'arbitraire d'un zoom niveau, calculer le centre de la boîte englobante que "s'adapte" les points comme ci-dessus, et de garder ce point au centre de la.
De l'objet en PHP. Compte tenu de tableau de paires de coordonnées, le centre de retours.
Prises idée de #4
Ici est la Version de python pour trouver le point central.
Le lat1 et lon1 sont la latitude et la longitude des listes.
il retuen la latitude et la longitude du point central.
J'ai fait de cette tâche en javascript comme ci-dessous
Comme une appréciation de ce fil, voici ma petite contribution à la mise en œuvre en Ruby, en espérant que je vais sauver quelqu'un a quelques minutes de leur précieux temps: