Link to home
Start Free TrialLog in
Avatar of SullivanEnvironmental
SullivanEnvironmental

asked on

Distances based on GPS coordinates

I have a four sided field with a center point (that is not really in the center) but is called center.

 User generated image
The four corners and "center" point are all known gps coordinates (known in UTM, Long Lat).  I need an excel calculation that will allow me to automatically calculate the distance from the "center" point to the edge of the field from all 365 degrees.  Assume that the four "corners" of the field can be connected to form a square if this makes this easier.  I also need this formula to be generic enough so that it can accommodate any 4 corners and "center point" and give me the distance automatically.  

For instance, if I have a column 1a that says 231 (degrees), id like column 1b to say the distance to the edge of the field given 231 degrees from the "center" point
Thanks in advance
Avatar of Saqib Husain
Saqib Husain
Flag of Pakistan image

Can you give me a set of coorditantes?
Avatar of SullivanEnvironmental
SullivanEnvironmental

ASKER

Center      46      4      37.402            119      27      30.12
SW Corner      46      4      36.412            119      27      32.459
NW Corner      46      4      39.182            119      27      31.94
NE Corner      46      4      38.163            119      27      27.241
SE Corner      46      4      35.613            119      27      28.933
I have code that is being used to do this in Fortran.  I am not a programmer - but want to apply this basic idea to excel but with using the coordinates themselves - not converting them to an X Y grid.
C     Last change:  MTH  26 Oct 2010    4:27 pm
      CHARACTER*20 DUM
      INTEGER A
      INTEGER PERIOD(33), Wind1, Wind2, Wind3, Wind4, Wind5
      REAL SUMWS1, SUMWD1, SUMWS2, SUMWD2, SUMWS3, SUMWD3, SUMWS4
      REAL SUMWD4, SUMWS5, SUMWD5, Angle, Fetch1, Fetch2, Fetch3
      REAL Fetch4, Fetch5, SumFetch1, SumFetch2, SumFetch3, SumFetch4
      REAL SumFetch5, X, Y
      REAL WS1, WS2, WS3, WS4, WS5, WD1, WD2, WD3, WD4, WD5
      REAL D1, D2, D3, D4, D5, D11, D12, D13, D14, D15

      OPEN(1,FILE='ws1.prn',STATUS='OLD')
      OPEN(2,FILE='wd1.prn',STATUS='OLD')
      OPEN(4,FILE='met1.out',STATUS='UNKNOWN')

      DATA PERIOD / 4, 6, 6, 6, 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12,
     x             12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
     x             12, 12, 12, 14, 12/

      Angle=45
      X=68
      Y=68
      Pi=3.14159
      MaxFetch=SQRT(X*X+Y*Y)/2

