2

ライブラリGeodのクラスを使用して、2 つの経度/緯度点間の距離を計算したいと考えています。pyproj

from pyproj import Geod

g = Geod(ellps='WGS84')
lonlat1 = 10.65583081724002, -7.313341167341917
lonlat2 = 10.655830383300781, -7.313340663909912

_, _, dist = g.inv(lonlat1[0], lonlat1[1], lonlat2[0], lonlat2[1])

次のエラーが表示されます。

ValueError                                Traceback (most recent call last)
<ipython-input-5-8ba490aa5fcc> in <module>()
----> 1 _, _, dist = g.inv(lonlat1[0], lonlat1[1], lonlat2[0], lonlat2[1])

/usr/lib/python2.7/dist-packages/pyproj/__init__.pyc in inv(self, lons1, lats1, lons2, lats2, radians)
    558         ind, disfloat, dislist, distuple = _copytobuffer(lats2)
    559         # call geod_inv function. inputs modified in place.
--> 560         _Geod._inv(self, inx, iny, inz, ind, radians=radians)
    561         # if inputs were lists, tuples or floats, convert back.
    562         outx = _convertback(xisfloat,xislist,xistuple,inx)

_geod.pyx in _geod.Geod._inv (_geod.c:1883)()

ValueError: undefined inverse geodesic (may be an antipodal point)

このエラー メッセージはどこから来たのですか?

4

1 に答える 1

6

この 2 点は、わずか数センチしか離れていません。近接しているポイントにうまく対応できないように見えますpyprojGeodこのような距離では、単純な平面ジオメトリで十分すぎるため、これは少し奇妙です。また、このエラー メッセージは少し疑わしいです。なぜなら、2 つの点が対蹠的である、つまり正反対であることが示唆されているからです。これは明らかにそうではありません! OTOH、それが言及している対蹠点は、計算で何らかの形で発生する中間点かもしれません.

この欠陥を考えると、pyproj他の欠陥があると思います。特に、楕円体の測地線計算に古いVincenty の式を使用している可能性があります。これは、対蹠点に近い点を扱うときに不安定であることが知られており、長距離では特に正確ではありません。CFF Karney の最新のアルゴリズムを使用することをお勧めします。

Karney 博士は、測地線に関するウィキペディアの記事、特に楕円体上の測地線 の主要な貢献者であり、彼のgeographiclibは PyPi で利用できるため、 を使用して簡単にインストールできますpip。詳細については、彼のSourceForge サイト、および他の言語での geographiclib バインディングを参照してください。

FWIW、geographiclib を使用して質問の距離を計算する短いデモを次に示します。

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'])

出力

0.07345528623159624

この数値はメートル単位なので、これらの 2 つの点は 73mm 強離れています。


複雑な測地線の問題を解決するために geographiclib が使用されていることを確認したい場合は、昨年書いたこのmath.stackexchange の回答を参照してください


pyproj は geographiclib のコードを使用するようになったため、これが問題にならないことを願っています。

于 2016-11-25T11:04:35.767 に答える