Je souhaite trouver une cible inconnue (coordonnées de latitude et de longitude). Il y a 3 points connus (paires de coordonnées de latitude et de longitude) et pour chaque point, une distance en kilomètres de l'emplacement cible. Comment puis-je calculer les coordonnées de l'emplacement cible?
Par exemple, disons que j'ai les points de données suivants
37.418436,-121.963477 0.265710701754km
37.417243,-121.961889 0.234592423446km
37.418692,-121.960194 0.0548954278262km
Ce que j'aimerais, c'est quel est le calcul pour une fonction qui prend cela en entrée et renvoie 37.417959, -121.961954 en sortie.
Je comprends comment calculer la distance entre deux points, à partir de http://www.movable-type.co.uk/scripts/latlong.html Je comprends le principe général voulant qu’avec trois cercles comme celui-ci, vous obtenez exactement un point de chevauchement. Ce qui me manque, c'est le calcul nécessaire pour calculer ce point avec cette entrée.
Réponses:
Après quelques recherches sur Wikipedia et la même question / réponse sur StackOverflow , je me suis dit que j'essaierais de tenter ma chance et tenterais de combler les lacunes.
Tout d’abord, je ne sais pas où vous avez obtenu la sortie, mais cela semble être faux. J'ai tracé les points dans ArcMap, les ai mis en mémoire tampon aux distances spécifiées, puis je me suis rendu intersection sur les tampons, puis j'ai capturé le sommet de l'intersection pour obtenir les solutions. Votre sortie proposée est le point en vert. J'ai calculé la valeur dans la zone de légende, qui correspond à environ 3 mètres de ce qu'ArcMap a donné pour la solution dérivée de l'intersection.
Les maths sur la page Wikipédia ne sont pas si mauvaises, il suffit de convertir vos coordonnées géodésiques en ECEF cartésien, que vous pouvez trouver ici . les termes a / x + h peuvent être remplacés par le rayon de la sphère automatique si vous n'utilisez pas d'ellipsoïde.
Le plus simple est probablement de vous donner un code bien documenté (?), Donc le voici en python
la source
Je ne suis pas sûr d'être naïf, mais si vous tamponnez chaque point en fonction de sa taille, puis que vous croisez les trois cercles, vous obtiendrez le bon emplacement?
Vous pouvez calculer l'intersection à l'aide d'API spatiales. Exemples:
la source
Les remarques suivantes utilisent la géométrie planarithmique (c’est-à-dire que vous devez projeter vos coordonnées dans un système de coordonnées local approprié).
Mon raisonnement, avec un exemple concret en Python, est le suivant:
Prenez 2 des points de données (appelez-les
a
etb
). Appelez notre point ciblex
. Nous connaissons déjà les distancesax
etbx
. Nous pouvons calculer la distance enab
utilisant le théorème de Pythagore.Maintenant, vous pouvez calculer les angles de ces lignes:
Malheureusement, je suis à court de temps pour compléter la réponse pour vous. Cependant, maintenant que vous connaissez les angles, vous pouvez calculer deux emplacements possibles pour
x
. Ensuite, en utilisant le troisième point c, vous pouvez calculer quel emplacement est correct.la source
Cela pourrait fonctionner. Rapidement à nouveau en python, vous pourriez le mettre dans le corps d'une fonction xN, yN = coordonnées des points, r1 & r2 = valeurs du rayon
Les valeurs rx & ry sont les valeurs de retour (qui doivent figurer dans un tableau) des deux points d'intersection d'un cercle, si cela permet de clarifier les choses.
Faites cela pour les 2 premiers cercles, puis à nouveau pour le premier et le dernier. Si l'un des résultats de la première itération est comparable à celui de la seconde (dans une certaine tolérance, probablement), alors vous avez le point d'intersection. Ce n'est pas une bonne solution, surtout quand vous commencez à ajouter plus que des points dans le processus, mais c'est la plus simple que je puisse voir sans aller à la résolution d'un système d'équations.
la source
Vous pouvez utiliser l’API spatiale de postgis (fonctions St_Intersection, St_buffer). Comme vous l'avez remarqué, vous devez également vous rappeler que Postgis utilise des algorithmes planaires, mais que pour les petites zones, l'utilisation d'une projection équi-distante n'introduit pas beaucoup d'erreur.
la source
GEOGRAPHY
type plutôt que leGEOMETRY
type.Faites-le en langage PHP:
la source