Lat/Long Distance Calculation


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Lat/Long Distance Calculation
# 1  
Old 04-11-2007
Lat/Long Distance Calculation

I amtrying to write a script that would compute the distance between an "x" number of points. This is what I have come up with so far and it is not working. Can anyone modify it to make it work?

Code:
A=34.16597 B=-84.33244
C=34.2344 D=-84.29189

   test "$A" -eq "$C" -o "$B" -eq "$D"
then
echo "The distance is zero"
else
if
   "sin$Asin$C + cos$Acos$Ccos[$B - $D]" -gt 1
then
echo "The distance is"
3963.1 "*" ARCOS[1]
else
echo "The distance is"
3963.1 "*" ARCOS[sin$Asin$C+cos$Acos$Ccos[$B-$D]
fi
fi

Thanks!
# 2  
Old 04-11-2007
nawk on solaris has the following arithmetic functions.

Arithmetic Functions
The arithmetic functions, except for int, are based on the
ISO C standard. The behavior is undefined in cases where the
ISO C standard specifies that an error be returned or that
the behavior is undefined. Although the grammar permits
built-in functions to appear with no arguments or
parentheses, unless the argument or parentheses are indi-
cated as optional in the following list (by displaying them
within the [ ] brackets), such use is undefined.

atan2(y,x) Return arctangent of y/x.

cos(x) Return cosine of x, where x is in radians.

sin(x) Return sine of x, where x is in radians.

exp(x) Return the exponential function of x.

log(x) Return the natural logarithm of x.

sqrt(x) Return the square root of x.

int(x) Truncate its argument to an integer. It will
be truncated toward 0 when x > 0.

rand() Return a random number n, such that 0 < n <
1.

srand([expr]) Set the seed value for rand to expr or use
the time of day if expr is omitted. The pre-
vious seed value will be returned.



It has been too long since I took trig to figure out the manipulation to do acos, but rewrite your formulats using only the above numeric functions.

Also remember, it does its calculations in radians, not degrees, so you have to adjust for that too.
# 3  
Old 04-11-2007
Computing the inverse trig functions would be quite a chore. This really should be written in C. If you must use a script, maybe you can use a little C program to give you access to the C library? Here is a quick C program...
Code:
$ cat mathtool.c
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdio.h>
int main(int argc, char *argv[])  {
        double arg2,result;
        arg2=strtod(argv[2],(char **) NULL);
        if (!strcmp(argv[1], "asin")) {
                result=asin(arg2);
        } else if (!strcmp(argv[1], "asind")) {
                result=asin(arg2)*57.29577951308232087679815481410517033240547246656432154916024386120;
        } else if (!strcmp(argv[1], "acos")) {
                result=acos(arg2);
        } else if (!strcmp(argv[1], "acosd")) {
                result=acos(arg2)*57.29577951308232087679815481410517033240547246656432154916024386120;
        } else if (!strcmp(argv[1], "atan")) {
                result=atan(arg2);
        } else if (!strcmp(argv[1], "atand")) {
                result=atan(arg2)*57.29577951308232087679815481410517033240547246656432154916024386120;
        } else {
                printf("error \n");
        }
        printf("%-20.6f \n", result);
        exit(0);
}
$
I-search:
$ gcc mathtool.c -l m -o mathtool
$ ./mathtool asin 1.0
1.570796
$ ./mathtool asind 1.0
90.000000

I only put in asin, acos, and atan, but you could add in the regular trig functions too. I also put in asind, acosd, and atand which converts the answer to degrees (not degrees, minutes, seconds).
# 4  
Old 04-12-2007
If you have Python, here's an alternative:
Code:
from math import sin , cos, acos
A = 34.16597 
B = -84.33244
C = 34.2344 
D = -84.29189
result = ( sin(A) * sin(C) )+  ( cos(A) * cos(C) * cos(B-D) )
if A == C or B == D:
    print "The distance is zero"
elif result > 1:
    print "The distance is " , 3963.1 * acos(1) 
else:
    print "The distance is " , acos(result)

output:
Code:
# ./test.py
The distance is  0.0782622048633

Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Edit distance using perl or awk

Dear all, I am working on a large Sindhi lexicon which I hope to complete by 2017 and place in open source. The database is in Arabic script in two columns delimited by an equal to sign. Column 1 contains a word or words without the short vowel and also some extraneous information which is... (0 Replies)
Discussion started by: gimley
0 Replies

2. Shell Programming and Scripting

Geographical distance between long and lat in bash

Does anyone know of any script or packages that allow the calculation of the geographical distance between two points of lat/long from within a bash shell? I have been searching the web for the past few days and none of the options seem compatible with bash variables... (eg. geodist) Many... (3 Replies)
Discussion started by: lily-anne
3 Replies

3. Shell Programming and Scripting

finding distance between numbers

Hi, I have a file as ABC 1634230,1634284,1634349,1634468 1634272,1634301,1634356,1634534 What I want is to find distance between the numbers.. column 1 is the gene name and column 2 are starts and column 3 are their respective stops for the starts. So what I want is column 3 which has +1... (2 Replies)
Discussion started by: Diya123
2 Replies

4. UNIX for Dummies Questions & Answers

How to make a distance matrix

Hi, I'm trying to generate a distance matrix between sample pairs for use in a tree-drawing program (example below). The example below demonstrates what I'd like to get out of the data - essentially, to calculate the proportion of positions where two samples differ. Any help much appreciated!... (1 Reply)
Discussion started by: auburn
1 Replies

5. Shell Programming and Scripting

Calculating distance between two LAT long coordinates

hi, i have a pair of latitude and longitude and i want to calculate the distance between these two points. In vbscript i achieved in the following way...Now i want to implement this in unix shell scripting.... <% Dim lat1, lon1, lat2, lon2 const pi = 3.14159265358979323846 ... (8 Replies)
Discussion started by: aemunathan
8 Replies

6. Shell Programming and Scripting

Calculate distance and azimuth

Hi all, I have a data file like this lat lon lat lon 12.000 25.125 14.235 25.012 14.200 81.000 25.584 25.014 45.023 25.365 25.152 35.222 I want to calculate distance and azimuth between this points eg:- 12.000,25.125 and 14.235,25.012 I want to use awk programming... (3 Replies)
Discussion started by: chamara
3 Replies

7. Programming

Converting distance list to distance matrix in R

Hi power user, I have this type of data (distance list): file1 A B 10 B C 20 C D 50I want output like this # A B C D A 0 10 30 80 B 10 0 20 70 C 30 20 0 50 D 80 70 50 0 Which is a distance matrix I have tried... (0 Replies)
Discussion started by: anjas
0 Replies

8. Shell Programming and Scripting

program to calculate distance between 5 atoms

Hello, I am a beginner with perl. I have a perl program to calculate the distance between 5 atoms or more. i have an array which looks like this: 6.324 32.707 50.379 5.197 32.618 46.826 4.020 36.132 46.259 7.131 38.210 45.919 6.719 38.935 42.270 2.986 39.221 ... (1 Reply)
Discussion started by: annie_singh
1 Replies

9. UNIX for Dummies Questions & Answers

Long Distance UNIX (Solaris) Cloning ?

Need some advice and guidance for this UNIX beginner. Due to downsizing I have inherited the SysAdmin duties..(sigh). Please excuse and forgive me if I use the wrong terms below.... Situation: We have UNIX ( Solaris 7/8/9( it varies) on Sun Ultra 10's) servers located at several global... (1 Reply)
Discussion started by: HikerLT
1 Replies
Login or Register to Ask a Question