Skip to content

Commit

Permalink
Removed deprecated functions and refactored
Browse files Browse the repository at this point in the history
  • Loading branch information
harry093 committed May 1, 2020
1 parent a036b9b commit 9e40c94
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 157 deletions.
20 changes: 12 additions & 8 deletions api/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,27 @@
from flask import url_for
from geodepy.geodesy import vincdir
from geodepy.geodesy import vincinv
from geodepy.convert import dms2dd
from geodepy.convert import dd2dms
from geodepy.convert import hp2dec
from geodepy.convert import dec2hp


app = Flask(__name__)

angle_type_to_dd = {
'dd': lambda x: x,
'dms': dms2dd,
'dms': hp2dec,
}

dd_to_angle_type = {
'dd': lambda x: x,
'dms': dd2dms,
'dms': dec2hp,
}


@app.route('/')
def list_routes():
return str(tuple(url_for(rule.endpoint) for rule in app.url_map.iter_rules() if rule.endpoint != 'static'))
return str(tuple(url_for(rule.endpoint) for rule in
app.url_map.iter_rules() if rule.endpoint != 'static'))


@app.route('/vincinv')
Expand All @@ -38,7 +39,8 @@ def handle_vincinv():
dd = angle_type_to_dd[from_angle_type]
lat1_dd, lon1_dd, lat2_dd, lon2_dd = dd(lat1), dd(lon1), dd(lat2), dd(lon2)

ell_dist, azimuth1to2_dd, azimuth2to1_dd = vincinv(lat1_dd, lon1_dd, lat2_dd, lon2_dd)
ell_dist, azimuth1to2_dd, azimuth2to1_dd = vincinv(lat1_dd, lon1_dd,
lat2_dd, lon2_dd)

angle = dd_to_angle_type[to_angle_type]
azimuth1to2, azimuth2to1 = angle(azimuth1to2_dd), angle(azimuth2to1_dd)
Expand All @@ -62,10 +64,12 @@ def handle_vincdir():
dd = angle_type_to_dd[from_angle_type]
lat1_dd, lon1_dd, azimuth1to2_dd = dd(lat1), dd(lon1), dd(azimuth1to2)

lat2_dd, lon2_dd, azimuth2to1_dd = vincdir(lat1_dd, lon1_dd, azimuth1to2_dd, ell_dist)
lat2_dd, lon2_dd, azimuth2to1_dd = vincdir(lat1_dd, lon1_dd,
azimuth1to2_dd, ell_dist)

angle_type = dd_to_angle_type[to_angle_type]
lat2, lon2, azimuth2to1 = angle_type(lat2_dd), angle_type(lon2_dd), angle_type(azimuth2to1_dd)
lat2, lon2, azimuth2to1 = angle_type(lat2_dd), angle_type(lon2_dd),\
angle_type(azimuth2to1_dd)

