我正在使用从描述 GPS 轨迹的地理坐标列表创建的数组。数据是这样的:
[[-51.203018 -29.996149]
[-51.203018 -29.99625 ]
[-51.20266 -29.996229]
...,
[-51.64315 -29.717896]
[-51.643112 -29.717737]
[-51.642937 -29.717709]]
我想计算行之间的地理距离(在起点处第一个元素始终为零的特殊条件)。这会给我一个距离列表len(distances) == coord_array.shape[1]
,或者可能是同一数组中的第三列。
需要注意的是,我已经有一个函数可以返回两点之间的距离(两个坐标对),但我不知道如何将它应用于单个数组操作,而不是循环遍历行对。
目前我正在执行以下操作来计算一个新列中的段距离,以及另一个新列中的累积距离(latlonarray
上面已经显示并且distance(p1, p2)
已经定义):
dists = [0.0]
for n in xrange(len(lonlat)-1):
dists.append(distance(lonlat[n+1], lonlat[n]))
lonlatarray = numpy.array(lonlat).reshape((-1,2))
distsarray = numpy.array(dists).reshape((-1,1))
cumdistsarray = numpy.cumsum(distsarray).reshape((-1,1))
print numpy.hstack((lonlatarray, distsarray, cumdistsarray))
[[ -51.203018 -29.996149 0. 0. ]
[ -51.203018 -29.99625 7.04461338 7.04461338]
[ -51.20266 -29.996229 39.87928578 46.92389917]
...,
[ -51.64315 -29.717896 11.11669769 92529.72742791]
[ -51.643112 -29.717737 11.77016407 92541.49759198]
[ -51.642937 -29.717709 19.57670066 92561.07429263]]
我的主要问题是:“我怎样才能像数组操作而不是循环一样执行距离函数(它以一对行作为参数)?” (也就是说,我怎样才能正确地对其进行矢量化)
其他主题性问题是:
- 如果我决定使用 Pandas,是否有一些巧妙的技巧可以做到这一点?
- 有没有办法
scipy.spatial.distance
使用地理距离(haversine,大圆距离)“为我工作”?
另外,如果我做任何不必要的复杂事情,我会很感激一些提示。
非常感谢大家的关注。