Hi folks,
I managed to calculate the distance between two points (from two different feature classes) using the vincenty module from geopy.distance.
For quite some time I struggled to find out why I got wrong distances. (even to realize it took me some time)
In the end I figured that the vincenty module requires the coordinates in Latitude/Longitude while the coordinates as they are stored in the feature class shape@xy are stored as Longitude/Langitude.
Can someone confirm this? It doesn't make any sense to me why the vincenty module should require the coordinates the "wrong way" but I only get correct measures when using the coordinates switched to Latitude/Longitude...
Solved! Go to Solution.
I use python 3... I forget some are still on legacy python
comment out line 50 and remove the word 'dedent' in line 163
And besides... you just don't 'run' it unless you want the demo to run. the def is the main part, but don't forget the imports
Use this Vincenty then.... for comparison
Hi Dan, the python file is empty 😞
strange, it used to be there because people have used it.. I uploaded again, let me know
Thanks Dan! Unfortunately now it says it can't import the textwrapper functions. Will have to look at it at a later stage again.
I
I use python 3... I forget some are still on legacy python
comment out line 50 and remove the word 'dedent' in line 163
And besides... you just don't 'run' it unless you want the demo to run. the def is the main part, but don't forget the imports
Thank you! I will give it another try.
Of course you are right, that I don't run the script by itself, I imported it to my script and run it from there...
closed?
Hi Dan Patterson ,
I just did a small test with your script and obtained this result:
:--------------------------------------------------------:
:Vincenty inverse...
:Longitude, Latitude
:From: ( 6.23927000, -75.60019300)
:To: ( 4.72356700, -74.07436300)
:Distance: 175953.991 m
:Bearings...
: Initial 344.70 deg
: Final 346.16 deg
: Iterations taken.... 2
:--------------------------------------------------------:
When I run this script using the distance and angle to in arcpy:
def main():
import arcpy
coords = [[6.239270, -75.600193], [4.723567, -74.074363]]
sr = arcpy.SpatialReference(4326)
pntg1 = arcpy.PointGeometry(arcpy.Point(*coords[0][::-1]), sr)
pntg2 = arcpy.PointGeometry(arcpy.Point(*coords[1][::-1]), sr)
methods = ['PLANAR', 'GEODESIC', 'GREAT_ELLIPTIC',
'LOXODROME', 'PLANAR', 'PRESERVE_SHAPE']
for method in methods:
print "{0}\t{1}\t{2}".format('%14s' % method,
*pntg1.angleAndDistanceTo(pntg2, method))
if __name__ == '__main__':
main()
... it gives me this:
PLANAR 134.674409847 238078.891905
GEODESIC 134.674454363 238078.891905
GREAT_ELLIPTIC 134.674961722 238078.891908
LOXODROME 134.750719983 238078.956191
PLANAR 134.674409847 238078.891905
PRESERVE_SHAPE 134.674454363 238078.891905
Any idea why the distance is so different?
And when using geopy:
def main():
from geopy.distance import vincenty, great_circle
medellin = (6.239270, -75.600193)
bogota = (4.723567, -74.074363)
print(vincenty(medellin, bogota).meters)
print(great_circle(medellin, bogota).meters)
if __name__ == '__main__':
main()
... I get this result:
238078.891889
238660.799202
Showing that vincenty is very close to what arcpy calculated.