不能在pysal中设置距离单位

时间:2013-06-26 18:08:00

标签: python spatial units-of-measurement pysal

Pysal的新手,只是掌握了加载,阅读等等。我有一些测试点数据,以十进制度(WGS84)为例,想要使用get_point_dist函数。运行后,我得到正确的响应,但希望以米/公里等距离而不是DD。

任何想法如何做到这一点,或者是答案,“投射输入数据”?

1 个答案:

答案 0 :(得分:1)

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也将使用球面坐标,即使在anit-meridian(日期线/ 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])