Python> Ich habe einen Testcode für meine eigene externe Datei erstellt

Betriebsumgebung


Xeon E5-2620 v4 (8 Kerne) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 und seine-devel
mpich.x86_64 3.1-5.el6 und seine-devel
gcc version 4.4.7 (Und Gfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.Verwende 1.
Python 3.6.0 on virtualenv

Verwandte Geometrie> Entfernung, wenn jeder der beiden Punkte um 1 Grad (Breite oder Länge) [km] abweicht Verwandte Geometrie> Finden Sie den Abstand zwischen zwei Breiten- und Längengraden> Verwenden Sie die Haversine-Formel

Ich wollte einen Testcode erstellen, um den Berechnungsprozess in eine externe Datei zu konvertieren.

Ich habe folgendes getan.

Getestete Datei 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__)

Testdatei v0.1

Die Importmethode sieht nicht sehr gut aus.

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()

Anwendungsbeispiel

Lauf


$ 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)
    

Lauf


$ 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> Ich habe einen Testcode für meine eigene externe Datei erstellt
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich habe meine eigene Python-Bibliothek erstellt
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Ich habe meine eigene Sprache gemacht. (1)
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Ich habe einen Python-Text gemacht
Ich habe meine eigene Sprache gemacht (2)
Ich habe meine eigene AML gemacht
[VSCode] Ich habe ein Benutzer-Snippet für Python-Druck-F-String erstellt
Ich habe einen Line-Bot mit Python gemacht!
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe ein Skript in Python erstellt, um eine Textdatei für JSON zu konvertieren (für das vscode-Benutzer-Snippet).
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
Ich habe versucht, ein Gerüstwerkzeug für Python Web Framework Bottle zu erstellen
Ich habe mein eigenes Filter-Plug-In für Ansibles Textanalyse erstellt
[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Ich habe eine Python-Wrapper-Bibliothek für die Docomo-Bilderkennungs-API erstellt.
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe mit Python einen Zeichenzähler erstellt
Ein Tool zur einfachen Eingabe von Python-Code
Ich habe mit Python eine Hex-Map erstellt
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt
Ein Lehrbuch für Anfänger von Python-Anfängern
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe einen Docker-Container erstellt, um JUMAN ++, KNP, Python (für pyKNP) zu verwenden.
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe einen Ersatz2-Algorithmus für uWSGI billiger gemacht
Ich habe ein nützliches Tool für Digital Ocean erstellt
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Vorgehensweise zum Erstellen eines mit Python erstellten LineBot
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe einen Downloader für wortverteilte Ausdrücke erstellt
Ich habe meinen eigenen primitiven statischen Site-Generator erstellt
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich möchte mit Python in eine Datei schreiben
Wir haben ein Peeping-Prevention-Produkt für die Telearbeit entwickelt.
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Python Qiita API Wrapper "qiipy" gemacht
Ich möchte eine schöne Python-Entwicklungsumgebung für meinen neuen Mac erstellen
Ich habe ein Paket erstellt, um eine ausführbare Datei aus dem Hy-Quellcode zu erstellen
Ich habe in Python ein Tool erstellt, das mit der rechten Maustaste auf eine Excel-Datei klickt und diese für jedes Blatt in Dateien unterteilt.
Ich habe meinen eigenen Parallel Link Roboter (Software Edition) gemacht
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
〇✕ Ich habe ein Spiel gemacht
Ich habe einen Anmelde- / Abmeldevorgang mit Python's Bottle durchgeführt.
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe mit Tkinter ein Fenster für die Protokollausgabe erstellt
Ich möchte in Python schreiben! (2) Schreiben wir einen Test