diff options
author | Gary E. Miller <gem@rellim.com> | 2016-07-25 12:07:32 -0700 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2016-07-25 12:07:32 -0700 |
commit | d8ee08cc92c2547453aefd08393847c1f7e99c3d (patch) | |
tree | 4269046011156fc969e72df65010414dd540ecbe /gpsprof | |
parent | f42e7ea230d1e0040e29ced54c9b13d140e30e09 (diff) | |
download | gpsd-d8ee08cc92c2547453aefd08393847c1f7e99c3d.tar.gz |
Add EarthDistanceSmall
At small angles EarthDistance blows up. EarthDistanceSmall
uses an "Equirectangular Projection" to improve accuracy at
small angles.
Next up is to add ellipsoid corrction for lattitude.
Diffstat (limited to 'gpsprof')
-rwxr-xr-x | gpsprof | 22 |
1 files changed, 19 insertions, 3 deletions
@@ -20,6 +20,22 @@ import socket import sys import time +def EarthDistanceSmall(c1, c2): + "Distance in meters between two close points specified in degrees." + # This calculation is known as an Equirectangular Projection + # fewer numeric issues for small angles that other methods + (lat1, lon1) = c1 + (lat2, lon2) = c2 + dlat = lat1 - lat2 + avglat = (lat1 + lat2 ) /2 + dlon = (lon1 - lon2) * math.cos( math.radians( avglat ) ) + # Earth Mean Radius 6371000 meters. + # one degree lat, average 111.133000 + # at equator 110.567 km + # at poll 111.699 km + dist = math.sqrt( dlat * dlat + dlon * dlon) * 111133 + return dist; + class Baton(object): "Ship progress indication to stderr." @@ -201,9 +217,9 @@ class spaceplot(plotter): def plot(self): # Compute CEP(50%) - cep_meters = gps.EarthDistance(self.centroid[:2], self.fixes[int(len(self.fixes) * 0.50)][:2]) - cep95_meters = gps.EarthDistance(self.centroid[:2], self.fixes[int(len(self.fixes) * 0.95)][:2]) - cep99_meters = gps.EarthDistance(self.centroid[:2], self.fixes[int(len(self.fixes) * 0.99)][:2]) + cep_meters = EarthDistanceSmall(self.centroid[:2], self.fixes[int(len(self.fixes) * 0.50)][:2]) + cep95_meters = EarthDistanceSmall(self.centroid[:2], self.fixes[int(len(self.fixes) * 0.95)][:2]) + cep99_meters = EarthDistanceSmall(self.centroid[:2], self.fixes[int(len(self.fixes) * 0.99)][:2]) alt_sum = 0 alt_num = 0 alt_fixes = [] |