return jsonify({
'lat2': lat2,
Expand Down
179 changes: 57 additions & 122 deletions geodepy/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,7 @@
Convert Module
"""

from math import modf, sin, cos, atan2, radians, degrees, sqrt


def dec2hp(dec):
minute, second = divmod(abs(dec) * 3600, 60)
degree, minute = divmod(minute, 60)
hp = degree + (minute / 100) + (second / 10000)
return hp if dec >= 0 else -hp


def hp2dec(hp):
degmin, second = divmod(abs(hp) * 1000, 10)
degree, minute = divmod(degmin, 100)
dec = degree + (minute / 60) + (second / 360)
return dec if hp >= 0 else -dec
from math import sin, cos, atan2, radians, degrees, sqrt


class DMSAngle(object):
Expand Down Expand Up @@ -49,49 +35,57 @@ def __repr__(self):
signsymbol = '+'
else:
signsymbol = 'error'
return '{DMSAngle: ' + signsymbol + str(self.degree) + 'd ' + str(self.minute) + 'm ' + str(self.second) + 's}'
return '{DMSAngle: ' + signsymbol + str(self.degree) + 'd ' +\
str(self.minute) + 'm ' + str(self.second) + 's}'

def __add__(self, other):
try:
return dec2dms(self.dec() + other.dec())
except AttributeError:
raise TypeError('Can only add DMSAngle and/or DDMAngle objects together')
raise TypeError('Can only add DMSAngle and/or DDMAngle objects '
'together')

def __radd__(self, other):
try:
return dec2dms(other.dec() + self.dec())
except AttributeError:
raise TypeError('Can only add DMSAngle and/or DDMAngle objects together')
raise TypeError('Can only add DMSAngle and/or DDMAngle objects '
'together')

def __sub__(self, other):
try:
return dec2dms(self.dec() - other.dec())
except AttributeError:
raise TypeError('Can only subtract DMSAngle and/or DDMAngle objects together')
raise TypeError('Can only subtract DMSAngle and/or DDMAngle '
'objects together')

def __rsub__(self, other):
try:
return dec2dms(other.dec() - self.dec())
except AttributeError:
raise TypeError('Can only subtract DMSAngle and/or DDMAngle objects together')
raise TypeError('Can only subtract DMSAngle and/or DDMAngle '
'objects together')

def __mul__(self, other):
try:
return dec2dms(self.dec() * other)
except TypeError:
raise TypeError('Multiply only defined between DMSAngle Object and Int or Float')
raise TypeError('Multiply only defined between DMSAngle Object '
'and Int or Float')

def __rmul__(self, other):
try:
return dec2dms(other * self.dec())
except TypeError:
raise TypeError('Multiply only defined between DMSAngle Object and Int or Float')
raise TypeError('Multiply only defined between DMSAngle Object '
'and Int or Float')

def __truediv__(self, other):
try:
return dec2dms(self.dec() / other)
except TypeError:
raise TypeError('Division only defined between DMSAngle Object and Int or Float')
raise TypeError('Division only defined between DMSAngle Object '
'and Int or Float')

def __abs__(self):
return DMSAngle(self.degree, self.minute, self.second)
Expand All @@ -115,10 +109,12 @@ def __gt__(self, other):
return self.dec() > other.dec()

def dec(self):
return self.sign * (self.degree + (self.minute / 60) + (self.second / 3600))
return self.sign * (self.degree + (self.minute / 60) +
(self.second / 3600))

def hp(self):
return self.sign * (self.degree + (self.minute / 100) + (self.second / 10000))
return self.sign * (self.degree + (self.minute / 100) +
(self.second / 10000))

def ddm(self):
if self.sign == 1:
Expand Down Expand Up @@ -151,49 +147,57 @@ def __repr__(self):
signsymbol = '+'
else:
signsymbol = 'error'
return '{DDMAngle: ' + signsymbol + str(self.degree) + 'd ' + str(self.minute) + 'm}'
return '{DDMAngle: ' + signsymbol + str(self.degree) + 'd ' + \
str(self.minute) + 'm}'

def __add__(self, other):
try:
return dec2ddm(self.dec() + other.dec())
except AttributeError:
raise TypeError('Can only add DMSAngle and/or DDMAngle objects together')
raise TypeError('Can only add DMSAngle and/or DDMAngle objects '
'together')

def __radd__(self, other):
try:
return dec2ddm(other.dec() + self.dec())
except AttributeError:
raise TypeError('Can only add DMSAngle and/or DDMAngle objects together')
raise TypeError('Can only add DMSAngle and/or DDMAngle objects '
'together')

def __sub__(self, other):
try:
return dec2ddm(self.dec() - other.dec())
except AttributeError:
raise TypeError('Can only add DMSAngle and/or DDMAngle objects together')
raise TypeError('Can only add DMSAngle and/or DDMAngle objects '
'together')

def __rsub__(self, other):
try:
return dec2ddm(other.dec() - self.dec())
except AttributeError:
raise TypeError('Can only add DMSAngle and/or DDMAngle objects together')
raise TypeError('Can only add DMSAngle and/or DDMAngle objects '
'together')

def __mul__(self, other):
try:
return dec2ddm(self.dec() * other)
except TypeError:
raise TypeError('Multiply only defined between DMSAngle Object and Int or Float')
raise TypeError('Multiply only defined between DMSAngle Object '
'and Int or Float')

def __rmul__(self, other):
try:
return dec2ddm(other * self.dec())
except TypeError:
raise TypeError('Multiply only defined between DMSAngle Object and Int or Float')
raise TypeError('Multiply only defined between DMSAngle Object '
'and Int or Float')

def __truediv__(self, other):
try:
return dec2ddm(self.dec() / other)
except TypeError:
raise TypeError('Division only defined between DMSAngle Object and Int or Float')
raise TypeError('Division only defined between DMSAngle Object '
'and Int or Float')

def __abs__(self):
return DDMAngle(self.degree, self.minute)
Expand Down Expand Up @@ -221,17 +225,33 @@ def dec(self):

def hp(self):
minute_int, second = divmod(self.minute, 1)
return self.sign * (self.degree + (minute_int / 100) + (second * 0.006))
return self.sign * (self.degree + (minute_int / 100) +
(second * 0.006))

def dms(self):
minute_int, second = divmod(self.minute, 1)
return self.sign * DMSAngle(self.degree, minute_int, second * 60)


def dec2hp(dec):
minute, second = divmod(abs(dec) * 3600, 60)
degree, minute = divmod(minute, 60)
hp = degree + (minute / 100) + (second / 10000)
return hp if dec >= 0 else -hp


def hp2dec(hp):
degmin, second = divmod(abs(hp) * 1000, 10)
degree, minute = divmod(degmin, 100)
dec = degree + (minute / 60) + (second / 360)
return dec if hp >= 0 else -dec


def dec2dms(dec):
minute, second = divmod(abs(dec) * 3600, 60)
degree, minute = divmod(minute, 60)
return DMSAngle(degree, minute, second) if dec >= 0 else DMSAngle(-degree, minute, second)
return DMSAngle(degree, minute, second) if dec >= 0 \
else DMSAngle(-degree, minute, second)


def dec2ddm(dec):
Expand All @@ -244,7 +264,8 @@ def dec2ddm(dec):
def hp2dms(hp):
degmin, second = divmod(abs(hp) * 1000, 10)
degree, minute = divmod(degmin, 100)
return DMSAngle(degree, minute, second * 10) if hp >= 0 else DMSAngle(-degree, minute, second * 10)
return DMSAngle(degree, minute, second * 10) if hp >= 0 \
else DMSAngle(-degree, minute, second * 10)


def hp2ddm(hp):
Expand Down Expand Up @@ -275,89 +296,3 @@ def dd2sec(dd):
degrees, minutes = divmod(minutes, 60)
sec = (degrees * 3600) + (minutes * 60) + seconds
return sec if dd >= 0 else -sec


# ----------------
# Legacy Functions
# dd2dms refactored as dec2hp
def dd2dms(dd):
minutes, seconds = divmod(abs(dd) * 3600, 60)
degrees, minutes = divmod(minutes, 60)
dms = degrees + (minutes / 100) + (seconds / 10000)
return dms if dd >= 0 else -dms


# dms2dd refactored as hp2dec
def dms2dd(dms):
degmin, seconds = divmod(abs(dms) * 1000, 10)
degrees, minutes = divmod(degmin, 100)
dd = degrees + (minutes / 60) + (seconds / 360)
return dd if dms >= 0 else -dd


def dd2dms_v(dd):
minutes, seconds = divmod(abs(dd) * 3600, 60)
degrees, minutes = divmod(minutes, 60)
dms = degrees + (minutes / 100) + (seconds / 10000)
dms[dd <= 0] = -dms[dd <= 0]
return dms


def dms2dd_v(dms):
degmin, seconds = divmod(abs(dms) * 1000, 10)
degrees, minutes = divmod(degmin, 100)
dd = degrees + (minutes / 60) + (seconds / 360)
dd[dms <= 0] = -dd[dms <= 0]
return dd


class DNACoord(object):
def __init__(self, pointid, const, easting, northing, zone, lat,
long, ortho_ht, ell_ht, x, y, z, x_sd, y_sd, z_sd, desc):
self.pointid = pointid
self.const = const
self.easting = easting
self.northing = northing
self.zone = zone
self.lat = lat
self.long = long
self.ortho_ht = ortho_ht
self.ell_ht = ell_ht
self.x = x
self.y = y
self.z = z
self.x_sd = x_sd
self.y_sd = y_sd
self.z_sd = z_sd
self.desc = desc

def converthptodd(self):
self.lat = hp2dec(self.lat)
self.long = hp2dec(self.long)


def read_dnacoord(fn):
coord_list = []
with open(fn, 'r') as file:
dnadata = file.readlines()
for line in dnadata:
pointid = line[0:20]
const = line[21:25]
easting = float(line[28:40])
northing = float(line[41:58])
zone = int(line[60:63])
lat = float(line[63:78])
long = float(line[78:92])
ortho_ht = float(line[93:103])
ell_ht = float(line[103:114])
x = float(line[115:129])
y = float(line[130:144])
z = float(line[145:159])
x_sd = float(line[160:171])
y_sd = float(line[172:181])
z_sd = float(line[182:191])
desc = line[192:-1]
record = DNACoord(pointid.strip(), const.strip(), easting, northing, zone, lat,
long, ortho_ht, ell_ht, x, y, z, x_sd, y_sd, z_sd, desc.strip())
coord_list.append(record)
return coord_list
Loading

0 comments on commit 9e40c94

Please sign in to comment.