我想通过使用库中的Geod
类来计算两个lon / lat点之间的距离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 html" target="_blank">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)
此错误消息从何而来?
这两点仅相距几厘米。看起来pyproj
/Geod
不能很好地解决彼此靠近的点。这有点奇怪,因为在这样的距离下简单的平面几何体已经足够了。同样,该错误消息也有点可疑,因为这表明这两点是对立的,即在直径上是相反的,显然不是这种情况!OTOH,也许它所提到的对立点是在计算中以某种方式出现的中间点…不过,我还是会犹豫使用这种行为的库。
鉴于此缺陷,我怀疑pyproj
还有其他缺陷。特别是,它可能会使用旧的Vincenty公式进行椭球测地线计算,众所周知,当处理近对映点时该算法不稳定,并且在大距离上并非特别精确。我建议使用CFF
Karney的现代算法。
Karney博士是一个主要贡献者上测地线的维基百科文章,特别是对一个椭球大地测量,他的geographiclib可PyPI上,这样你就可以很容易地使用安装它pip
。请参阅他的SourceForge网站以获取更多信息以及其他语言的geolib绑定。
FWIW,这是一个使用geoliblib计算问题距离的简短演示。
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
该数字以米为单位,因此这两点相距73毫米多一点。
如果您希望看到geoliblib用于解决复杂的测地线问题,请参阅我去年在gist上使用Python
2/3源代码编写的math.stackexchange答案。
希望这不再是问题,因为pyproj现在使用来自geoliblib的代码。
我试图通过反应路由器将道具从一个组件传递到另一个组件。当我试图从子组件获取道具时,我得到了这样一条消息。这是我的代码: Tracks.jsx: app.jsx: Album.jsx:
问题内容: React 在promise中没有定义。这是我的代码: 这是错误代码: 问题答案: 可能没有约束力。 如果您可以使用ES6语法,请尝试用箭头函数替换。它会自动绑定: 或手动绑定:
我必须发布{输入}数据以http://localhost:4000/predictionAxios。但是{输入}变为未定义。 我使用const而不是类Main扩展组件. onChange,它设置表单数据。 阿希奥斯邮报。 返回(表单)时带有onSubmit、onChange。
问题内容: 注意:根据 ECMAScript5.1,第15.1.1.3节,window.undefined是只读的。 现代浏览器正确地实现了这一点。 例如:Safari 5.1,Firefox 7,Chrome 20等。 Undefined仍可在以下位置更改:Chrome 14,… 原来,问题的原因是 如果“对象”中没有属性“ x”,则返回false。 我通过在两个Facebook函数中用规则相等
我有一个Spring项目,我尝试添加一个自定义反序列化器来反序列化日期属性,具体取决于它们的格式。如果我将其用作Date属性的注释,则效果很好。但是,如果我将反序列化器添加到对象映射器中,当Jackson反序列化日期时,它不会调用。 我尝试这样应用我的自定义反序列化程序: 我不想每次都对Date属性应用注释,我想默认使用此反序列化器。我做错了什么?
构建一个小的react应用程序,将地理位置(由浏览器确定为道具)传递给子组件。 第一个组件:app.jsx 该组件确定位置,保存要声明的纬度和经度,并通过props将该信息传递给Weather.jsx组件,该组件正在工作,如下图所示: 在Weather.jsx组件中,我尝试访问这些道具,得到未定义的或空的对象。 真的不知道问题是什么,因为react dev tools显示weather组件确实在传