Détermination de la zone UTM (à convertir) à partir de la longitude / latitude
Je suis en train d'écrire un programme qui prévoit un certain nombre de lat/long, et je les convertir en interne à l'UTM afin de faire quelques calculs en mètres.
La gamme de la lat/long des points d'eux-mêmes est assez petite, environ 200m x 200m. Ils peuvent être invoqués presque toujours à l'intérieur d'une seule zone UTM (sauf si vous avez la malchance d'être sont de l'autre côté de la frontière d'une zone).
Cependant, la zone la lat/longs sont dans est libre. Un jour, le programme peut être exécuté pour les personnes en Australie (et oh, combien de zones n'même un seul état mensonge partout, et combien la douleur que me causait déjà...), et un autre jour pour les personnes au Mexique.
Ma question est-est-il un moyen pour déterminer la zone à un particulier long/lat est de sorte qu'il peut être injecté dans une bibliothèque de conversion (j'utilise actuellement proj4 et aussi le package R rgdal
).
Ma langue est R, mais la réponse n'a pas à être, peut-être que c'est juste un calcul simple, ou peut-être que je peux intégrer un système d'appel à l' proj
exécutable.
acclamations.
source d'informationauteur mathematical.coffee
Vous devez vous connecter pour publier un commentaire.
Edit: (non-R) du code qui fonctionne pour tous non-zones polaires sur terre, voir ici ou ici.
Sauf si vous travaillez avec des données à partir d'un couple de des zones d'exception (Svalbard et de la Norvège), c'est un assez simple calcul que vous pourriez tout aussi bien le faire vous-même, dans l'arrêt R. Voici Wikipédia description de la façon dont la longitude se rapporte au numéro de la Zone UTM:
Donc, en supposant que dans vos données, les longitudes à l'ouest de la Méridien D'Origine sont codés de la course de -180 à 0 degrés, voici un R-version du code ci-dessus:
Que l'expression pourrait évidemment être simplifié un peu, mais je pense que dans cette forme, la logique qui sous-tend sa construction est le plus clair. Le
%% 60
bits est juste là au cas où certains de vos longitudes sont plus de 180 ou moins de -180.Je ne sais pas de r-code, mais je suppose que ce code PL/SQL peut vous aider avec les exceptions: