Geod ValueError : undefined inverse geodesic

前端 未结 1 1019
醉酒成梦
醉酒成梦 2020-12-20 03:22

I want to compute the distance between two lon / lat points by using Geod class from pyproj library.



        
1条回答
  •  有刺的猬
    2020-12-20 03:38

    Those two points are only a few centimetres apart. It looks like pyproj / Geod doesn't cope well with points which are that close together. That's a bit strange, since simple plane geometry is more than adequate at such distances. Also, that error message is a bit suspicious, since it's suggesting that the two points are antipodal, i.e., diametrically opposite, which is clearly not the case! OTOH, maybe the antipodal point it mentions is some intermediate point that arises somehow in the calculation... Still, I'd be rather hesitant in using a library that behaves like this.

    Given this defect, I suspect that pyproj has other flaws. In particular, it probably uses the old Vincenty's formulae for its ellipsoid geodesic calculations, which is known to be unstable when dealing with near-antipodal points, and not particularly accurate over large distances. I recommend using the modern algorithms of C. F. F. Karney.

    Dr Karney is a major contributor to the Wikipedia articles on geodesics, in particular Geodesics on an ellipsoid, and his geographiclib is available on PyPi, so you can easily install it using pip. See his SourceForge site for further information, and geographiclib binding in other languages.

    FWIW, here's a short demo of using geographiclib to compute the distance in your question.

    from geographiclib.geodesic import Geodesic
    
    Geo = Geodesic.WGS84
    
    lat1, lon1 = -7.313341167341917, 10.65583081724002
    lat2, lon2 = -7.313340663909912, 10.655830383300781
    
    d = Geo.Inverse(lat1, lon1,  lat2, lon2)
    print(d['s12'])
    

    output

    0.07345528623159624
    

    That figure is in metres, so those two points are a little over 73mm apart.


    If you'd like to see geographiclib being used to solve a complex geodesic problem, please see this math.stackexchange answer I wrote last year, with Python 2 / 3 source code on gist.


    Hopefully, this is no longer an issue, since pyproj now uses code from geographiclib.

    0 讨论(0)
提交回复
热议问题