Étant donné un ensemble de points de latitude et de longitude, comment puis-je calculer la latitude et la longitude du point central de cet ensemble (c'est-à-dire un point qui centrerait une vue sur tous les points)?
EDIT: solution Python que j'ai utilisée:
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)
z
, pls?Réponses:
L'approche simple qui consiste simplement à les calculer en moyenne a des cas de bord étranges avec des angles lorsqu'ils passent de 359 'à 0'.
Une question beaucoup plus ancienne sur le SO demandait de trouver la moyenne d'un ensemble d'angles de boussole.
Une extension de l'approche recommandée ici pour les coordonnées sphériques serait:
la source
Merci! Voici une version C # des solutions OP utilisant des degrés. Il utilise la classe System.Device.Location.GeoCoordinate
la source
J'ai trouvé ce post très utile alors voici la solution en PHP. Je l'ai utilisé avec succès et je voulais juste gagner du temps pour un autre développeur.
la source
Message très utile! J'ai implémenté cela en JavaScript, par la présente mon code. J'ai utilisé cela avec succès.
la source
Version Javascript de la fonction d'origine
la source
Dans l'intérêt d'éventuellement gagner une minute ou deux à quelqu'un, voici la solution qui a été utilisée en Objective-C au lieu de python. Cette version prend un NSArray de NSValues qui contient MKMapCoordinates, ce qui a été demandé dans mon implémentation:
la source
<GLKit/GLKMath.h>
et utilisezGLKMathDegreesToRadians
etGLKMathRadiansToDegrees
de très belles solutions, exactement ce dont j'avais besoin pour mon projet rapide, alors voici un portage rapide. merci et voici aussi un projet de terrain de jeu: https://github.com/ppoh71/playgounds/tree/master/centerLocationPoint.playground
la source
Si vous souhaitez obtenir un «centre» des points très simplifié (par exemple, pour simplement centrer une carte au centre de votre polygone gmaps), alors voici une approche de base qui a fonctionné pour moi.
Cela renvoie la coordonnée lat / lng du milieu pour le centre d'un polygone.
la source
Dans Django, c'est trivial (et fonctionne en fait, j'ai eu des problèmes avec un certain nombre de solutions qui ne renvoyaient pas correctement les négatifs pour la latitude).
Par exemple, disons que vous utilisez des django-geopostcodes (dont je suis l'auteur).
point
est unePoint
instance de Django qui peut ensuite être utilisée pour faire des choses telles que récupérer tous les objets qui sont à moins de 10 km de ce point central;Changer cela en Python brut est trivial;
Sous le capot, Django utilise GEOS - plus de détails sur https://docs.djangoproject.com/en/1.10/ref/contrib/gis/geos/
la source
Version Java si quelqu'un en a besoin. Les constantes ont défini static pour ne pas les calculer deux fois.
la source
Voici la version Android basée sur la réponse C # de @ Yodacheese utilisant l'API Google Maps:
dans l'application build.gradle, ajoutez:
la source
Implémentation Dart pour Flutter pour trouver le point central pour plusieurs latitude, longitude
importer un package mathématique
Liste de latitude et de longitude
la source
C'est la même chose qu'un problème de moyenne pondérée où tous les poids sont les mêmes et il y a deux dimensions.
Trouvez la moyenne de toutes les latitudes pour votre latitude centrale et la moyenne de toutes les longitudes pour la longitude centrale.
Mise en garde Emptor: Il s'agit d'une approximation de courte distance et l'erreur deviendra indisciplinée lorsque les écarts par rapport à la moyenne sont supérieurs à quelques kilomètres en raison de la courbure de la Terre. N'oubliez pas que les latitudes et les longitudes sont des degrés (pas vraiment une grille).
la source
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 Annexe B
Le document contient de nombreux autres éléments utiles
B
la source
Hors objet en PHP. Compte tenu du tableau de paires de coordonnées, renvoie le centre.
Idée tirée du n ° 4
la source
Voici la version python pour trouver le point central. Les lat1 et lon1 sont des listes de latitude et de longitude. il restaure la latitude et la longitude du point central.
la source
Dart / Flutter Calculer le point central de plusieurs paires de coordonnées latitude / longitude
la source
Si vous voulez que tous les points soient visibles dans l'image, vous voulez les extrema en latitude et longitude et assurez-vous que votre vue inclut ces valeurs avec la bordure que vous voulez.
(D'après la réponse d'Alnitak, la façon dont vous calculez les extrema peut être un peu problématique, mais s'ils sont à quelques degrés de chaque côté de la longitude qui s'enroule, alors vous appellerez la photo et prendrez la bonne plage.)
Si vous ne voulez pas déformer la carte sur laquelle se trouvent ces points, ajustez le rapport hauteur / largeur du cadre de délimitation afin qu'il s'adapte aux pixels que vous avez alloués à la vue tout en incluant toujours les extrema.
Pour garder les points centrés à un niveau de zoom arbitraire, calculez le centre de la zone de délimitation qui "s'adapte juste" aux points comme ci-dessus et conservez ce point comme point central.
la source
J'ai fait cette tâche en javascript comme ci-dessous
la source
En guise d'appréciation pour ce fil, voici ma petite contribution avec l'implémentation en Ruby, en espérant que je ferai gagner à quelqu'un quelques minutes de son temps précieux:
la source
J'ai utilisé une formule que j'ai obtenue de www.geomidpoint.com et j'ai écrit l'implémentation C ++ suivante. Les
array
etgeocoords
sont mes propres classes dont la fonctionnalité doit être explicite.la source