Obtenir lat/long, compte tenu des point, la distance et le relèvement
Donné un point existant en lat/long, la distance (en KM) et le palier (en degrés converti en radians), je voudrais calculer la nouvelle lat/long. Cette site les cultures en place, encore et encore, mais j'ai juste ne peut pas obtenir la formule de travailler pour moi.
Les formules que de prendre le lien ci-dessus sont:
lat2 = asin(sin(lat1)*cos(d/R) + cos(lat1)*sin(d/R)*cos(θ))
lon2 = lon1 + atan2(sin(θ)*sin(d/R)*cos(lat1), cos(d/R)−sin(lat1)*sin(lat2))
La formule ci-dessus est pour MSExcel où-
asin = arc sin()
d = distance (in any unit)
R = Radius of the earth (in the same unit as above)
and hence d/r = is the angular distance (in radians)
atan2(a,b) = arc tan(b/a)
θ is the bearing (in radians, clockwise from north);
Voici le code que j'ai obtenu en Python.
import math
R = 6378.1 #Radius of the Earth
brng = 1.57 #Bearing is 90 degrees converted to radians.
d = 15 #Distance in km
#lat2 52.20444 - the lat result I'm hoping for
#lon2 0.36056 - the long result I'm hoping for.
lat1 = 52.20472 * (math.pi * 180) #Current lat point converted to radians
lon1 = 0.14056 * (math.pi * 180) #Current long point converted to radians
lat2 = math.asin( math.sin(lat1)*math.cos(d/R) +
math.cos(lat1)*math.sin(d/R)*math.cos(brng))
lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(d/R)*math.cos(lat1),
math.cos(d/R)-math.sin(lat1)*math.sin(lat2))
print(lat2)
print(lon2)
- Je obtenir
lat2 = 0.472492248844
lon2 = 79.4821662373
- Quel est le problème?
- Je recevais une réponse qui n'a aucun sens. La raison pour laquelle il n'a pas de sens parce que je n'étais pas la conversion de l'réponses degrés. Le Code a changé et inclus dans le post original comme une modification.
- Il vous suffit de soumettre votre modifier, à titre de réponse, et d'accepter cette réponse, pour le rendre plus clair le fait que vous avez résolu votre problème. Sinon, il en sera de vous pénaliser pour laisser une question en suspens, le rendant légèrement plus susceptibles que les futurs utilisateurs ne sera pas la peine de répondre à vos questions.
- Vous obtiendrez une meilleure précision et des résultats si vous utilisez numpy objets.
- merci pour les conseils.
Vous devez vous connecter pour publier un commentaire.
Nécessaire pour convertir les réponses de radians retour à degrés. Code du travail ci-dessous:
La geopy bibliothèque prend en charge ce:
Trouvé via https://stackoverflow.com/a/4531227/37610
Peut-être un peu tard pour répondre, mais après des tests d'autres réponses, il semble qu'ils ne fonctionnent pas correctement. Voici un code PHP que nous utilisons pour notre système. De travail dans toutes les directions.
Code PHP:
get_gps_coord
ou similaire. Vous n'obtenez pas la distance, vous offre que de la touche func. Mais merci pour cela, c'est exactement ce que je cherchais. De nombreuses recherches de retour calcul de la distance entre coords (faux positifs). Merci!Cette question est connue comme la problème direct dans l'étude de géodésie.
C'est en effet un question populaire et qui est une constante source de confusion. La raison en est que la plupart des gens sont à la recherche pour une simple et directe de réponse. Mais il n'en est aucun, parce que la plupart des gens posent cette question sont fournit pas suffisamment d'informations, simplement parce qu'ils ne sont pas conscients qu':
R
. Voir ici.Par conséquent, il ya beaucoup de différentes hypothèses utilisées dans les différents modèles géométriques qui s'appliquent différemment, en fonction de votre besoin de précision. Donc, pour répondre à la question que vous devez tenir compte de ce que précision vous aimeriez avoir votre résultat.
Quelques exemples:
latitudes
entre0-70 deg
N|S. (La terre est ~appartement de type.)nanometers
[nm].De sorte que vous pouvez avoir beaucoup de choix de l'algorithme à utiliser. En outre, chaque langage de programmation a sa propre implémentation ou "package", multiplié par le nombre de modèles et le modèle de développeurs besoins spécifiques. À toutes fins pratiques, ici, elle est payante à ignorer toute autre langue en dehors
javascript
, car il ressemblent de très près à un pseudo-code, de par sa nature. Ainsi, il peut être facilement converti en une autre langue, avec un minimum de modifications.Puis les modèles principaux sont:
Euclidian/Flat earth model
: bon pour de très courtes distances, en vertu de ~10 kmSpherical model
: bon pour les grandes distances longitudinales, mais avec une petite différence de latitude. Modèle populaire:Ellipsoidal models
: Plus précise à tout lat/lon et de la distance, mais c'est toujours une approximation numérique qui dépendent de la précision dont vous avez besoin. Certains modèles populaires sont:Références:
lon1 et lat1 en degrés
brng = roulement en radians
d = distance en km
R = rayon de la Terre en km
J'ai implémenté un algorithme et la mienne en PHP et comparées elle. Cette version a couru dans environ 50% du temps. Les résultats obtenus ont été identiques, de sorte qu'il semble être mathématiquement équivalentes.
Je n'ai pas testé le code python ci-dessus, donc il peut y avoir des erreurs de syntaxe.
Façon rapide à l'aide de geopy
geopy.distance.distance currently uses geodesic.
geopy Et pour être plus précis, le modèle ellipsoïdal utilisé par défaut est le WGS-84 ellipsoïde, "qui est le plus précis à l'échelle mondiale."J'ai porté à répondre par Brad vanilla JS répondre, avec n Bing maps dépendance
https://jsfiddle.net/kodisha/8a3hcjtd/
En outre, j'ai ajouté geoJSON à l'exportation, de sorte que vous pouvez simplement coller résultant geoJSON pour
http://geojson.io/#map=17/41.89017/12.49171 et de voir les résultats instantanément.
Résultat:
Aussi tard, mais pour ceux qui pourraient trouver cela, vous obtiendrez des résultats plus précis à l'aide de la geographiclib de la bibliothèque. Découvrez la géodésique problème descriptions et les exemples de JavaScript pour une simple introduction à la façon de les utiliser pour répondre à l'objet de la question ainsi que de nombreux autres. Mises en œuvre dans une variété de langues, y compris Python. Beaucoup mieux que de coder votre propre si vous vous souciez de précision; mieux que VincentyDistance dans la précédente "utiliser une bibliothèque" recommandation. La documentation dit: "L'accent est mis sur le retour des résultats précis avec des erreurs à proximité de tour-off (environ 5 à 15 nanomètres)."
Il vous suffit d'échange les valeurs de la atan2(y,x) de la fonction. Pas atan2(x,y)!
J'ai porté le Python, Javascript. Ceci renvoie à un Bing Maps
Location
objet, vous pouvez modifier à tout ce que vous voulez.Math.degrees(lat)
etMath.degrees(lon)
valeurs et de faire avec eux ce que vous avez besoin pour votre application.Ici est une version de PHP basé sur Ed Williams de l'Aviation Formulaire. Le module est traité un peu différent en PHP. Cela fonctionne pour moi.
J'ai porté à la réponse de @David M de java si quelqu'un voulait ça... je ne obtenir une légère différence de 52.20462299620793, 0.360433887489931