使用 pyproj 投影 NumPy 坐标数组
Projecting a NumPy array of coordinates using pyproj
我有一个 latitude/longitude (WGS84) 坐标的 NumPy 数组,如下所示:
coords = np.asarray([
[6.74219, -53.57835],
[6.74952, -53.57241],
[6.75652, -53.56289],
[6.74756, -53.56598],
[6.73462, -53.57518]])
我想使用 pyproj 库来使用 Winkel-Tripel(仍然是 WGS84)投影这些 lat/lon 坐标,而不用单独处理每个点?
如何将 pyproj 的结果(它们是单独的 X/Y 数组)连接到单个 numpy 数组中,就像上面的坐标数组一样?
pyproj 文档展示了如何投影单点和
对于 WGS84 中的投影,您可以使用以下函数:
def project_array(coordinates, srcp='latlong', dstp='wintri'):
"""
Project a numpy (n,2) array in projection srcp to projection dstp
Returns a numpy (n,2) array.
"""
p1 = pyproj.Proj(proj=srcp, datum='WGS84')
p2 = pyproj.Proj(proj=dstp, datum='WGS84')
fx, fy = pyproj.transform(p1, p2, coordinates[:,0], coordinates[:,1])
# Re-create (n,2) coordinates
return np.dstack([fx, fy])[0]
注意使用 dstack
加入 x/y 数组
坐标数组的用法示例。
>>> project_array(coords)
array([[ 497789.36471653, -5965577.60559519],
[ 498357.98167095, -5964919.091806 ],
[ 498918.88707764, -5963861.91844427],
[ 498243.057953 , -5964202.54601671],
[ 497245.19767552, -5965221.87480737]])
我有一个 latitude/longitude (WGS84) 坐标的 NumPy 数组,如下所示:
coords = np.asarray([
[6.74219, -53.57835],
[6.74952, -53.57241],
[6.75652, -53.56289],
[6.74756, -53.56598],
[6.73462, -53.57518]])
我想使用 pyproj 库来使用 Winkel-Tripel(仍然是 WGS84)投影这些 lat/lon 坐标,而不用单独处理每个点?
如何将 pyproj 的结果(它们是单独的 X/Y 数组)连接到单个 numpy 数组中,就像上面的坐标数组一样?
pyproj 文档展示了如何投影单点和
对于 WGS84 中的投影,您可以使用以下函数:
def project_array(coordinates, srcp='latlong', dstp='wintri'):
"""
Project a numpy (n,2) array in projection srcp to projection dstp
Returns a numpy (n,2) array.
"""
p1 = pyproj.Proj(proj=srcp, datum='WGS84')
p2 = pyproj.Proj(proj=dstp, datum='WGS84')
fx, fy = pyproj.transform(p1, p2, coordinates[:,0], coordinates[:,1])
# Re-create (n,2) coordinates
return np.dstack([fx, fy])[0]
注意使用 dstack
加入 x/y 数组
坐标数组的用法示例。
>>> project_array(coords)
array([[ 497789.36471653, -5965577.60559519],
[ 498357.98167095, -5964919.091806 ],
[ 498918.88707764, -5963861.91844427],
[ 498243.057953 , -5964202.54601671],
[ 497245.19767552, -5965221.87480737]])