对Pysal来说是个新手,只需掌握加载、读取等操作。我有一些十进制的测试点数据(WGS84),想使用get_point_dist函数。在运行之后,我得到了正确的响应,但希望以米/公里等为单位的距离,而不是DD。
有什么办法吗?答案是“输入数据的投影”?

最佳答案

PySAL中的get_points_dist方法仅在欧几里德空间中操作,因此需要投影输入数据才能使用它。
不过,您可以使用arcdist方法。
注意:点元组应该按(Long,Lat)顺序提供。
例如:

>>> import pysal
>>> pt0 = (-74.0, 40.7)
>>> pt1 = (-77.0, 38.8)
>>> pysal.cg.arcdist(pt0, pt1)

arcdist确实有一些局限性,它假设一个完美的球体,并且不会考虑大地水准面(WGS84)。它默认为千米,若要更改此值,必须以所需的任何单位指定球体(地球)的半径。提供了公里和英里的常数,
pysal.cg.sphere.RADIUS_地球公里
pysal.cg.sphere.RADIUS_EARTH_英里
例子:
>>> pysal.cg.arcdist(pt0, pt1, pysal.cg.sphere.RADIUS_EARTH_KM)

PySAL中的KDTree也将使用球坐标,并将提供精确的最近邻结果,即使在anit子午线(dateline/180 lng/-180 lng)和投票。
>>> pts = [(-179.0,0.0), (170,0.0), (179.0,0.0)]
>>> kd = pysal.cg.KDTree(pts, distance_metric='Arc', radius = pysal.cg.sphere.RADIUS_EARTH_KM)
>>> d, i = kd.query((-180.0,0.0), k=3)
>>> d
array([  111.19492664,   111.19492664,  1111.94926645])
>>> i
array([0, 2, 1])

关于python - 无法以pysal设定距离单位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17327389/

10-09 17:18