Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Earth Distances solution in Uncategorized category for Earth Distances by capback250
# migrated from python 2.7
import re
import math
rad = 6371
def coord_builder(coords_minutes):
angle = 0
pattern = re.split('°|′|″', coords_minutes)
for symbol in range(len(pattern)):
if symbol == 0:
angle += int(pattern[symbol])
elif symbol == 1:
angle += int(pattern[symbol])/float(60)
elif symbol == 2:
angle += int(pattern[symbol])/float(3600)
else:
if pattern[symbol] in 'N,W':
pass
else:
angle = 0 - angle
return angle
def distance(first, second):
if ',' in first:
llat1, llong1 = [coord_builder(str(x)) for x in first.split(',')]
else:
llat1, llong1 = [coord_builder(str(x)) for x in first.split(' ')]
if ',' in second:
llat2, llong2 = [coord_builder(str(y)) for y in second.split(',')]
else:
llat2, llong2 = [coord_builder(str(y)) for y in second.split(' ')]
#в радианах
lat1 = llat1*math.pi/180.
lat2 = llat2*math.pi/180.
long1 = llong1*math.pi/180.
long2 = llong2*math.pi/180.
#косинусы и синусы широт и разницы долгот
cl1 = math.cos(lat1)
cl2 = math.cos(lat2)
sl1 = math.sin(lat1)
sl2 = math.sin(lat2)
delta = long2 - long1
cdelta = math.cos(delta)
sdelta = math.sin(delta)
#вычисления длины большого круга
y = math.sqrt(math.pow(cl2*sdelta,2)+math.pow(cl1*sl2-sl1*cl2*cdelta,2))
x = sl1*sl2+cl1*cl2*cdelta
ad = math.atan2(y,x)
dist = ad*rad
return round(dist, 1)
Oct. 11, 2015