Suite

Calcul d'un point Lat/Lon à partir d'un autre angle de point Lat/Lon


Je dois faire un algorithme :

:

j'ai un point O centre d'un cercle de rayon r, sur ce cercle il y a deux points P1 et P2.

  • Je connais la latitude et la longitude du point O en degrés
  • je connais le rayon r en mètres
  • Je connais la latitude et la longitude de P1 en degrés

Je veux connaître la latitude et la longitude du point P2 sur le même cercle, je connais l'angle une en degrés entre la ligne OP1 et OP2.

Comment résoudre ce problème?

Les points gps O,P1 et P2 sont situés dans le sud de la France.


Le point P1 n'a pas d'importance, si c'est un cercle r sera toujours le même, ceci avec le relèvement thêta et le point d'origine O sont ce qui compte. Pour trouver thêta, trigez simplement votre chemin à partir de votre angle fourni une.

  1. Supposons que votre surface soit un sphère:

    δ = distance r / rayon terrestre (tous deux dans les mêmes unités) lat_P2 = asin(sin lat_O ⋅ cos δ + cos lat_O ⋅ sin δ ⋅ cos θ ) lon_P2 = lon_O + atan((sin θ ⋅ sin δ ⋅ cos lat_O) / (cos δ − sin lat_O ⋅ sin lat_P2))

    Dans la formule ci-dessus, lat, lon et thêta doivent être indiqués en radians. Theta est, comme dans votre exemple, le relèvement dans le sens des aiguilles d'une montre depuis le nord. Utilisez des valeurs absolues si vos coordonnées sont négatives.

    Il s'agit d'une adaptation de l'équation de Haversine, si vous voulez la rechercher. Ce sera aussi précis que le rayon terrestre que vous choisirez.

  2. Supposons que votre surface soit un ellipsoïde:

    Ok, c'est beaucoup plus compliqué, donc je vais juste vous lier à la formule de Vincenty. Vous souhaitez utiliser la formule directe pour trouver votre P2. Les mêmes précautions s'appliquent ici, concernant les coordonnées négatives.


Dans GeoTools, vous pouvez utiliser le GeodeticCalculator pour ce type de calcul :

DefaultGeographicCRS crs = DefaultGeographicCRS.WGS84; GeodeticCalculator calc = new GeodeticCalculator(crs); GeometryFactory geomFactory = new GeometryFactory(); Point point = geomFactory.createPoint(new Coordinate(0.0, 50.0)); calc.setStartingGeographicPoint(point.getX(), point.getY()); //azimut en degrés -180 - 180 double azimut = 90,0 ; //distance en mètres double distance = 5000; calc.setDirection(azimut, distance); Point2D p = calc.getDestinationGeographicPoint(); System.out.println(p);

Comment calculer les coordonnées du satellite (lat, long) en fonction des coordonnées de l'antenne, des angles et de la hauteur du satellite

Étant donné les coordonnées d'une station terrestre (antenne) (en lat,long) et son élévation (El) et son azimut (Az), comment calculer les coordonnées du satellite (lat,long), connu sa hauteur ?

Par souci de simplification, la Terre peut être considérée comme une sphère.

En résumé : j'essaye de calculer les coordonnées du satellite projetées sur la sphère céleste. C'est à dire. c'est la position actuelle de la trajectoire au sol à partir des valeurs du système de coordonnées horizontales et de la position de l'observation.

Le problème peut être montré dans ces deux figures :


J'aimerais savoir comment convertir les données reçues du GNSS en coordonnées longitudinales/latitude/altitude en coordonnées x y z dans carla ? #2737

J'aimerais savoir comment convertir les données reçues du GNSS en coordonnées XYZ dans carla ? y a-t-il un moyen possible de le faire?

Le texte a été mis à jour avec succès, mais ces erreurs se sont produites :

Nous ne sommes pas en mesure de convertir la tâche en problème pour le moment. Veuillez réessayer.

Le problème a été créé avec succès, mais nous ne sommes pas en mesure de mettre à jour le commentaire pour le moment.

Glopezdiest a commenté le 16 avr. 2020

Bonjour @Gilaine. Cela peut certainement être fait, mais si je me souviens bien, il n'y a pas de fonction prédéfinie pour le faire.

Si vous allez dans le fichier OpenDRIVE d'une ville (Unreal/CarlaUE47Content/Carla/Maps/OpenDrive), vous pouvez voir la géoRéférence (C'est comme la 3ème ou 4ème ligne du fichier .xodr).

À partir de là, une certaine géométrie est nécessaire, mais si vous supposez que la carte est plate, les géocoordonnées correspondent aux x et y (évidemment, avec une certaine échelle) et l'altitude n'est que la valeur z.

