Guest User

Untitled

a guest
Jul 6th, 2011
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.85 KB | None | 0 0
  1. #-*- coding: utf-8 -*-
  2.  
  3. #####################################################################
  4. # SPIIRAS OOGIS lab property                                        #
  5. # Project: Area calculation using gps data (longitude and latitude) #
  6. # Author:  Michael Verkhovykh <*****************>                   #
  7. # License: GNU LGPL                                                 #
  8. #####################################################################
  9.  
  10. from math import *
  11.  
  12. # WGS 84 geoid constants
  13. A = 6378.137 # semi-major axis
  14. B = 6356.752314245 # semi-minor axis
  15. F = 1/298.257223563 # flattening
  16. e = sqrt(1-(B*B)/(A*A)) # first numerical eccentricity of the ellipsoid
  17.  
  18. def Geo2ECEF(data):
  19.     """Function to transform GPS data (latitude ond longitude) to ECEF format (Earth-centred)"""
  20.     new_data = []
  21.     for a in data:
  22.         psi = sqrt(1 - e*e*sin(a[0]*pi/180)*sin(a[0]*pi/180) )
  23.         x = (A/psi)*cos(a[0]*pi/180)*cos(a[1]*pi/180)
  24.         y = (A/psi)*cos(a[0]*pi/180)*sin(a[1]*pi/180)
  25.         z = (A*(1-e*e)/psi)*sin(a[0]*pi/180)
  26.         new_data.append( (x, y, z) )
  27.     return new_data
  28.  
  29. def dot(v1, v2):
  30.     """Calculating dot product for 2 3-dimensioned vectors"""
  31.     return v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]
  32.  
  33. def cross(a, b):
  34.     c = [a[1]*b[2] - a[2]*b[1],
  35.          a[2]*b[0] - a[0]*b[2],
  36.          a[0]*b[1] - a[1]*b[0]]
  37.     return c
  38.  
  39. #import math
  40. data = [
  41.   (60+2.4/60, 25+41.29/60),
  42.   (60+7.35/60, 26+17.13/60),
  43.   (59+52.11/60, 26+25.19/60),
  44.   (59+47.8/60, 25+49.08/60),
  45. ]
  46.  
  47. print "Following way-points:", data
  48.  
  49. ndata = Geo2ECEF(data)
  50.  
  51. print "Data in ECEF format:", ndata
  52. #uncomment to understand, that everuthing is working :)
  53. #for a in ndata:
  54. #   print a, sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2])
  55.    
  56. area = 0;
  57. area = sqrt(dot(cross(ndata[len(ndata)-1], ndata[0]), cross(ndata[len(ndata)-1], ndata[0])))
  58. for i in range(len(ndata)-1):
  59.     area += 0.5*sqrt(dot(cross(ndata[i], ndata[i+1]), cross(ndata[i], ndata[i+1])))
  60. print area
  61.  
  62. #print area
Advertisement
Add Comment
Please, Sign In to add comment