Tidy up whitespace
This commit is contained in:
parent
5e89b0a417
commit
7ea7850331
@ -249,7 +249,8 @@ class Callback:
|
||||
for (k, v) in s.items():
|
||||
if k in self.__signal_map:
|
||||
# signal name clash
|
||||
sys.stderr.write("Warning: signal name clash: %s\n" % str(k))
|
||||
sys.stderr.write("Warning: signal name clash: %s\n"
|
||||
% str(k))
|
||||
self.__signal_map[k] = v
|
||||
# Set to None to prevent a memory leak in this recursive function
|
||||
trav = None
|
||||
@ -258,8 +259,8 @@ class Callback:
|
||||
# of signals that this instance can emit.
|
||||
|
||||
self._log("registered signals: \n %s\n" %
|
||||
"\n ".join([ "%s: %s" % (k, v) for (k, v)
|
||||
in list(self.__signal_map.items()) ]))
|
||||
"\n ".join(["%s: %s" % (k, v) for (k, v)
|
||||
in list(self.__signal_map.items())]))
|
||||
|
||||
|
||||
def connect(self, signal_name, callback):
|
||||
@ -273,7 +274,7 @@ class Callback:
|
||||
# Check that signal exists.
|
||||
if signal_name not in self.__signal_map:
|
||||
self._log("Warning: attempt to connect to unknown signal: %s\n"
|
||||
% str(signal_name))
|
||||
% str(signal_name))
|
||||
return
|
||||
|
||||
# Add callable to callback_map
|
||||
|
@ -72,17 +72,17 @@ NOTECLASS = 'Note'
|
||||
TAGCLASS = 'Tag'
|
||||
|
||||
CLASS2KEY = {
|
||||
PERSONCLASS: PERSONKEY,
|
||||
FAMILYCLASS: FAMILYKEY,
|
||||
EVENTCLASS: EVENTKEY,
|
||||
PLACECLASS: PLACEKEY,
|
||||
MEDIACLASS: MEDIAKEY,
|
||||
SOURCECLASS: SOURCEKEY,
|
||||
CITATIONCLASS: CITATIONKEY,
|
||||
REPOCLASS: REPOKEY,
|
||||
NOTECLASS: NOTEKEY,
|
||||
TAGCLASS: TAGKEY
|
||||
}
|
||||
PERSONCLASS: PERSONKEY,
|
||||
FAMILYCLASS: FAMILYKEY,
|
||||
EVENTCLASS: EVENTKEY,
|
||||
PLACECLASS: PLACEKEY,
|
||||
MEDIACLASS: MEDIAKEY,
|
||||
SOURCECLASS: SOURCEKEY,
|
||||
CITATIONCLASS: CITATIONKEY,
|
||||
REPOCLASS: REPOKEY,
|
||||
NOTECLASS: NOTEKEY,
|
||||
TAGCLASS: TAGKEY
|
||||
}
|
||||
|
||||
def _return(*args):
|
||||
"""
|
||||
@ -115,17 +115,17 @@ class CallbackManager:
|
||||
#no handles to track
|
||||
self.database = database
|
||||
self.__handles = {
|
||||
PERSONKEY: [],
|
||||
FAMILYKEY: [],
|
||||
EVENTKEY: [],
|
||||
PLACEKEY: [],
|
||||
MEDIAKEY: [],
|
||||
SOURCEKEY: [],
|
||||
CITATIONKEY: [],
|
||||
REPOKEY: [],
|
||||
NOTEKEY: [],
|
||||
TAGKEY: [],
|
||||
}
|
||||
PERSONKEY: [],
|
||||
FAMILYKEY: [],
|
||||
EVENTKEY: [],
|
||||
PLACEKEY: [],
|
||||
MEDIAKEY: [],
|
||||
SOURCEKEY: [],
|
||||
CITATIONKEY: [],
|
||||
REPOKEY: [],
|
||||
NOTEKEY: [],
|
||||
TAGKEY: [],
|
||||
}
|
||||
#no custom callbacks to do
|
||||
self.custom_signal_keys = []
|
||||
#set up callbacks to do nothing
|
||||
@ -180,7 +180,7 @@ class CallbackManager:
|
||||
handles = ahandledict.get(key)
|
||||
if handles:
|
||||
self.__handles[key] = list(
|
||||
set(self.__handles[key]).union(handles))
|
||||
set(self.__handles[key]).union(handles))
|
||||
|
||||
def unregister_handles(self, ahandledict):
|
||||
"""
|
||||
@ -199,17 +199,17 @@ class CallbackManager:
|
||||
Unregister all handles that are registered
|
||||
"""
|
||||
self.__handles = {
|
||||
PERSONKEY: [],
|
||||
FAMILYKEY: [],
|
||||
EVENTKEY: [],
|
||||
PLACEKEY: [],
|
||||
MEDIAKEY: [],
|
||||
SOURCEKEY: [],
|
||||
CITATIONKEY: [],
|
||||
REPOKEY: [],
|
||||
NOTEKEY: [],
|
||||
TAGKEY: [],
|
||||
}
|
||||
PERSONKEY: [],
|
||||
FAMILYKEY: [],
|
||||
EVENTKEY: [],
|
||||
PLACEKEY: [],
|
||||
MEDIAKEY: [],
|
||||
SOURCEKEY: [],
|
||||
CITATIONKEY: [],
|
||||
REPOKEY: [],
|
||||
NOTEKEY: [],
|
||||
TAGKEY: [],
|
||||
}
|
||||
|
||||
def register_callbacks(self, callbackdict):
|
||||
"""
|
||||
@ -253,15 +253,12 @@ class CallbackManager:
|
||||
signal = key + method
|
||||
self.__do_unconnect(signal)
|
||||
self.__callbacks[signal][1] = self.database.connect(
|
||||
signal,
|
||||
self.__callbackcreator(signal))
|
||||
signal, self.__callbackcreator(signal))
|
||||
for method in METHODS_NONE:
|
||||
signal = key + method
|
||||
self.__do_unconnect(signal)
|
||||
self.__callbacks[signal][1] = self.database.connect(
|
||||
signal,
|
||||
self.__callbackcreator(signal,
|
||||
noarg=True))
|
||||
signal, self.__callbackcreator(signal, noarg=True))
|
||||
|
||||
def __do_callback(self, signal, *arg):
|
||||
"""
|
||||
@ -304,7 +301,8 @@ class CallbackManager:
|
||||
managed automatically.
|
||||
"""
|
||||
if self.database:
|
||||
self.custom_signal_keys.append(self.database.connect(name, callback))
|
||||
self.custom_signal_keys.append(self.database.connect(name,
|
||||
callback))
|
||||
|
||||
def __callbackcreator(self, signal, noarg=False):
|
||||
"""
|
||||
@ -338,17 +336,17 @@ def directhandledict(baseobj):
|
||||
Build a handledict from baseobj with all directly referenced objects
|
||||
"""
|
||||
handles = {
|
||||
PERSONKEY: [],
|
||||
FAMILYKEY: [],
|
||||
EVENTKEY: [],
|
||||
PLACEKEY: [],
|
||||
MEDIAKEY: [],
|
||||
SOURCEKEY: [],
|
||||
CITATIONKEY: [],
|
||||
REPOKEY: [],
|
||||
NOTEKEY: [],
|
||||
TAGKEY: [],
|
||||
}
|
||||
PERSONKEY: [],
|
||||
FAMILYKEY: [],
|
||||
EVENTKEY: [],
|
||||
PLACEKEY: [],
|
||||
MEDIAKEY: [],
|
||||
SOURCEKEY: [],
|
||||
CITATIONKEY: [],
|
||||
REPOKEY: [],
|
||||
NOTEKEY: [],
|
||||
TAGKEY: [],
|
||||
}
|
||||
for classn, handle in baseobj.get_referenced_handles():
|
||||
handles[CLASS2KEY[classn]].append(handle)
|
||||
return handles
|
||||
@ -359,17 +357,17 @@ def handledict(baseobj):
|
||||
referenced base obj that are present
|
||||
"""
|
||||
handles = {
|
||||
PERSONKEY: [],
|
||||
FAMILYKEY: [],
|
||||
EVENTKEY: [],
|
||||
PLACEKEY: [],
|
||||
MEDIAKEY: [],
|
||||
SOURCEKEY: [],
|
||||
CITATIONKEY: [],
|
||||
REPOKEY: [],
|
||||
NOTEKEY: [],
|
||||
TAGKEY: [],
|
||||
}
|
||||
PERSONKEY: [],
|
||||
FAMILYKEY: [],
|
||||
EVENTKEY: [],
|
||||
PLACEKEY: [],
|
||||
MEDIAKEY: [],
|
||||
SOURCEKEY: [],
|
||||
CITATIONKEY: [],
|
||||
REPOKEY: [],
|
||||
NOTEKEY: [],
|
||||
TAGKEY: [],
|
||||
}
|
||||
for classn, handle in baseobj.get_referenced_handles_recursively():
|
||||
handles[CLASS2KEY[classn]].append(handle)
|
||||
return handles
|
||||
|
@ -48,14 +48,14 @@ import math
|
||||
degrees = "1"
|
||||
North = _("%(north_latitude)s N") % {'north_latitude' : degrees}
|
||||
South = _("%(south_latitude)s S") % {'south_latitude' : degrees}
|
||||
East = _("%(east_longitude)s E") % {'east_longitude' : degrees}
|
||||
West = _("%(west_longitude)s W") % {'west_longitude' : degrees}
|
||||
East = _("%(east_longitude)s E") % {'east_longitude' : degrees}
|
||||
West = _("%(west_longitude)s W") % {'west_longitude' : degrees}
|
||||
|
||||
# extract letters we really need
|
||||
North = North.replace("1"," ").strip()
|
||||
South = South.replace("1"," ").strip()
|
||||
East = East.replace("1"," ").strip()
|
||||
West = West.replace("1"," ").strip()
|
||||
North = North.replace("1", " ").strip()
|
||||
South = South.replace("1", " ").strip()
|
||||
East = East.replace("1", " ").strip()
|
||||
West = West.replace("1", " ").strip()
|
||||
|
||||
# build dictionary with translation en to local language
|
||||
translate_en_loc = {}
|
||||
@ -79,7 +79,7 @@ if 'N' == South or 'S' == North or 'E' == West or 'W' == East:
|
||||
#
|
||||
#------------------
|
||||
|
||||
def __convert_structure_to_float(sign, degs, mins=0, secs=0.0) :
|
||||
def __convert_structure_to_float(sign, degs, mins=0, secs=0.0):
|
||||
"""helper function which converts a structure to a nice
|
||||
representation
|
||||
"""
|
||||
@ -94,29 +94,29 @@ def __convert_using_float_repr(stringValue):
|
||||
""" helper function that tries to convert the string using the float
|
||||
representation
|
||||
"""
|
||||
try :
|
||||
try:
|
||||
v = float(stringValue)
|
||||
return v
|
||||
except ValueError :
|
||||
return None;
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
def __convert_using_colon_repr(stringValue):
|
||||
""" helper function that tries to convert the string using the colon
|
||||
representation
|
||||
"""
|
||||
if stringValue.find(r':') == -1 :
|
||||
if stringValue.find(r':') == -1:
|
||||
return None
|
||||
|
||||
l = stringValue.split(':')
|
||||
if len(l) < 2 or len(l) > 3:
|
||||
return None
|
||||
l[0]=l[0].strip()
|
||||
l[0] = l[0].strip()
|
||||
# if no characters before ':' nothing useful is input!
|
||||
if len(l[0]) == 0:
|
||||
return None
|
||||
if l[0][0] in ['+', '-']:
|
||||
sign = l[0][0]
|
||||
l[0]=l[0][1:].strip()
|
||||
l[0] = l[0][1:].strip()
|
||||
# regard a second sign as an error
|
||||
if l[0][0] in ['+', '-']:
|
||||
return None
|
||||
@ -134,7 +134,7 @@ def __convert_using_colon_repr(stringValue):
|
||||
return None
|
||||
except:
|
||||
return None
|
||||
secs=0.
|
||||
secs = 0.
|
||||
if len(l) == 3:
|
||||
try:
|
||||
secs = float(l[2])
|
||||
@ -153,16 +153,16 @@ def __convert_using_classic_repr(stringValue, typedeg):
|
||||
return None # not a valid lat or lon
|
||||
|
||||
#exchange some characters
|
||||
stringValue = stringValue.replace('°',r'_')
|
||||
stringValue = stringValue.replace('°', r'_')
|
||||
#allow to input ° as #, UTF-8 code c2b00a
|
||||
stringValue = stringValue.replace('º',r'_')
|
||||
#allow to input º as #, UTF-8 code c2ba0a
|
||||
stringValue = stringValue.replace(r'#',r'_')
|
||||
stringValue = stringValue.replace('º', r'_')
|
||||
#allow to input º as #, UTF-8 code c2b a0a
|
||||
stringValue = stringValue.replace(r'#', r'_')
|
||||
#allow to input " as ''
|
||||
stringValue = stringValue.replace(r"''",r'"')
|
||||
stringValue = stringValue.replace(r"''", r'"')
|
||||
#allow some special unicode symbols
|
||||
stringValue = stringValue.replace('\u2033',r'"')
|
||||
stringValue = stringValue.replace('\u2032',r"'")
|
||||
stringValue = stringValue.replace('\u2033', r'"')
|
||||
stringValue = stringValue.replace('\u2032', r"'")
|
||||
#ignore spaces, a regex with \s* would be better here...
|
||||
stringValue = stringValue.replace(r' ', r'')
|
||||
stringValue = stringValue.replace(r'\t', r'')
|
||||
@ -193,9 +193,9 @@ def __convert_using_classic_repr(stringValue, typedeg):
|
||||
l2[0] = l4[0]
|
||||
# Convert the decimal part of minutes to seconds
|
||||
try:
|
||||
lsecs=float('0.' + l4[1]) * 60.0
|
||||
# Set the seconds followed by direction letter N/S/W/E
|
||||
l2[1] = str(lsecs) + '"' + l2[1]
|
||||
lsecs = float('0.' + l4[1]) * 60.0
|
||||
# Set the seconds followed by direction letter N/S/W/E
|
||||
l2[1] = str(lsecs) + '"' + l2[1]
|
||||
except:
|
||||
return None
|
||||
|
||||
@ -269,13 +269,13 @@ def __convert_using_modgedcom_repr(val, typedeg):
|
||||
stringValue = '-' + val[:pos]
|
||||
else:
|
||||
return None
|
||||
try :
|
||||
try:
|
||||
v = float(stringValue)
|
||||
return v
|
||||
except ValueError :
|
||||
return None;
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
def __convert_float_val(val, typedeg = "lat"):
|
||||
def __convert_float_val(val, typedeg="lat"):
|
||||
# function converting input to float, recognizing decimal input, or
|
||||
# degree notation input. Only english input
|
||||
# There is no check on maximum/minimum of degree
|
||||
@ -287,7 +287,7 @@ def __convert_float_val(val, typedeg = "lat"):
|
||||
#this is no problem, as a number like 100,000.20 cannot appear in
|
||||
#lat/lon
|
||||
#change XX,YY into XX.YY
|
||||
if val.find(r'.') == -1 :
|
||||
if val.find(r'.') == -1:
|
||||
val = val.replace(',', '.')
|
||||
|
||||
# format: XX.YYYY
|
||||
@ -297,17 +297,17 @@ def __convert_float_val(val, typedeg = "lat"):
|
||||
|
||||
# format: XX:YY:ZZ
|
||||
v = __convert_using_colon_repr(val)
|
||||
if v is not None :
|
||||
if v is not None:
|
||||
return v
|
||||
|
||||
# format: XX° YY' ZZ" [NSWE]
|
||||
v = __convert_using_classic_repr(val, typedeg)
|
||||
if v is not None :
|
||||
if v is not None:
|
||||
return v
|
||||
|
||||
# format XX.YYYY[NSWE]
|
||||
v = __convert_using_modgedcom_repr(val, typedeg)
|
||||
if v is not None :
|
||||
if v is not None:
|
||||
return v
|
||||
|
||||
# no format succeeded
|
||||
@ -365,12 +365,12 @@ def conv_lat_lon(latitude, longitude, format="D.D4"):
|
||||
# we start the function changing latitude/longitude in english
|
||||
if latitude.find('N') == -1 and latitude.find('S') == -1:
|
||||
# entry is not in english, convert to english
|
||||
latitude = latitude.replace(translate_en_loc['N'],'N')
|
||||
latitude = latitude.replace(translate_en_loc['S'],'S')
|
||||
latitude = latitude.replace(translate_en_loc['N'], 'N')
|
||||
latitude = latitude.replace(translate_en_loc['S'], 'S')
|
||||
if longitude.find('E') == -1 and longitude.find('W') == -1:
|
||||
# entry is not in english, convert to english
|
||||
longitude = longitude.replace(translate_en_loc['W'],'W')
|
||||
longitude = longitude.replace(translate_en_loc['E'],'E')
|
||||
longitude = longitude.replace(translate_en_loc['W'], 'W')
|
||||
longitude = longitude.replace(translate_en_loc['E'], 'E')
|
||||
|
||||
# take away leading spaces
|
||||
latitude = latitude.lstrip()
|
||||
@ -383,7 +383,7 @@ def conv_lat_lon(latitude, longitude, format="D.D4"):
|
||||
longitude = longitude[1:] + longitude[0]
|
||||
|
||||
# convert to float
|
||||
lat_float = __convert_float_val(latitude, 'lat')
|
||||
lat_float = __convert_float_val(latitude, 'lat')
|
||||
lon_float = __convert_float_val(longitude, 'lon')
|
||||
|
||||
# give output (localized if needed)
|
||||
@ -403,19 +403,19 @@ def conv_lat_lon(latitude, longitude, format="D.D4"):
|
||||
# correct possible roundoff error
|
||||
str_lon = "%.4f" % (lon_float)
|
||||
if str_lon == "180.0000":
|
||||
str_lon ="-180.0000"
|
||||
return ("%.4f" % lat_float , str_lon)
|
||||
str_lon = "-180.0000"
|
||||
return ("%.4f" % lat_float, str_lon)
|
||||
|
||||
if format == "D.D8" or format == "RT90":
|
||||
# correct possible roundoff error
|
||||
str_lon = "%.8f" % (lon_float)
|
||||
if str_lon == "180.00000000":
|
||||
str_lon ="-180.00000000"
|
||||
str_lon = "-180.00000000"
|
||||
if format == "RT90":
|
||||
tx = __conv_WGS84_SWED_RT90(lat_float, lon_float)
|
||||
return ("%i" % tx[0], "%i" % tx[1])
|
||||
else:
|
||||
return ("%.8f" % lat_float , str_lon)
|
||||
return ("%.8f" % lat_float, str_lon)
|
||||
|
||||
if format == "GEDCOM":
|
||||
# The 5.5.1 spec is inconsistent. Length is supposedly 5 to 8 chars,
|
||||
@ -426,20 +426,21 @@ def conv_lat_lon(latitude, longitude, format="D.D4"):
|
||||
if lon_float >= 0:
|
||||
str_lon = "%.6f" % (lon_float)
|
||||
if str_lon == "180.000000":
|
||||
str_lon ="W180.000000"
|
||||
str_lon = "W180.000000"
|
||||
else:
|
||||
str_lon = "E" + str_lon
|
||||
else:
|
||||
str_lon = "W" + "%.6f" % (-lon_float)
|
||||
str_lon = str_lon[:-5] + str_lon[-5:].rstrip("0")
|
||||
str_lat = ("%s%.6f" % (("N", lat_float) if lat_float >= 0 else ("S", -lat_float)))
|
||||
str_lat = ("%s%.6f" % (("N", lat_float) if lat_float >= 0
|
||||
else ("S", -lat_float)))
|
||||
str_lat = str_lat[:-5] + str_lat[-5:].rstrip("0")
|
||||
return (str_lat, str_lon)
|
||||
|
||||
deg_lat = int(lat_float)
|
||||
deg_lon = int(lon_float)
|
||||
min_lat = int(60. * (lat_float - float(deg_lat) ))
|
||||
min_lon = int(60. * (lon_float - float(deg_lon) ))
|
||||
min_lat = int(60. * (lat_float - float(deg_lat)))
|
||||
min_lon = int(60. * (lon_float - float(deg_lon)))
|
||||
sec_lat = 3600. * (lat_float - float(deg_lat) - float(min_lat) / 60.)
|
||||
sec_lon = 3600. * (lon_float - float(deg_lon) - float(min_lon) / 60.)
|
||||
|
||||
@ -463,14 +464,14 @@ def conv_lat_lon(latitude, longitude, format="D.D4"):
|
||||
dir_lat = translate_en_loc['N']
|
||||
else:
|
||||
dir_lat = translate_en_loc['S']
|
||||
sign_lat= "-"
|
||||
sign_lon= "+"
|
||||
sign_lat = "-"
|
||||
sign_lon = "+"
|
||||
dir_lon = ""
|
||||
if lon_float >= 0.:
|
||||
dir_lon = translate_en_loc['E']
|
||||
else:
|
||||
dir_lon = translate_en_loc['W']
|
||||
sign_lon= "-"
|
||||
sign_lon = "-"
|
||||
|
||||
if format == "DEG":
|
||||
str_lat = ("%d°%02d'%05.2f\"" % (deg_lat, min_lat, sec_lat)) + dir_lat
|
||||
@ -497,10 +498,10 @@ def conv_lat_lon(latitude, longitude, format="D.D4"):
|
||||
return (str_lat, str_lon)
|
||||
|
||||
if format == "DEG-:":
|
||||
if sign_lat=="+":
|
||||
if sign_lat == "+":
|
||||
sign_lat = ""
|
||||
sign_lon_h = sign_lon
|
||||
if sign_lon=="+":
|
||||
if sign_lon == "+":
|
||||
sign_lon_h = ""
|
||||
str_lat = sign_lat + ("%d:%02d:%05.2f" % (deg_lat, min_lat, sec_lat))
|
||||
str_lon = sign_lon_h + ("%d:%02d:%05.2f" % (deg_lon, min_lon, sec_lon))
|
||||
@ -598,7 +599,7 @@ def __conv_WGS84_SWED_RT90(lat, lon):
|
||||
L0 = math.radians(15.8062845294) # 15 deg 48 min 22.624306 sec
|
||||
k0 = 1.00000561024
|
||||
a = 6378137.0 # meter
|
||||
at = a/(1.0+n)*(1.0+ 1.0/4.0* pow(n,2)+1.0/64.0*pow(n,4))
|
||||
at = a/(1.0+n)*(1.0+ 1.0/4.0* pow(n, 2)+1.0/64.0*pow(n, 4))
|
||||
FN = -667.711 # m
|
||||
FE = 1500064.274 # m
|
||||
|
||||
@ -606,20 +607,21 @@ def __conv_WGS84_SWED_RT90(lat, lon):
|
||||
lat_rad = math.radians(lat)
|
||||
lon_rad = math.radians(lon)
|
||||
A = e2
|
||||
B = 1.0/6.0*(5.0*pow(e2,2) - pow(e2,3))
|
||||
C = 1.0/120.0*(104.0*pow(e2,3) - 45.0*pow(e2,4))
|
||||
D = 1.0/1260.0*(1237.0*pow(e2,4))
|
||||
B = 1.0/6.0*(5.0*pow(e2, 2) - pow(e2, 3))
|
||||
C = 1.0/120.0*(104.0*pow(e2, 3) - 45.0*pow(e2, 4))
|
||||
D = 1.0/1260.0*(1237.0*pow(e2, 4))
|
||||
DL = lon_rad - L0
|
||||
E = A + B*pow(math.sin(lat_rad),2) + \
|
||||
C*pow(math.sin(lat_rad),4) + \
|
||||
D*pow(math.sin(lat_rad),6)
|
||||
E = A + B*pow(math.sin(lat_rad), 2) + \
|
||||
C*pow(math.sin(lat_rad), 4) + \
|
||||
D*pow(math.sin(lat_rad), 6)
|
||||
psi = lat_rad - math.sin(lat_rad)*math.cos(lat_rad)*E
|
||||
xi = math.atan2(math.tan(psi),math.cos(DL))
|
||||
xi = math.atan2(math.tan(psi), math.cos(DL))
|
||||
eta = atanh(math.cos(psi)*math.sin(DL))
|
||||
B1 = 1.0/2.0*n - 2.0/3.0*pow(n,2) + 5.0/16.0*pow(n,3) + 41.0/180.0*pow(n,4)
|
||||
B2 = 13.0/48.0*pow(n,2) - 3.0/5.0*pow(n,3) + 557.0/1440.0*pow(n,4)
|
||||
B3 = 61.0/240.0*pow(n,3) - 103.0/140.0*pow(n,4)
|
||||
B4 = 49561.0/161280.0*pow(n,4)
|
||||
B1 = 1.0/2.0*n - 2.0/3.0*pow(n, 2) + 5.0/16.0*pow(n, 3) + \
|
||||
41.0/180.0*pow(n, 4)
|
||||
B2 = 13.0/48.0*pow(n, 2) - 3.0/5.0*pow(n, 3) + 557.0/1440.0*pow(n, 4)
|
||||
B3 = 61.0/240.0*pow(n, 3) - 103.0/140.0*pow(n, 4)
|
||||
B4 = 49561.0/161280.0*pow(n, 4)
|
||||
X = xi + B1*math.sin(2.0*xi)*math.cosh(2.0*eta) + \
|
||||
B2*math.sin(4.0*xi)*math.cosh(4.0*eta) + \
|
||||
B3*math.sin(6.0*xi)*math.cosh(6.0*eta) + \
|
||||
@ -644,16 +646,17 @@ def __conv_SWED_RT90_WGS84(X, Y):
|
||||
L0 = math.radians(15.8062845294) # 15 deg 48 min 22.624306 sec
|
||||
k0 = 1.00000561024
|
||||
a = 6378137.0 # meter
|
||||
at = a/(1.0+n)*(1.0+ 1.0/4.0* pow(n,2)+1.0/64.0*pow(n,4))
|
||||
at = a/(1.0+n)*(1.0+ 1.0/4.0* pow(n, 2)+1.0/64.0*pow(n, 4))
|
||||
FN = -667.711 # m
|
||||
FE = 1500064.274 # m
|
||||
|
||||
xi = (X - FN)/(k0*at)
|
||||
eta = (Y - FE)/(k0*at)
|
||||
D1 = 1.0/2.0*n - 2.0/3.0*pow(n,2) + 37.0/96.0*pow(n,3) - 1.0/360.0*pow(n,4)
|
||||
D2 = 1.0/48.0*pow(n,2) + 1.0/15.0*pow(n,3) - 437.0/1440.0*pow(n,4)
|
||||
D3 = 17.0/480.0*pow(n,3) - 37.0/840.0*pow(n,4)
|
||||
D4 = 4397.0/161280.0*pow(n,4)
|
||||
D1 = 1.0/2.0*n - 2.0/3.0*pow(n, 2) + 37.0/96.0*pow(n, 3) - \
|
||||
1.0/360.0*pow(n, 4)
|
||||
D2 = 1.0/48.0*pow(n, 2) + 1.0/15.0*pow(n, 3) - 437.0/1440.0*pow(n, 4)
|
||||
D3 = 17.0/480.0*pow(n, 3) - 37.0/840.0*pow(n, 4)
|
||||
D4 = 4397.0/161280.0*pow(n, 4)
|
||||
xip = xi - D1*math.sin(2.0*xi)*math.cosh(2.0*eta) - \
|
||||
D2*math.sin(4.0*xi)*math.cosh(4.0*eta) - \
|
||||
D3*math.sin(6.0*xi)*math.cosh(6.0*eta) - \
|
||||
@ -663,15 +666,15 @@ def __conv_SWED_RT90_WGS84(X, Y):
|
||||
D3*math.cos(6.0*xi)*math.sinh(6.0*eta) - \
|
||||
D4*math.cos(8.0*xi)*math.sinh(8.0*eta)
|
||||
psi = math.asin(math.sin(xip)/math.cosh(etap))
|
||||
DL = math.atan2(math.sinh(etap),math.cos(xip))
|
||||
DL = math.atan2(math.sinh(etap), math.cos(xip))
|
||||
LON = L0 + DL
|
||||
A = e2 + pow(e2,2) + pow(e2,3) + pow(e2,4)
|
||||
B = -1.0/6.0*(7.0*pow(e2,2) + 17*pow(e2,3) + 30*pow(e2,4))
|
||||
C = 1.0/120.0*(224.0*pow(e2,3) + 889.0*pow(e2,4))
|
||||
D = 1.0/1260.0*(4279.0*pow(e2,4))
|
||||
E = A + B*pow(math.sin(psi),2) + \
|
||||
C*pow(math.sin(psi),4) + \
|
||||
D*pow(math.sin(psi),6)
|
||||
A = e2 + pow(e2, 2) + pow(e2, 3) + pow(e2, 4)
|
||||
B = -1.0/6.0*(7.0*pow(e2, 2) + 17*pow(e2, 3) + 30*pow(e2, 4))
|
||||
C = 1.0/120.0*(224.0*pow(e2, 3) + 889.0*pow(e2, 4))
|
||||
D = 1.0/1260.0*(4279.0*pow(e2, 4))
|
||||
E = A + B*pow(math.sin(psi), 2) + \
|
||||
C*pow(math.sin(psi), 4) + \
|
||||
D*pow(math.sin(psi), 6)
|
||||
LAT = psi + math.sin(psi)*math.cos(psi)*E
|
||||
LAT = math.degrees(LAT)
|
||||
LON = math.degrees(LON)
|
||||
@ -686,7 +689,7 @@ def __conv_SWED_RT90_WGS84(X, Y):
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
if __name__ == '__main__':
|
||||
def test_formats_success(lat1,lon1, text=''):
|
||||
def test_formats_success(lat1, lon1, text=''):
|
||||
format0 = "D.D4"
|
||||
format1 = "D.D8"
|
||||
format2 = "DEG"
|
||||
@ -697,29 +700,29 @@ if __name__ == '__main__':
|
||||
format7 = "RT90"
|
||||
format8 = "GEDCOM"
|
||||
print("Testing conv_lat_lon function, "+text+':')
|
||||
res1, res2 = conv_lat_lon(lat1,lon1,format0)
|
||||
print(lat1,lon1,"in format",format0, "is ",res1,res2)
|
||||
res1, res2 = conv_lat_lon(lat1,lon1,format1)
|
||||
print(lat1,lon1,"in format",format1, "is ",res1,res2)
|
||||
res1, res2 = conv_lat_lon(lat1,lon1,format2)
|
||||
print(lat1,lon1,"in format",format2, "is ",res1,res2)
|
||||
res1, res2 = conv_lat_lon(lat1,lon1,format3)
|
||||
print(lat1,lon1,"in format",format3, "is ",res1,res2)
|
||||
res = conv_lat_lon(lat1,lon1,format4)
|
||||
print(lat1,lon1,"in format",format4, "is ",res)
|
||||
res = conv_lat_lon(lat1,lon1,format5)
|
||||
print(lat1,lon1,"in format",format5, "is",res)
|
||||
res = conv_lat_lon(lat1,lon1,format6)
|
||||
print(lat1,lon1,"in format",format6, "is",res)
|
||||
res1, res2 = conv_lat_lon(lat1,lon1,format7)
|
||||
print(lat1,lon1,"in format",format7, "is",res1,res2,"\n")
|
||||
res1, res2 = conv_lat_lon(lat1,lon1,format8)
|
||||
print(lat1,lon1,"in format",format8, "is",res1,res2,"\n")
|
||||
res1, res2 = conv_lat_lon(lat1, lon1, format0)
|
||||
print(lat1, lon1, "in format", format0, "is ", res1, res2)
|
||||
res1, res2 = conv_lat_lon(lat1, lon1, format1)
|
||||
print(lat1, lon1, "in format", format1, "is ", res1, res2)
|
||||
res1, res2 = conv_lat_lon(lat1, lon1, format2)
|
||||
print(lat1, lon1, "in format", format2, "is ", res1, res2)
|
||||
res1, res2 = conv_lat_lon(lat1, lon1, format3)
|
||||
print(lat1, lon1, "in format", format3, "is ", res1, res2)
|
||||
res = conv_lat_lon(lat1, lon1, format4)
|
||||
print(lat1, lon1, "in format", format4, "is ", res)
|
||||
res = conv_lat_lon(lat1, lon1, format5)
|
||||
print(lat1, lon1, "in format", format5, "is", res)
|
||||
res = conv_lat_lon(lat1, lon1, format6)
|
||||
print(lat1, lon1, "in format", format6, "is", res)
|
||||
res1, res2 = conv_lat_lon(lat1, lon1, format7)
|
||||
print(lat1, lon1, "in format", format7, "is", res1, res2, "\n")
|
||||
res1, res2 = conv_lat_lon(lat1, lon1, format8)
|
||||
print(lat1, lon1, "in format", format8, "is", res1, res2, "\n")
|
||||
|
||||
def test_formats_fail(lat1,lon1,text=''):
|
||||
def test_formats_fail(lat1, lon1, text=''):
|
||||
print("This test should make conv_lat_lon function fail, "+text+":")
|
||||
res1, res2 = conv_lat_lon(lat1,lon1)
|
||||
print(lat1,lon1," fails to convert, result=", res1,res2,"\n")
|
||||
res1, res2 = conv_lat_lon(lat1, lon1)
|
||||
print(lat1, lon1, " fails to convert, result=", res1, res2, "\n")
|
||||
|
||||
def test_RT90_conversion():
|
||||
"""
|
||||
@ -728,128 +731,130 @@ if __name__ == '__main__':
|
||||
la = 59.0 + 40.0/60. + 9.09/3600.0
|
||||
lo = 12.0 + 58.0/60.0 + 57.74/3600.0
|
||||
x, y = __conv_WGS84_SWED_RT90(la, lo)
|
||||
lanew, lonew = __conv_SWED_RT90_WGS84(x,y)
|
||||
lanew, lonew = __conv_SWED_RT90_WGS84(x, y)
|
||||
assert math.fabs(lanew - la) < 1e-6, math.fabs(lanew - la)
|
||||
assert math.fabs(lonew - lo) < 1e-6, math.fabs(lonew - lo)
|
||||
|
||||
lat, lon = '50.849888888888', '2.885897222222'
|
||||
test_formats_success(lat,lon)
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = ' 50°50\'59.60"N', ' 2°53\'9.23"E'
|
||||
test_formats_success(lat,lon)
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = ' 50 : 50 : 59.60 ', ' -2:53 : 9.23 '
|
||||
test_formats_success(lat,lon)
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = ' dummy', ' 2#53 \' 9.23 " E '
|
||||
test_formats_fail(lat,lon)
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = ' 50:50: 59.60', ' d u m my'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = ' 50°59.60"N', ' 2°53\'E'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = ' 11° 11\' 11" N, 11° 11\' 11" O', ' '
|
||||
test_formats_fail(lat,lon)
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = ' 50°59.60"N', ' 2°53\'E'
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = ' 11° 11\' 11" N, 11° 11\' 11" O', ' '
|
||||
test_formats_fail(lat, lon)
|
||||
# very small negative
|
||||
lat, lon = '-0.00006', '-0.00006'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = '-0.00006', '-0.00006'
|
||||
test_formats_success(lat, lon)
|
||||
# missing direction N/S
|
||||
lat, lon = ' 50°59.60"', ' 2°53\'E'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = ' 50°59.60"', ' 2°53\'E'
|
||||
test_formats_fail(lat, lon)
|
||||
# wrong direction on latitude
|
||||
lat, lon = ' 50°59.60"E', ' 2°53\'N'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = ' 50°59.60"E', ' 2°53\'N'
|
||||
test_formats_fail(lat, lon)
|
||||
# same as above
|
||||
lat, lon = ' 50°59.99"E', ' 2°59\'59.99"N'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = ' 50°59.99"E', ' 2°59\'59.99"N'
|
||||
test_formats_fail(lat, lon)
|
||||
# test precision
|
||||
lat, lon = ' 50°59.99"S', ' 2°59\'59.99"E'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = ' 50°59.99"S', ' 2°59\'59.99"E'
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = 'N50.849888888888', 'E2.885897222222'
|
||||
test_formats_success(lat,lon)
|
||||
test_formats_success(lat, lon)
|
||||
# to large value of lat
|
||||
lat, lon = '90.849888888888', '2.885897222222'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '90.849888888888', '2.885897222222'
|
||||
test_formats_fail(lat, lon)
|
||||
# extreme values allowed
|
||||
lat, lon = '90', '-180'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = '90', '-180'
|
||||
test_formats_success(lat, lon)
|
||||
# extreme values allowed
|
||||
lat, lon = '90° 00\' 00.00" S ', '179° 59\'59.99"W'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = '90° 00\' 00.00" S ', '179° 59\'59.99"W'
|
||||
test_formats_success(lat, lon)
|
||||
# extreme value not allowed
|
||||
lat, lon = '90° 00\' 00.00" N', '180° 00\'00.00" E'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '90° 00\' 00.00" N', '180° 00\'00.00" E'
|
||||
test_formats_fail(lat, lon)
|
||||
# extreme values allowed
|
||||
lat, lon = '90: 00: 00.00 ', '-179: 59:59.99'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = '90: 00: 00.00 ', '-179: 59:59.99'
|
||||
test_formats_success(lat, lon)
|
||||
# extreme value not allowed
|
||||
lat, lon = '90° 00\' 00.00" N', '180:00:00.00'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '90° 00\' 00.00" N', '180:00:00.00'
|
||||
test_formats_fail(lat, lon)
|
||||
# extreme values not allowed
|
||||
lat, lon = '90', '180'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = ' 89°59\'60"N', ' 2°53\'W'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = ' 89°60\'00"N', ' 2°53\'W'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = ' 89.1°40\'00"N', ' 2°53\'W'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = ' 89°40\'00"N', ' 2°53.1\'W'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '0', '0'
|
||||
test_formats_success(lat,lon,
|
||||
"Special 0 value, crossing 0-meridian and equator")
|
||||
lat, lon = '90', '180'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = ' 89°59\'60"N', ' 2°53\'W'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = ' 89°60\'00"N', ' 2°53\'W'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = ' 89.1°40\'00"N', ' 2°53\'W'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = ' 89°40\'00"N', ' 2°53.1\'W'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = '0', '0'
|
||||
test_formats_success(lat, lon,
|
||||
"Special 0 value, crossing 0-meridian and equator")
|
||||
# small values close to equator
|
||||
lat, lon = ' 1°1"N', ' 1°1\'E'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = ' 1°1"N', ' 1°1\'E'
|
||||
test_formats_success(lat, lon)
|
||||
# roundoff
|
||||
lat, lon = ' 1°59.999"N', ' 1°59.999"E'
|
||||
test_formats_success(lat,lon,'Examples of round off and how it behaves')
|
||||
lat, lon = ' 1°59\'59.9999"N', ' 1°59\'59.9999"E'
|
||||
test_formats_success(lat,lon,'Examples of round off and how it behaves')
|
||||
lat, lon = '89°59\'59.9999"S', '179°59\'59.9999"W'
|
||||
test_formats_success(lat,lon,'Examples of round off and how it behaves')
|
||||
lat, lon = '89°59\'59.9999"N', '179°59\'59.9999"E'
|
||||
test_formats_success(lat,lon,'Examples of round off and how it behaves')
|
||||
lat, lon = ' 1°59.999"N', ' 1°59.999"E'
|
||||
test_formats_success(lat, lon, 'Examples of round off and how it behaves')
|
||||
lat, lon = ' 1°59\'59.9999"N', ' 1°59\'59.9999"E'
|
||||
test_formats_success(lat, lon, 'Examples of round off and how it behaves')
|
||||
lat, lon = '89°59\'59.9999"S', '179°59\'59.9999"W'
|
||||
test_formats_success(lat, lon, 'Examples of round off and how it behaves')
|
||||
lat, lon = '89°59\'59.9999"N', '179°59\'59.9999"E'
|
||||
test_formats_success(lat, lon, 'Examples of round off and how it behaves')
|
||||
#insane number of decimals:
|
||||
lat, lon = '89°59\'59.99999999"N', '179°59\'59.99999999"E'
|
||||
test_formats_success(lat,lon,'Examples of round off and how it begaves')
|
||||
lat, lon = '89°59\'59.99999999"N', '179°59\'59.99999999"E'
|
||||
test_formats_success(lat, lon, 'Examples of round off and how it begaves')
|
||||
#recognise '' as seconds "
|
||||
lat, lon = '89°59\'59.99\'\' N', '179°59\'59.99\'\'E'
|
||||
test_formats_success(lat,lon, "input \" as ''")
|
||||
lat, lon = '89°59\'59.99\'\' N', '179°59\'59.99\'\'E'
|
||||
test_formats_success(lat, lon, "input \" as ''")
|
||||
#test localisation of , and . as delimiter
|
||||
lat, lon = '50.849888888888', '2,885897222222'
|
||||
test_formats_success(lat,lon, 'localisation of . and , ')
|
||||
lat, lon = '89°59\'59.9999"S', '179°59\'59,9999"W'
|
||||
test_formats_success(lat,lon, 'localisation of . and , ')
|
||||
lat, lon = '89°59\'1.599,999"S', '179°59\'59,9999"W'
|
||||
test_formats_fail(lat,lon, 'localisation of . and , ')
|
||||
test_formats_success(lat, lon, 'localisation of . and , ')
|
||||
lat, lon = '89°59\'59.9999"S', '179°59\'59,9999"W'
|
||||
test_formats_success(lat, lon, 'localisation of . and , ')
|
||||
lat, lon = '89°59\'1.599,999"S', '179°59\'59,9999"W'
|
||||
test_formats_fail(lat, lon, 'localisation of . and , ')
|
||||
#rest
|
||||
lat, lon = '81.2', '-182.3'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '-91.2', '-1'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '++50:10:1', '2:1:2'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '-50:10:1', '-+2:1:2'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = '-50::1', '-2:1:2'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '- 50 : 2 : 1 ', '-2:1:2'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = '+ 50:2 : 1', '-2:1:2'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = '+50:', '-2:1:2'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '+50:1', '-2:1:2'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = '+50: 0 : 1 : 1', '-2:1:2'
|
||||
test_formats_fail(lat,lon)
|
||||
lat, lon = '81.2', '-182.3'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = '-91.2', '-1'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = '++50:10:1', '2:1:2'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = '-50:10:1', '-+2:1:2'
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = '-50::1', '-2:1:2'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = '- 50 : 2 : 1 ', '-2:1:2'
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = '+ 50:2 : 1', '-2:1:2'
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = '+50:', '-2:1:2'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = '+50:1', '-2:1:2'
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = '+50: 0 : 1 : 1', '-2:1:2'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = '+61° 43\' 60.00"', '+17° 7\' 60.00"'
|
||||
test_formats_fail(lat,lon)
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = '+61° 44\' 00.00"N', '+17° 8\' 00.00"E'
|
||||
test_formats_success(lat,lon)
|
||||
lat, lon = ': 0 : 1 : 1', ':1:2'
|
||||
test_formats_fail(lat,lon)
|
||||
test_formats_success(lat, lon)
|
||||
lat, lon = ': 0 : 1 : 1', ':1:2'
|
||||
test_formats_fail(lat, lon)
|
||||
lat, lon = 'N 50º52\'21.92"', 'E 124º52\'21.92"'
|
||||
test_formats_success(lat,lon, 'New format with N/E first and another º - character')
|
||||
test_formats_success(lat, lon,
|
||||
'New format with N/E first and another º - character')
|
||||
lat, lon = 'S 50º52\'21.92"', 'W 124º52\'21.92"'
|
||||
test_formats_success(lat,lon, 'New format with S/W first and another º - character')
|
||||
test_formats_success(lat, lon,
|
||||
'New format with S/W first and another º - character')
|
||||
|
||||
test_RT90_conversion()
|
||||
|
@ -48,7 +48,7 @@ gender = {
|
||||
Person.UNKNOWN : _("gender|unknown"),
|
||||
}
|
||||
|
||||
def format_gender( type):
|
||||
def format_gender(type):
|
||||
return gender.get(type[0], _("Invalid"))
|
||||
|
||||
conf_strings = {
|
||||
@ -63,16 +63,16 @@ conf_strings = {
|
||||
|
||||
family_rel_descriptions = {
|
||||
FamilyRelType.MARRIED : _("A legal or common-law relationship "
|
||||
"between a husband and wife"),
|
||||
"between a husband and wife"),
|
||||
FamilyRelType.UNMARRIED : _("No legal or common-law relationship "
|
||||
"between man and woman"),
|
||||
"between man and woman"),
|
||||
FamilyRelType.CIVIL_UNION : _("An established relationship between "
|
||||
"members of the same sex"),
|
||||
"members of the same sex"),
|
||||
FamilyRelType.UNKNOWN : _("Unknown relationship between a man "
|
||||
"and woman"),
|
||||
"and woman"),
|
||||
FamilyRelType.CUSTOM : _("An unspecified relationship between "
|
||||
"a man and woman"),
|
||||
"a man and woman"),
|
||||
}
|
||||
|
||||
data_recover_msg = _('The data can only be recovered by Undo operation '
|
||||
'or by quitting with abandoning changes.')
|
||||
'or by quitting with abandoning changes.')
|
||||
|
Loading…
x
Reference in New Issue
Block a user