Gilaine commenté le 27 avr. 2020 •

Bonjour @glopezdiest désolé pour ma réponse tardive je vérifie en ce moment, j'ai trouvé la référence pour le long et le lat
+lat_0=4.90000000000000000e+1 +lon_0=8.00000000000000000e+0 et la valeur que je reçois autour de la latitude = 49.064139
longitude = 8.202199
pouvez-vous me donner plus de précisions comment faire? j'essaie de fusionner les données de différents capteurs, c'est pourquoi je voulais convertir en x y et z.
De plus, l'échelle dont vous parlez est-elle constante ou non?

Glopezdiest a commenté le 28 avr. 2020

Oui, l'échelle est constante. Ce que je voulais dire par là, c'est que le changement de 1 degré de latitude correspondra toujours au même changement de oui.

En gros, vous savez que vous avez subi un certain changement de degrés dans une sphère de la taille de la Terre. Vous devez ensuite calculer ce que signifie ce changement de degré en termes de distance à la surface de la terre.

Mathématiquement parlant, ce serait quelque chose comme ça (ils ne sont pas le résultat exact, certains termes manquent):

y = - (lat-49)*earth_radius (Il suffit de souligner le symbole négatif ici)
x = (lon-8)*rayon_terre

J'aimerais vous aider davantage en vous donnant la formule exacte mais je ne trouve tout simplement pas où je l'ai mis, désolé.

Gilaine a commenté le 29 avr. 2020 •

J'apprécie beaucoup votre aide.

Glopezdiest a commenté le 29 avr. 2020

Quelque chose comme ça ouais. Je recommanderais d'utiliser carla.DebugHelper, qui peint les points dans la simulation, afin que vous puissiez vérifier visuellement s'ils sont corrects

Gilaine a commenté le 11 juin 2020

J'ai essayé de nombreuses équations mais je n'ai toujours pas trouvé @glopezdiest

Gabi Shahmayster a commenté le 15 juin 2020

J'ai essayé de nombreuses équations mais je n'ai toujours pas trouvé @glopezdiest

