44 lines
772 B
Awk
Executable File
44 lines
772 B
Awk
Executable File
#!/usr/bin/awk -f
|
|
|
|
function rad(deg) {
|
|
return deg * 3.14159265 / 180.0
|
|
}
|
|
|
|
function arccos(x) {
|
|
return 2 * atan2(sqrt(1 - x*x) / (1 + x), 1)
|
|
}
|
|
|
|
function s(lat1, lon1, lat2, lon2) {
|
|
rlat1 = rad(lat1)
|
|
rlon1 = rad(lon1)
|
|
rlat2 = rad(lat2)
|
|
rlon2 = rad(lon2)
|
|
# printf("%f %f %f %f\n", rlat1, rlon1, rlat2, rlon2)
|
|
return arccos(sin(rlat1)*sin(rlat2) + cos(rlat1)*cos(rlat2)*cos(rlon2 - rlon1))
|
|
}
|
|
|
|
BEGIN {
|
|
tlat = ARGV[1]
|
|
tlon = ARGV[2]
|
|
ARGC = 1
|
|
|
|
minhood = "Trainstation"
|
|
mindist = 99999
|
|
}
|
|
# match some word, then 2 floats
|
|
/(\<.*\>)\s+(-?[0-9]+\.[0-9]+)\s+(-?[0-9]+\.[0-9]+)/{
|
|
hood = $1
|
|
lat = $2
|
|
lon = $3
|
|
|
|
dist = s(lat, lon, tlat, tlon)
|
|
# printf("%22s %f\n", hood, dist)
|
|
if (dist < mindist) {
|
|
mindist = dist
|
|
minhood = hood
|
|
}
|
|
}
|
|
END {
|
|
printf("%s\n", minhood)
|
|
}
|