Python> J'ai créé un code de test pour mon propre fichier externe

Environnement d'exploitation


Xeon E5-2620 v4 (8 noyaux) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 et ses-devel
mpich.x86_64 3.1-5.el6 et ses-devel
gcc version 4.4.7 (Et gfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.Utilisez 1.
Python 3.6.0 on virtualenv

Geometry> Distance lorsque chacun des deux points dévie de 1 degré (latitude ou longitude) [km] Geometry> Find the distance from two latitudes and longitudes> Use Haversine formula

Je voulais créer un code de test en cours de conversion du processus de calcul en fichier externe.

J'ai fait ce qui suit.

Fichier testé v0.2

UtilGeolocation.py


from math import sin, cos, radians, sqrt, asin

'''
v0.2 Mar 31, 2017
    - add calc_distance_center_shift()
v0.1 Mar 31, 2017
    - add get_shifted_position()
    - add calc_distance_2places()
'''
# codingrule:PEP8


def calc_distance_2places(pos0, pos1, radius=None):
    '''
    distance based on Haversine formula
    Ref: https://en.wikipedia.org/wiki/Haversine_formula

    (pos0, pos1[, radius])
    where
      pos0 is (lat, lon) in [km]
      pos1 is (lat, lon) in [km]
      radius is in [km]
    '''
    if radius is None:
        radius = 6378.137  # km (Earth's radius)
    latang1, lonang1 = pos0
    latang2, lonang2 = pos1
    phi1, phi2 = radians(latang1), radians(latang2)
    lam1, lam2 = radians(lonang1), radians(lonang2)
    term1 = sin((phi2 - phi1) / 2.0) ** 2
    term2 = sin((lam2 - lam1) / 2.0) ** 2
    term2 = cos(phi1) * cos(phi2) * term2
    wrk = sqrt(term1 + term2)
    wrk = 2.0 * radius * asin(wrk)
    return wrk


def get_shifted_position(pos0, shift_lat_deg=0.0, shift_lon_deg=0.0):
    lat, lon = pos0
    return (lat + shift_lat_deg, lon + shift_lon_deg)


def calc_distance_center_shift(center, shift):
    '''
    distance with shifted (latitude, longitude)
    '''
    clat, clon = center
    slat, slon = shift

    lat_shifted = (clat + slat, clon + 0.0)
    dist_lat_km = calc_distance_2places(center, lat_shifted)

    lon_shifted = (clat + 0.0, clon + slon)
    dist_lon_km = calc_distance_2places(center, lon_shifted)
    return (dist_lat_km, dist_lon_km)


#-------------------------------------------------

if __name__ == '__main__':
    print("Help on calc_distance_2places:")
    print(calc_distance_2places.__doc__)
    print("Help on calc_distance_center_shift:")
    print(calc_distance_center_shift.__doc__)

Fichier test v0.1

La méthode d'importation n'a pas l'air très bonne.

testGeolocation.py


from UtilGeolocation import calc_distance_2places
from UtilGeolocation import calc_distance_center_shift
from UtilGeolocation import get_shifted_position

'''
v0.1 Mar. 31, 2017
    - add Test_calc_distance_center_shift()
    - add Test_calc_distance_2places()
'''
# codingrule:PEP8


def Test_calc_distance_2places():
    # at Location1
    Osaka1 = 34.702113, 135.494807
    print("Osaka:")
    Osaka2 = get_shifted_position(Osaka1, shift_lat_deg=1.0)
    print("  %.2f km for 1 deg latitude"
          % calc_distance_2places(Osaka1, Osaka2))
    Osaka2 = get_shifted_position(Osaka1, shift_lon_deg=1.0)
    print("  %.2f km for 1 deg longitude"
          % calc_distance_2places(Osaka1, Osaka2))

    # at Location2
    print("London:")
    London1 = 51.476853, 0.0
    London2 = get_shifted_position(London1, shift_lat_deg=1.0)
    print("  %.2f km for 1 deg latitude"
          % calc_distance_2places(London1, London2))
    London2 = get_shifted_position(London1, shift_lon_deg=1.0)
    print("  %.2f km for 1 deg longitude"
          % calc_distance_2places(London1, London2))


def Test_calc_distance_center_shift():
    Osaka1 = 34.702113, 135.494807
    print("Osaka:")
    dist = calc_distance_center_shift(Osaka1, shift=(1.0, 1.0))
    print("  %.2f km, %.2f km" % dist)


if __name__ == '__main__':
    Test_calc_distance_2places()
    Test_calc_distance_center_shift()

Exemple d'utilisation

Courir


$ python UtilGeolocation.py 
Help on calc_distance_2places:

    distance based on Haversine formula
    Ref: https://en.wikipedia.org/wiki/Haversine_formula

    (pos0, pos1[, radius])
    where
      pos0 is (lat, lon) in [km]
      pos1 is (lat, lon) in [km]
      radius is in [km]
    
Help on calc_distance_center_shift:

    distance with shifted (latitude, longitude)
    

Courir


$ python testGeolocation.py 
Osaka:
  111.32 km for 1 deg latitude
  91.52 km for 1 deg longitude
London:
  111.32 km for 1 deg latitude
  69.33 km for 1 deg longitude
Osaka:
  111.32 km, 91.52 km

Recommended Posts

Python> J'ai créé un code de test pour mon propre fichier externe
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai créé ma propre bibliothèque Python
J'ai créé un fichier de configuration avec Python
J'ai créé une VM qui exécute OpenCV pour Python
J'ai fait ma propre langue. (1)
[Python] J'ai créé un classificateur pour les iris [Machine learning]
J'ai fait un texte Python
J'ai fait ma propre langue (2)
J'ai fait ma propre AML
[VSCode] J'ai créé un extrait d'utilisateur pour Python print f-string
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai créé un script en Python pour convertir un fichier texte pour JSON (pour l'extrait d'utilisateur vscode)
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
J'ai créé mon propre plug-in de filtre pour l'analyse de texte d'Ansible
[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
J'ai créé une bibliothèque de wrapper Python pour l'API de reconnaissance d'images docomo.
J'ai créé un docset de tableau de bord pour Holoviews
J'ai fait un compteur de caractères avec Python
Un outil pour saisir facilement du code Python
J'ai fait une carte hexadécimale avec Python
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai fait une bibliothèque pour l'assurance actuarielle
Un manuel pour les débutants réalisé par des débutants Python
J'ai fait un simulateur de neurones avec Python
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai fait un algorithme de rechange2 moins cher pour uWSGI
J'ai créé un outil utile pour Digital Ocean
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Procédure de création d'un LineBot réalisé avec Python
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai créé un téléchargeur pour l'expression distribuée par mot
J'ai créé mon propre générateur de site statique primitif
J'ai essayé de lire un fichier CSV en utilisant Python
Je veux écrire dans un fichier avec Python
Nous avons créé un produit de prévention du télétravail.
J'ai créé un programme cryptographique César en Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
Création du wrapper d'API Qiita Python "qiipy"
Je veux créer un bel environnement de développement Python pour mon nouveau Mac
J'ai créé un package pour créer un fichier exécutable à partir du code source Hy
J'ai créé un outil en Python qui clique avec le bouton droit sur un fichier Excel et le divise en fichiers pour chaque feuille.
J'ai créé mon propre robot de liaison parallèle (édition logicielle)
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
〇✕ J'ai fait un jeu
J'ai effectué un processus de connexion / déconnexion en utilisant Python's Bottle.
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé une fenêtre pour la sortie du journal avec Tkinter
Je veux écrire en Python! (2) Écrivons un test