Salut GILAINE,
Les emplacements de Carla sont définis dans le cadre de référence du moteur irréel, qui est un cadre cartésien gauche, aligné est-sud-haut (vous pouvez facilement le vérifier en observant les valeurs GeoLocation vs. Location d'une position spécifique.

Vous pouvez transformer un emplacement est-sud-haut gaucher en un emplacement est-nord-haut droitier en inversant le signe de la coordonnée y. https://github.com/carla-simulator/ros-bridge/blob/master/carla_ros_bridge/src/carla_ros_bridge/transforms.py#L59.

Vous obtiendrez alors une coordonnée dans le cadre est-nord-up (ENU), avec l'origine du cadre ENU, (0,0,0), située à l'origine géographique de la carte OpenDrive.
Ensuite, vous devez transformer ces coordonnées ENU en coordonnées géographiques.

Pour autant que je sache, un moyen rigoureux serait de transformer les coordonnées ENU en coordonnées centrée-terre-fixe (ECEF), puis de transformer les coordonnées ECEF en coordonnées géographiques.

Gilaine a commenté le 16 juin 2020 •

J'ai écrit quelque chose comme ça, mais je pense que quelque chose ne va toujours pas :

Le géo-référencement dans opendrive :

lat_0=4.90000000000000000e+1
lon_0= - 8.0000000000000000e+0

latitude = 48,791695
longitude = - 8.413367
altitude = 1,376821

lat = np.deg2rad(latitude)
lon = np.deg2rad(longitude)
alt = np.deg2rad(altitude)

x = - math.sin(lon_0)*lat - math.cos(lon_0)*math.sin(lat_0)*lon + math.cos(lon_0)*math.cos(lat_0)*alt

y = math.cos(lon_0)*lat - math.sin(lon_0)*math.sin(lat_0)*lon +math.sin(lon_0)*math.cos(lat_0)*alt

z = math.cos(lat_0)*lon + math.sin(lat_0)*alt

Gabi Shahmayster a commenté le 16 juin 2020 •

@GabiShahmayster
Bonjour Gabi,

J'ai écrit quelque chose comme ça, mais je pense que quelque chose ne va toujours pas :

Le géo-référencement dans opendrive :

lat_0=4.90000000000000000e+1
lon_0=8.000000000000000000e+0

La lecture:

latitude = 48,791695
longitude = 8.413367
altitude = 1,376821

lat = np.deg2rad(latitude)
lon = np.deg2rad(longitude)
alt = np.deg2rad(altitude)

x = - math.sin(lon_0)*lat - math.cos(lon_0)*math.sin(lat_0)*lon + math.cos(lon_0)*math.cos(lat_0)*alt

y = - (math.cos(lon_0)*lat - math.sin(lon_0)*math.sin(lat_0)*lon +math.sin(lon_0)*math.cos(lat_0)*alt)

z = math.cos(lat_0)*lon + math.sin(lat_0)*alt

Tout d'abord, je suis désolé, j'ai probablement mal compris votre question d'origine et j'ai fourni des détails concernant la transformation de l'emplacement de Carla en coordonnées géographiques et non l'inverse.

Commençons par quelque chose de simple.
Les nombres dans votre exemple (latitude = 48.791695, longitude = 8.413367) sont très éloignés de l'origine (environ 37[km], selon https://www.geodatasource.com/distance-calculator. Est-ce un emplacement carla valide, pour ton problème ?

Gilaine a commenté le 16 juin 2020 •

Salut Gabi,
Les valeurs reçues du GNSS dans Carla sont autour de cela dans la ville 3.
latitude = 48.998151
longitude = 8.000191
altitude = 1,225561

Je commence à un point aléatoire de la MAP et ce sont les données que je reçois du GNSS.
quand je fais la conversion, cela me donne comme si c'était des valeurs delta, j'ai essayé de les résumer mais je ne sais pas si c'est correct, dans ce cas la différence entre la vérité terrain et la mesure est grande.
Est-ce que je fais quelque chose de mal?

Gabi Shahmayster a commenté le 16 juin 2020

Salut Gabi,
Les valeurs reçues du GNSS dans Carla sont autour de cela dans la ville 3.
latitude = 48.998151
longitude = 8.000191
altitude = 1,225561

Je commence à un point aléatoire de la MAP et ce sont les données que je reçois du GNSS.
quand je fais la conversion, cela me donne comme si c'était des valeurs delta, j'ai essayé de les résumer mais je ne sais pas si c'est correct, dans ce cas la différence entre la vérité terrain et la mesure est grande.
Est-ce que je fais quelque chose de mal?

J'apprécie beaucoup votre aide vraiment.

Une approximation assez proche (dépend de la précision que vous recherchez et des calculs géodésiques d'OpenDrive) serait de calculer les différences de latitude/longitude, par rapport à l'origine géographique de la carte, les traduire en mètres en utilisant les rayons de courbure de la terre et n'oubliez pas que l'emplacement de Carla -frame frame) est x=est, y=sud, z=up.
Pour votre exemple, cela devrait être :
`
map = api.map #map obtenu par world.get_map()
degrésEnRadians = 1/180.0*np.pi
geolocation_of_map_origin : GeoLocation = map.transform_to_geolocation(Location(0,0,0))
print("GeoLocation d'origine de la carte : <0:s> ".format(str(geolocation_of_map_origin)))

Géolocalisation de l'origine de la carte : Géolocalisation(latitude=49.000000, longitude=8.000000, altitude=0.000000)
True GeoLocation du point de test : GeoLocation(latitude=48.998151, longitude=8.000191, altitude=1.225561)
Rayon de courbure terrestre Nord/Sud = 6371848.628169 [m] | Rayon de courbure terrestre Est/Ouest = 4192434,938469 [m]
delta Nord = -205.626806 | delta Est = 13.975813 | delta Alt = 1,225561
Emplacement estimé de Carla (cadre de moteur non réel) du point de test : Emplacement (x=13.975813, y=205.626801, z=1.225561)
GeoLocation of Estimated Carla Location (pour vérification) : GeoLocation(latitude=48.998153, longitude=8.000191, altitude=1.225561)


À propos de la définition de l'emplacement géographique

Par:

L'insertion d'informations d'emplacement géographique dans un fichier de dessin fait correspondre les points du dessin aux emplacements géographiques à la surface de la Terre.

Les informations d'emplacement géographique dans un fichier de dessin sont construites autour d'une entité appelée marqueur géographique. Le marqueur géographique pointe vers un point de référence dans l'espace modèle qui correspond à un emplacement sur la surface de la terre de latitude et de longitude connues. Le programme capture également la direction du nord à cet endroit. Sur la base de ces informations, le programme peut dériver les coordonnées géographiques de tous les autres points du fichier de dessin.

Généralement, un emplacement géographique est défini par ses coordonnées (par exemple, latitude, longitude et altitude) et le système de coordonnées (par exemple, WGS 84) utilisé pour définir les coordonnées. De plus, les coordonnées d'un emplacement peuvent différer d'un système de coordonnées SIG à un autre. Par conséquent, lorsque vous spécifiez l'emplacement géographique du marqueur géographique, le système capture également les détails du système de coordonnées SIG.

Les dessins CAO sont généralement sans unité et sont dessinés à l'échelle 1:1. Vous êtes libre de décider de l'unité linéaire qu'une unité de dessin représente. Les systèmes SIG, d'autre part, permettent au système de coordonnées de décider des unités linéaires. Afin de mapper les coordonnées CAO aux coordonnées SIG, le système doit interpréter les unités de dessin CAO en termes d'unités linéaires. Le système utilise le paramètre stocké dans la variable système INSUNITS comme mesure linéaire par défaut d'une unité de dessin. Cependant, lorsque vous insérez des informations d'emplacement géographique, vous avez la possibilité de spécifier une mesure linéaire différente (pour une unité de dessin).

Après avoir inséré un marqueur géographique dans un dessin, vous pouvez :

  • Faites en sorte que le programme détermine automatiquement l'angle de la lumière solaire lorsque vous effectuez une simulation du soleil et du ciel (études photométriques).
  • Insérez une carte à partir d'un service de cartes en ligne dans une fenêtre.
  • Réaliser des études d'environnement.
  • Utilisez des marqueurs de position pour marquer des emplacements géographiques et enregistrer des notes connexes.
  • Localisez-vous sur la carte en temps réel sur des systèmes prenant en charge la détection de localisation.
  • Exportez vers AutoCAD Map 3D et attendez-vous à ce que le modèle se positionne automatiquement.
  • Importez des fichiers raster contenant des informations d'emplacement géographique et attendez-vous à ce qu'ils se positionnent automatiquement (cela nécessite AutoCAD Raster Design).

Vous pouvez supprimer les informations d'emplacement géographique d'un fichier de dessin à l'aide de la commande GEOREMOVE. Le marqueur géographique et le système de coordonnées SIG sont supprimés du fichier de dessin. Cependant, les marqueurs de position restent dans le fichier de dessin.


Mesure du point de référence

Une seule mesure d'un point via un appareil GPS grand public est imprécise. Les écarts totalisent plusieurs dizaines de mètres. Grâce à de multiples mesures (scatter-plots) et des améliorations EGNOS sont possibles. Les meilleurs résultats sont obtenus grâce à des appareils GPS différentiels, mais ils sont nettement plus chers.

Des points de référence exacts peuvent également être créés avec des mesures à long terme. Par conséquent, vous avez besoin d'un point déterminable exact sur un champ libre avec une vue libre vers le ciel :

L'horizon doit être inférieur à 10..20° et surtout libre au Sud pour que les satellites EGNOS soient mieux visibles.

Satellite PRN identifiant Position Direction pointant vers la droite Élév. en Allemagne Commenter
Inmarsat AOR-E 120 33 atlantique 15,5° Ouest 195,5° 25..30°
ARTÉMIS 124 37 Afrique 21,5° Est 158,5°
Inmarsat IOR-W 126 39 Afrique 25,0° Est 155° système de test actuellement
Sirius 5 5,0° E 175° depuis fin 2011

Méthode simple

Si votre appareil dispose d'un mode pour simplement enregistrer un point toutes les minutes (certains appareils le font automatiquement s'ils ne sont pas déplacés), vous pouvez simplement poser l'appareil sur le point de référence et le récupérer après 10 heures (tant que la batterie travaux). A partir du fichier journal, vous calculez la valeur moyenne. Avec cela, vous avez corrigé toutes les anomalies satellitaires et météorologiques et obtenez (sur le champ libre) une position exacte au sous-mètre.

Méthode compliquée

Si votre appareil n'a pas de mode minute, vous pouvez obtenir un résultat tout aussi exact en mesurant plusieurs points à plusieurs moments, puis en calculant la valeur moyenne.

Marquez un point de vue sur une zone libre (ou un plan de celle-ci) distants de quelques dizaines de mètres les uns des autres et pouvant être retrouvés sans aucun doute à tout moment. Les « zones d'étalonnage » appropriées sont : de grands parkings avec des drains, une plage sur la côte danoise de la mer du Nord avec des bunkers résiduels, des terrains de sport avec des balises solides, par exemple le tennis, etc.

Mesurez les distances entre tous les points (triangles) avec un ruban à mesurer ou un télémètre laser.

Déterminez les positions de ces points avec votre GPS : Fixez l'appareil immobile pendant au moins une minute à chaque point. Répétez la mesure dix fois dans un intervalle d'au moins 90 minutes pour avoir des constellations de satellites différentes et éventuellement des conditions atmosphériques différentes. Donc, pour une telle tentative, vous avez besoin de 15 heures.

Calculez la moyenne de chaque nuage de points :

Somme LAT / nombre de points dans le nuage de points = LAT[moyenne] Somme LON / nombre de points dans le nuage de points = LON[moyenne]

Certains appareils GPS ont une fonction intégrée pour cela. Vous pouvez également vous connecter, enregistrer en tant que feuille de calcul et le laisser calculer automatiquement.

Si vous voulez le savoir exactement, faites 20 mesures sur respectivement seulement la moitié des points. Cela exclut une éventuelle erreur régulière selon laquelle toutes les valeurs de mesure pourraient être décalées dans la même direction à cause de perturbations atmosphériques à long terme.

en haut à droite:
erreur de mouvement au début

  1. Calculez les distances hors des différences de coordonnées entre deux points de référence (ou appuyez dessus dans un éditeur)
  2. Déterminer la différence entre la distance mesurée et calculée
  3. Calculez la différence moyenne : comptez toutes les différences ensemble et divisez-les par leur quantité.

Le résultat est une proportion pour la précision totale maximale de l'appareil et les influences environnementales dans de bonnes conditions. Si les influences environnementales diminuent, la précision diminue également. Voir Précision des données GPS dix fois par minute dans un intervalle de 90 minutes. Calculer la moyenne du nuage de points.

Vous pouvez également mesurer plusieurs points et centrer le milieu de chaque nuage de points à un point de référence encore plus précis :

Somme LAT[Middle] / nombre d'observations = LAT[total] Somme LON[Middle] / nombre d'observations = LON[total]


Il existe une formule standard pour ce problème sur la page Web de l'Aviation Formulary. Il existe également de nombreuses autres formules utiles sur cette page.

Considérons maintenant divers cas particuliers.

Un cas particulier est celui où les deux points sont identiques. Ensuite, le relèvement (également connu sous le nom d'angle de cap) d'un point à l'autre n'est pas bien défini. Étant donné que le relèvement est utilisé dans l'algorithme général pour l'intersection, nous ne pouvons pas utiliser cet algorithme. Mais le point d'intersection évident est le même que le(s) point(s) de départ.

Si l'un ou l'autre point se trouve au pôle nord ou sud, chaque chemin à partir de celui-ci a le même relèvement depuis le nord, donc le relèvement ne vous dit pas réellement quel chemin est emprunté à partir de ce point. Ce cas particulier doit être traité comme une erreur, je pense, sauf peut-être si un point si le pôle nord et l'autre est le pôle sud (auquel cas vous pouvez choisir l'un ou l'autre comme "l'intersection").

Les autres cas particuliers sont pour deux points pas les mêmes, ni l'un ni l'autre à un pôle.

Si les points de départ sont aux antipodes les uns des autres, c'est-à-dire diamétralement opposés sur la Terre, alors chacun des chemins atteint l'autre point après avoir parcouru la moitié du tour de la Terre. Par exemple, le point $20$N $30$E est aux antipodes de $20$S $150$W. Si les relèvements initiaux des deux chemins s'additionnent à un multiple entier de $pi$ radians (180$ degrés), alors les deux chemins se déplacent le long du même grand cercle et il y a une infinité de points d'intersection. Si vous devez en choisir un, il peut s'agir de l'un des deux points de départ ou de l'un des deux points à mi-chemin entre eux, vous pouvez décider en considérant les relèvements initiaux à chaque point.

Si les points ne sont pas des antipodes, il est toujours possible que les chemins des deux points suivent exactement le même grand cercle. Par exemple, si les deux points de départ sont $20$N $10$E et $40$N $10$E, et que les deux commencent avec un relèvement $ degrés du nord, alors les deux chemins parcourent le même grand cercle dans la même direction. En utilisant les mêmes deux points de départ, si un chemin commence au palier $ degrés et que l'autre commence au palier $ 180$ degrés, ils parcourront le même grand cercle dans des directions opposées. Dans les deux cas, le chemin de chaque point passe par l'autre point et finit par faire le tour de la Terre pour arriver à son point de départ.

Une façon de savoir si les chemins parcourent le même grand cercle est de regarder l'angle de relèvement ou de cap de chaque point à l'autre point. Si la direction du point $A$ au point $B$ est la même que le relèvement donné du chemin commençant à $A$, alors ce chemin passera par les deux points. Si la direction de $A$ à $B$ est exactement à l'opposé du relèvement donné (une différence de $pmpi$ radians ou $pm180$ degrés), le chemin passera toujours par les deux points il vous suffit d'aller plus loin qu'à mi-chemin autour de la Terre pour atteindre l'autre point.

Vous pouvez écrire une fonction pour décider si le chemin donné de $A$ passe par $B$. Vous pouvez ensuite utiliser la même fonction pour décider si le chemin de $B$ passe par $A$. Si les deux chemins passent par l'autre point, alors ils sont tous les deux sur le même grand cercle. Techniquement, n'importe quel point est également "le" point d'intersection, il vous suffit donc d'en choisir un qui a du sens pour vous : le premier point, le deuxième point, un point à mi-chemin entre eux, ou même les antipodes du point médian. Le choix pourrait dépendre du fait que le relèvement initial à chaque point est directement vers ou loin de l'autre point.

Dans tous les autres cas, les chemins se couperont exactement en deux points. Les deux intersections sont aux antipodes l'une de l'autre. Si les relèvements initiaux aux deux points sont vers le même point d'intersection, je choisirais ce point comme "l'intersection". (L'intersection peut être jusqu'à mi-chemin autour de la Terre à partir de l'un ou l'autre point de départ.)

Mais il est possible que le relèvement initial de chaque trajectoire soit vers un autre des deux points d'intersection. Ensuite, vous devez définir des critères pour choisir un point ou un autre, en fonction éventuellement du point le plus proche de l'intersection. Dans l'application pour laquelle j'avais besoin de cet algorithme, ce cas n'aurait pas dû se présenter normalement, j'ai donc décidé arbitrairement que "le" point d'intersection serait l'intersection qui a été atteinte pour la première fois par le premier chemin.


Calculer un point Lat/Lon à partir d'un autre angle de point Lat/Lon - Systèmes d'Information Géographique

tidegravity est une bibliothèque Python qui implémente le schéma d'Ivor Longman pour calculer les accélérations des marées dues à la lune et au soleil, tel que publié par I.M. Longman dans le Journal of Geophysical Research, Vol 64, no. 12, 1959 Cela peut être utile pour corriger les données de levés gravimétriques, car les forces gravitationnelles dues aux effets de marée du Soleil et de la Lune peuvent être de l'ordre de plusieurs centaines de microgals, selon l'emplacement des géomètres et les positions relatives du Soleil et Lune à l'autre, et l'arpenteur.

Les bibliothèques numpy et pandas sont nécessaires pour traiter les corrections de marée et importer les données de trajectoire pour la correction

La bibliothèque matplotlib est une exigence facultative et n'est actuellement utilisée que dans les exemples pour tracer une représentation visuelle des données.

Les fonctions API suivantes sont fournies (sous réserve de modifications dans les futures versions) :

solve_longman_tide(lat, lon, alt, time)

Résoudre la correction de la gravité totale due au Soleil/Lune à partir des entrées du tableau numpy

solve_longman_tide_scalar(lat, lon, alt, time)

Wrapper autour de solve_longman_tide, accepte des valeurs scalaires uniques pour lat/lon/alt et un seul objet DateTime

solve_point_corr(lat, lon, alt, t0, n=3600, increment='S')

Correction de marée de retour sur une période définie par t0 avec n points à un incrément donné pour les paramètres de position statiques (scalaires)

solve_tide_df(df, lat='lat', lon='lon', alt='alt')

Wrapper acceptant un objet DataFrame (df) pandas comme entrée, df doit avoir un DatetimeIndex et des colonnes lat/lon/alt. Des noms de colonnes alternatifs peuvent être fournis via des paramètres, qui seront ensuite utilisés pour extraire des composants du DataFrame d'entrée.

  • I.M. Longman "Forumlas for Computing the Tidal Accelerations Due to the Moon and the Sun" Journal of Geophysical Research, vol. 64, non. 12, 1959, p. 2351-2355
  • P. Schureman "Manuel d'analyse harmonique et de prédiction des marées" U.S. Coast and Geodetic Survey, 1958

Cette bibliothèque est basée sur le travail de l'implémentation Python LongmanTide de John Leeman. LongmanMarée

Il y a plusieurs exemples de scripts dans le répertoire des exemples illustrant comment utiliser les fonctions de résolution de longue durée.

Voici une démonstration simple de calcul d'une série de corrections pour une latitude/longitude/altitude statique sur une période de temps spécifiée, avec des intervalles de 1 seconde.


Centre des points en coordonnées géométriques

Il y a cinq satellites géostationnaires autour de la terre et vous avez besoin que votre carte se déplace automatiquement vers le centre de leurs emplacements pour connaître la région approximative de leur couverture. Sur une droite numérique, ce n'est pas un problème très difficile car c'est comme trouver un centre de masse ou une moyenne pour une quantité arbitraire :

La latitude fonctionne de cette façon, mais la longitude est différente.

Pourquoi la longitude est différente

Ce qui rend la longitude difficile, c'est que les points qui sont en fait très proches peuvent avoir une très grande plage dans le système de coordonnées que nous utilisons couramment. Prenons l'exemple suivant : Tonga est situé à 175,2° W et Tuvalu est à 179,2° E. À quelle distance sont-ils ? Eh bien, il devrait être à 5,6° de longitude puisqu'ils sont respectivement à 4,8° et 0,8° à partir de 180° W/E. Mais puisque nous considérons normalement la longitude comme une droite numérique [-180°, 180°] où Est est positif et Ouest est négatif, ces deux points sont

une part! Quelle réponse est correcte ? Eh bien, ils le sont tous les deux, mais cela peut causer des problèmes gênants si nous devions trouver une solution pour trouver le centre des points sur une carte. Dans notre exemple avec Tonga et Tuvalu, la première solution serait bien zoomée sur les îles, tandis que la seconde serait suffisamment zoomée pour englober 354,4° du globe.

Toujours en collaboration avec Tonga et Tuvalu, quelle serait la localisation moyenne de ces deux pays ? La moyenne est la somme / le nombre de points, donc nous obtenons

ou 2° à l'est du premier méridien. Cela semble étrange parce que c'est à l'autre bout du monde.

Puisque nous obtenons des résultats qui semblent un peu absurdes, il doit y avoir une solution plus claire à notre problème.

Trouver un autre moyen

Le problème ici réside dans la visualisation de la longitude comme une droite numérique où les points d'extrémité sont éloignés, alors qu'en fait les points d'extrémité représentent le même emplacement physique. Une façon de contourner cette difficulté consiste à mapper le segment de ligne sur un anneau à deux dimensions de rayon un (un cercle unité). C'est pratique car maintenant -180° et +180° se trouvent au même point dans ce nouveau système de coordonnées bidimensionnel : ((-1,0)).

Vous trouverez ci-dessous une image du problème de satellite mentionné ci-dessus. Cinq satellites sont disposés autour de la terre. Le système de coordonnées à gauche représente la longitude telle que nous la mesurons normalement, le système de coordonnées à droite est la longitude transformée avec des degrés aux emplacements appropriés pour afficher la cartographie. Comme vous pouvez facilement le voir sur la carte, prendre la moyenne normale de longitude (le × rouge) donne une valeur très éloignée de la valeur correcte (l'étoile d'or). Si le système de coordonnées n'était qu'une droite numérique sans valeurs limites périodiques, vous pourriez équilibrer la ligne sur votre doigt au niveau du × rouge.

La transformation qui nous aide à trouver l'étoile d'or est la suivante :

où l'index signifie qu'il s'agit de l'entrée dans la table de données (des entrées).

Pour trouver notre centre de points, nous devons maintenant faire la moyenne sur tous les et (que nous appellerons et ), puis trouver l'angle entre eux. L'angle peut être calculé en trouvant la tangente inverse. Pour faire attention au quadrant choisi, nous utiliserons atan2, la tangente inverse à deux arguments qui préserve les signes des entrées.

Ce calcul de longitude, et celui mentionné ci-dessus pour la latitude, peut être facilement calculé dans CARTO en plaçant la commande SQL suivante dans l'éditeur SQL. Les valeurs calculées sont : avg_lon basée sur la discussion juste au-dessus, avg_lon_naive basée sur une moyenne droite de longitude, et avg_lat la latitude moyenne.

A part : Si vous effectuez ce calcul sur un grand nombre de points, la fonction SQL sum() sera probablement plus rapide que avg() . Puisque la tangente est définie comme opposée / adjacente, tous les multiples communs s'annulent. Cela signifie que le dénominateur utilisé dans les moyennes s'annulera à la fois pour et , donc avg() peut être remplacé par sum() pour ces calculs.

Le résultat pour avg_lon est logique car il se situe entre Tuvalu et Tonga. avg_lon_naive est tout simplement faux. Notez que nous devons convertir les degrés en radians, puis revenir dans le processus. Notez également que les deux longitudes calculées sont distantes de 180° pour le cas à deux points. Pour un ensemble de données plus important, le résultat avg_lon_naive devient plus absurde.

En utilisant le jeu de données lié en bas, vous pouvez voir les données visualisées sur la carte. Il est tout à fait clair que l'approche naïve pour trouver la longitude moyenne ne fonctionne pas.

Vous voulez essayer l'analyse spatiale ?

Centre de points pondéré

Ces résultats peuvent être généralisés à un centre de points pondéré. Si la colonne que vous souhaitez pondérer est , alors nous obtenons

Puisque la tangente prend le rapport des arguments, les dénominateurs s'annuleraient et notre équation se simplifie de manière à faciliter la tâche de l'ordinateur !

En SQL, cette équation ressemblerait à :

Conseil de pro : Si vous n'avez pas de colonne de latitude ou de longitude explicite, vous pouvez utiliser les informations directement de the_geom en remplaçant lat par ST_Y(the_geom) et lon par ST_X(the_geom) .

Chez CARTO, nous privilégions les données ouvertes. Si vous souhaitez cloner la carte et les données, consultez-les tous les deux ici. Bonne cartographie !


Calculer la distance entre deux points sur des cercles concentriques

J'essaie de trouver la distance la plus courte entre deux cercles concentriques. Je connais déjà l'angle entre les deux points et les rayons des cercles, mais je ne sais pas comment calculer la distance entre les deux.

Imaginez l'exemple ci-dessous, où $R_1 = 2$ et $R_2 = 3$ et les points sont séparés de 45 degrés. Je voudrais calculer la distance entre ces deux points. Toute aide est très appréciée. Merci!

Permettez-moi d'être plus clair. Je n'ai pas besoin de la distance linéaire, je peux le faire sans problème. J'ai besoin que la distance soit de l'arc qui relie ces deux points. L'arc devrait "monter" à un taux constant entre $R_1$ et $R_2$. Cette connexion ne doit pas non plus croiser le cercle le plus interne.

En gros, j'essaye de simplifier mon problème. J'ai actuellement la distance orthodromique de deux points sur un globe, mais cela suppose que les deux points sont au même rayon. Ce n'est pas toujours vrai lorsque vous essayez de trouver la distance entre une station au sol et un satellite ou quelque chose comme ça. Je connais la latitude, la longitude et l'altitude des deux objets, donc je peux trouver leur séparation angulaire, mais je ne sais pas comment calculer la distance des arcs qui les relient.


2 réponses 2

Vous avez besoin d'autre chose.

Il vous faut un sextant et un chronomètre de marine (une montre fantaisie). Le sextant mesure l'inclinaison d'une étoile ou du soleil, et aide à déterminer la latitude. Une fois que vous savez cela, l'utilisation du chronomètre et d'une trigonométrie supplémentaire donne la longitude. Je ne sais pas comment faire ni l'un ni l'autre de ces choses, alors voici quelques articles :

Une boussole est un aimant qui pointe vers un endroit particulier de la Terre. Les mathématiques ne fonctionnent tout simplement pas pour utiliser ces informations pour obtenir des informations de position, car de nombreux points sur la terre auront tous le même comportement de boussole. Même si vous aviez une certaine connaissance de la direction du nord géographique à partir d'un outil différent, toutes ces informations vous permettent de connaître votre variation locale. Cela vous place quelque part sur ce qui pourrait être une très grande courbe sinueuse :

Après coup : vous êtes loin d'être le premier à vous poser la question, et il y a quelques centaines d'années, il était si important de trouver un moyen de mesurer la longitude en mer, que des prix importants étaient offerts à tous ceux qui pouvaient le faire. La compétition était si féroce qu'un film a finalement été tourné à ce sujet. Le titre créatif Longitude peut vous intéresser.

Vous avez besoin d'une carte de variation magnétique à jour. Réglez les degrés sur le nord géographique. Cela vous donnera votre position à 200 miles. Le nord magnétique change un peu chaque année.

Ensuite, vous devez savoir où le soleil se lève à l'est ou se couche à l'ouest, et la variation pour ce jour-là. Il y a des tableaux dans l'Almanach pour le faire.

Ensuite, vérifiez l'angle du soleil à midi. Is it to the North or the South? For this you need to know the angle difference to where you think you are. A sextant is best for this, but some rough calculations can be made with a compass.

Now you're still lost, but you know what area you are in. Choose a big piece of land & dead reckon sail to it. This is why I like a cheap transistor radio with a pull out antenna. At sea you can pick up stations at 200 miles, or sometimes at night up to 500 miles, and have an idea were they are. Head straight for one. Or if there are two or more, figure out your location to 20 miles. As you get closer to land you can fine tune the angles to get close to the port you wish to reach. I only go out 60 to 80 miles in good weather as far as the second reef, but you can do more.

The radio trick also works on land. If you have a map with what towns are in a certain area & what radio stations are located in them, mark that on your map. Then you only need to hold your course by a compass. I have found this true.

Once you are close to towns they have roads. Roads have homes on them. They can tell you where to go. The same is true if you're close to coast lines. There are small craft out there. Ask and they will tell you where to go.


Voir la vidéo: Longitude and Latitude song (Octobre 2021).