Distance calculations using longitude and latitude on the ellipsoid. Haversine or Vincenty?
The choice depends on the resolution needed. This thread on Computing Distances reminded me that I had the latter kicking around and Bruce Harold's Reverse Geocoding uses it. See Simon Kettle's blog post as well,
So I thought I would throw the reference in the Py..Links so I/we don't forget.
The code can be found on my GitHub link but I have attached a copy to this post.
I spared no effort in code verbosity and I tried to remain faithful to Chris Veness's documentation and presentation of the original code implementation. His page contains an interactive calculator implemented in Java if you just need a few calculations. I have included a few sample calculations here should you be interested
:Examples:
: long0 lat0 long1 lat1 dist initial final head to
: -75.0, 45.0, -75.0, 46.0 111141.548 0.000, 0.000 N
: -75.0, 46.0, -75.0, 45.0 111141.548 180.000, 180.000 S
: -76.0, 45.0, -75.0, 45.0 78846.334 89.646, 90.353 E
: -75.0, 45.0, -76.0, 45.0 78846.334 270.353, 269.646 W
: -76.0, 46.0, -75.0, 45.0 135869.091 144.526, 145.239 SE
: -75.0, 46.0, -76.0, 45.0 135869.091 215.473, 214.760 SW
: -76.0, 45.0, -75.0, 46.0 135869.091 34.760, 35.473 NE
: -75.0, 45.0, -76.0, 46.0 135869.091 325.239, 324.526 NW
: -90.0, 0.0 0.0 0.0 10018754.171 90.000 90.000 1/4 equator
: -75.0 0.0 -75.0 90.0 10001965.729 0.000 0.000 to N pole
:
So use Bruce's if you need to geocode... use Chris's if you just need a few points.... or play with this incarnation should you need to incorporate a function in your own code. I will get around to converting it to NumPy eventually so one can process large sets of origin-destinations that need a tad more than a spherical estimate. The current version of the program uses iteration which makes it a poor candidate for vectorization on arrays, but there are other implementations one can use.
The most recent version of vincenty.py can be found on my github repository numpy_samples/vincenty.py at master · Dan-Patterson/numpy_samples · GitHub