Pysal 的新手,刚刚开始处理加载、阅读等。我有一些十进制度 (WGS84) 的测试点数据,并且想要使用 get_point_dist 函数。运行它后,我得到了正确的响应,但我想要米/公里等的距离而不是 DD。
任何想法如何做到这一点,或者答案是“投影输入数据”?
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)。它默认为 KiloMeters,要更改它,您必须以所需的任何单位指定球体(地球)的半径。KM 和 Miles 的常量是提供的,pysal.cg.sphere.RADIUS_EARTH_KM pysal.cg.sphere.RADIUS_EARTH_MILES
例子:
>>> pysal.cg.arcdist(pt0, pt1, pysal.cg.sphere.RADIUS_EARTH_KM)
PySAL 中的 KDTree 还可以使用球坐标,并提供准确的最近邻结果,即使在反子午线(日期线/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])