***   Set cumulative variables to zero for start of minute-hourly dataset conversion routine ***

      DO A=1, 33

        Wind1=0
        SUMWD1=0
        SUMWS1=0
        Wind2=0
        SUMWD2=0
        SUMWS2=0
        Wind3=0
        SUMWD3=0
        SUMWS3=0
        Wind4=0
        SUMWD4=0
        SUMWS4=0
        Wind5=0
        SUMWD5=0
        SUMWS5=0
        SumFetch1=0
        SumFetch2=0
        SumFetch3=0
        SumFetch4=0
        SumFetch5=0

        DO B=1,PERIOD(A)*60

          READ(1,'(6F8.2)',END=20) WS1, WS2, WS3, WS4, WS5
          READ(2,'(6F8.2)') WD1, WD2, WD3, WD4, WD5

          IF (WS1.NE.0) THEN
             
            Wind1=Wind1+1
             
            IF (Wind1.EQ.1) THEN
             
              D11=WD1
              SUMWD1=D11
              
            ELSE
             
              TEST=WD1-D11
             
              IF (TEST.LT.-180) THEN

                D1=D11+TEST+360
                     
              ELSE IF (TEST.LT.180.AND.TEST.GT.-180) THEN
                  
                D1=D11+TEST
               
              ELSE IF (TEST.GT.180) THEN
             
                D1=D11+TEST-360
             
              END IF
               
              SUMWD1=SUMWD1+D1
              D11=D1

            END IF
                           
          END IF

          SUMWS1=SUMWS1+WS1

          IF (WD1-45.LT.0) THEN
            Fetch1=WD1-45+360
          ELSE
            Fetch1=WD1-45
          END IF

          IF (Fetch1.GT.90) THEN
            IF (Fetch1.GE.180) THEN
              IF (Fetch1.GE.270) THEN
                Fetch1=360-Fetch1
              ELSE
                Fetch1=Fetch1-180
              END IF
            ELSE
              Fetch1=180-Fetch1
            END IF
          ELSE
            Fetch1=Fetch1
          END IF

          COSA=ABS(0.5*Y/(COS(Fetch1*Pi/180)))
          SINA=ABS(0.5*X/(SIN(Fetch1*Pi/180)))

          IF (COSA.GT.MaxFetch) THEN
            Fetch1=SINA
          ELSE
            Fetch1=COSA
          END IF

          IF (WS2.NE.0) THEN
             
            Wind2=Wind2+1
             
            IF (Wind2.EQ.1) THEN
             
              D12=WD2
              SUMWD2=D12
              
            ELSE
             
              TEST=WD2-D12
             
              IF (TEST.LT.-180) THEN

                D2=D12+TEST+360
                     
              ELSE IF (TEST.LT.180.AND.TEST.GT.-180) THEN
                  
                D2=D12+TEST
               
              ELSE IF (TEST.GT.180) THEN
             
                D2=D12+TEST-360
             
              END IF
               
              SUMWD2=SUMWD2+D2
              D12=D2

            END IF
                           
          END IF

          SUMWS2=SUMWS2+WS2

          IF (WD2-45.LT.0) THEN
            Fetch2=WD2-45+360
          ELSE
            Fetch2=WD2-45
          END IF

          IF (Fetch2.GT.90) THEN
            IF (Fetch2.GE.180) THEN
              IF (Fetch2.GE.270) THEN
                Fetch2=360-Fetch2
              ELSE
                Fetch2=Fetch2-180
              END IF
            ELSE
              Fetch2=180-Fetch2
            END IF
          ELSE
            Fetch2=Fetch2
          END IF

          COSA=ABS(0.5*Y/(COS(Fetch2*Pi/180)))
          SINA=ABS(0.5*X/(SIN(Fetch2*Pi/180)))
          IF (COSA.GT.MaxFetch) THEN
            Fetch2=SINA
          ELSE
            Fetch2=COSA
          END IF

          IF (WS3.NE.0) THEN
             
            Wind3=Wind3+1
             
            IF (Wind3.EQ.1) THEN
             
              D13=WD3
              SUMWD3=D13
              
            ELSE
             
              TEST=WD3-D13
             
              IF (TEST.LT.-180) THEN

                D3=D13+TEST+360
                     
              ELSE IF (TEST.LT.180.AND.TEST.GT.-180) THEN
                  
                D3=D13+TEST
               
              ELSE IF (TEST.GT.180) THEN
             
                D3=D13+TEST-360
             
              END IF
               
              SUMWD3=SUMWD3+D3
              D13=D3

            END IF
                           
          END IF

          SUMWS3=SUMWS3+WS3

          IF (WD3-45.LT.0) THEN
            Fetch3=WD3-45+360
          ELSE
            Fetch3=WD3-45
          END IF

          IF (Fetch3.GT.90) THEN
            IF (Fetch3.GE.180) THEN
              IF (Fetch3.GE.270) THEN
                Fetch3=360-Fetch3
              ELSE
                Fetch3=Fetch3-180
              END IF
            ELSE
              Fetch3=180-Fetch3
            END IF
          ELSE
            Fetch3=Fetch3
          END IF

          COSA=ABS(0.5*Y/(COS(Fetch3*Pi/180)))
          SINA=ABS(0.5*X/(SIN(Fetch3*Pi/180)))
          IF (COSA.GT.MaxFetch) THEN
            Fetch3=SINA
          ELSE
            Fetch3=COSA
          END IF

          IF (WS4.NE.0) THEN
             
            Wind4=Wind4+1
             
            IF (Wind4.EQ.1) THEN
             
              D14=WD4
              SUMWD4=D14
              
            ELSE
             
              TEST=WD4-D14
             
              IF (TEST.LT.-180) THEN

                D4=D14+TEST+360
                     
              ELSE IF (TEST.LT.180.AND.TEST.GT.-180) THEN
                  
                D4=D14+TEST
               
              ELSE IF (TEST.GT.180) THEN
             
                D4=D14+TEST-360
             
              END IF
               
              SUMWD4=SUMWD4+D4
              D14=D4

            END IF
                           
          END IF

          SUMWS4=SUMWS4+WS4

          IF (WD4-45.LT.0) THEN
            Fetch4=WD4-45+360
          ELSE
            Fetch4=WD4-45
          END IF

          IF (Fetch4.GT.90) THEN
            IF (Fetch4.GE.180) THEN
              IF (Fetch4.GE.270) THEN
                Fetch4=360-Fetch4
              ELSE
                Fetch4=Fetch4-180
              END IF
            ELSE
              Fetch4=180-Fetch4
            END IF
          ELSE
            Fetch4=Fetch4
          END IF

          COSA=ABS(0.5*Y/(COS(Fetch4*Pi/180)))
          SINA=ABS(0.5*X/(SIN(Fetch4*Pi/180)))
          IF (COSA.GT.MaxFetch) THEN
            Fetch4=SINA
          ELSE
            Fetch4=COSA
          END IF

          IF (WS5.NE.0) THEN
             
            Wind5=Wind5+1
             
            IF (Wind5.EQ.1) THEN
             
              D15=WD5
              SUMWD5=D15
              
            ELSE
             
              TEST=WD5-D15
             
              IF (TEST.LT.-180) THEN

                D5=D15+TEST+360
                     
              ELSE IF (TEST.LT.180.AND.TEST.GT.-180) THEN
                  
                D5=D15+TEST
               
              ELSE IF (TEST.GT.180) THEN
             
                D5=D15+TEST-360
             
              END IF
               
              SUMWD5=SUMWD5+D5
              D15=D5

            END IF
                           
          END IF

          SUMWS5=SUMWS5+WS5

          IF (WD5-45.LT.0) THEN
            Fetch5=WD5-45+360
          ELSE
            Fetch5=WD5-45
          END IF

          IF (Fetch5.GT.90) THEN
            IF (Fetch5.GE.180) THEN
              IF (Fetch5.GE.270) THEN
                Fetch5=360-Fetch5
              ELSE
                Fetch5=Fetch5-180
              END IF
            ELSE
              Fetch5=180-Fetch5
            END IF
          ELSE
            Fetch5=Fetch5
          END IF

          COSA=ABS(0.5*Y/(COS(Fetch5*Pi/180)))
          SINA=ABS(0.5*X/(SIN(Fetch5*Pi/180)))
          IF (COSA.GT.MaxFetch) THEN
            Fetch5=SINA
          ELSE
            Fetch5=COSA
          END IF

          SUMFETCH1=SUMFETCH1+Fetch1
          SUMFETCH2=SUMFETCH2+Fetch2
          SUMFETCH3=SUMFETCH3+Fetch3
          SUMFETCH4=SUMFETCH4+Fetch4
          SUMFETCH5=SUMFETCH5+Fetch5

        END DO

        SUMFETCH1=SUMFETCH1/(PERIOD(A)*60)
        SUMFETCH2=SUMFETCH2/(PERIOD(A)*60)
        SUMFETCH3=SUMFETCH3/(PERIOD(A)*60)
        SUMFETCH4=SUMFETCH4/(PERIOD(A)*60)
        SUMFETCH5=SUMFETCH5/(PERIOD(A)*60)
        SUMWS1=SUMWS1/(60*Period(A))
        SUMWD1=SUMWD1/Wind1
        SUMWS2=SUMWS2/(60*Period(A))
        SUMWD2=SUMWD2/Wind2
        SUMWS3=SUMWS3/(60*Period(A))
        SUMWD3=SUMWD3/Wind3
        SUMWS4=SUMWS4/(60*Period(A))
        SUMWD4=SUMWD4/Wind4
        SUMWS5=SUMWS5/(60*Period(A))
        SUMWD5=SUMWD5/Wind5

        IF (SUMWD1.LT.0) THEN

          SUMWD1=360+SUMWD1

        ELSE IF (SUMWD1.GT.360) THEN

          SUMWD1=SUMWD1-360

        END IF

        IF (SUMWD2.LT.0) THEN

          SUMWD2=360+SUMWD2

        ELSE IF (SUMWD2.GT.360) THEN

          SUMWD2=SUMWD2-360

        END IF

        IF (SUMWD3.LT.0) THEN

          SUMWD3=360+SUMWD3

        ELSE IF (SUMWD3.GT.360) THEN

          SUMWD3=SUMWD3-360

        END IF

        IF (SUMWD4.LT.0) THEN

          SUMWD4=360+SUMWD4

        ELSE IF (SUMWD4.GT.360) THEN

          SUMWD4=SUMWD4-360

        END IF

        IF (SUMWD5.LT.0) THEN

          SUMWD5=360+SUMWD5

        ELSE IF (SUMWD5.GT.360) THEN

          SUMWD5=SUMWD5-360

        END IF

        WRITE(4,'(I5,15F8.2)') A,
     x            SUMWS1, SUMWS2, SUMWS3, SUMWS4, SUMWS5,
     x            SUMWD1, SUMWD2, SUMWD3, SUMWD4, SUMWD5,
     x            SumFetch1, SumFetch2, SumFetch3, SumFetch4,
     x            SumFetch5

   20 END DO
        
      STOP
      END

