乐趣区

关于r:考虑投影坐标系的空间计算shapely-pyproj

空间数据的坐标应用经纬度,空间计算心愿依照 ” 米 ” 解决,该怎么办?

如果对投影坐标系不理解,咱们只能对上述需要做个近似,用度来迫近米。假如地球为一个球体,对于赤道和经度圈,360 度对应 4 万 km,所以 1 度对应 111km。因而咱们能够用“度”和“米”的近似换算来达成上述目标。不过这个简化存在一些问题,在纬度圈上不实用,纬度越大,1 度对应的公里数越小。比方,咱们心愿对一个空间对象外扩 50m 的范畴,那么在货色方向上,理论的外扩范畴,黑龙江 < 北京 < 广东。

那么如果心愿能准确依照米做空间计算呢?这就须要引入投影坐标系(相干概念请参考我的另一篇文章《瓦片地图原理》)。Python 中能够用 pyproj 实现这个性能,将 WGS84 的经纬度坐标系投影到 UTM 的米制坐标系。上面给一个代码示例:

from shapely.geometry import LineString
from shapely.ops import transform
import pyproj

wgs84 = pyproj.CRS('EPSG:4326')
utm = pyproj.CRS('EPSG:32618')
line = LineString([[126.631021,45.7443], [126.631021,45.74138], [126.635699,45.74138]])
degree_buffer = line.buffer(0.00050, cap_style=2)
project = pyproj.Transformer.from_crs(wgs84, utm, always_xy=True).transform
distline = transform(project, line)
dist_buffer = distline.buffer(55.5, cap_style=2)
reverse = pyproj.Transformer.from_crs(utm, wgs84, always_xy=True).transform
dist_buffer = transform(reverse, dist_buffer)
print line
print degree_buffer
print dist_buffer

将数据可视化后,成果如下:

绿色为按“米”准确开的范畴,红色为按“度”开的范畴。能够看到在东西向上,用“度”近似的办法范畴偏小,南北向上范畴准确。

退出移动版