Open in new window

Calculating the Shortest Flight Path - Math Forum - Ask Dr. Math should answer your question "apply this basic idea to excel but with using the coordinates themselves"...

Here is another possible solution: Turn latitude/longitude into X,Y coordinates
See if this file works.

The formulas have been inserted in column P for reference and have been acquired from

http://www.movable-type.co.uk/scripts/latlong.html

Saqib
DistLatLong.xls
References:

Title: Calculate distance, bearing and more between Latitude/Longitude points
Link: http://www.movable-type.co.uk/scripts/latlong.html

Title: Intersection point of two lines (2 dimensions)
Link: http://paulbourke.net/geometry/lineline2d/

Kevin
Q-26974315.xls
zorvek, this code you created is along the lines of what I am looking for.  My only problem is when I put these corners into google earth, the distance calculated by your file doesnt coincide with the google earth distance. In this example figure the distance from the "center" point is 1.04 km from the edge as calculated by google earth.  Your spreadsheet has a very different result.



Center      W119 30 26.80      N46 06 40.64      -119.50744      46.11129
Top Right Corner      W119 29 46.82      N46 06 58.75      -119.49634      46.11632
Top Left Corner      W119 31 00.03      N46 07 00.55      -119.51668      46.11682
Bottom Left Corner      W119 30 59.98      N46 06 07.78      -119.51666      46.10216
Bottom Right Corner      W119 29 46.13      N46 06 05.90      -119.49615      46.10164

12.jpg
ASKER CERTIFIED SOLUTION
Avatar of zorvek (Kevin Jones)
zorvek (Kevin Jones)
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
wow - high five.