我需要从shapefile中获取多边形的UTM区域。一段代码:
all= gpd.GeoDataFrame.from_file(shapefile)
for i,current in all.iterrows():
UTM = ?
当然,它可以是"投影字符串"在某种程度上,我可以使用正则表达式找到它。
答案 0 :(得分:0)
shapefile的坐标参考系统信息(如果存在有效的.prj文件)可以通过例如all.crs
答案 1 :(得分:0)
有几种方法可以获取 UTM 区域。为了迭代单个形状,最简单的方法是使用 python UTM 模块之一,例如 utm 或 pyutm。您可以通过使用 327 或 326 预定义区域来计算 EPSG,具体取决于形状所在的半球。
import utm
g = gpd.GeoDataFrame(...)
g = g.to_crs(4326)
for idx, row in g.iterrows():
c = row.geometry.centroid
utm_x, utm_y, band, zone = utm.from_latlon(c.y, c.x)
if c.y > 0: # Northern zone
epsg = 32600 + band
else:
epsg = 32700 + band
print(c, band, epsg, zone)
但您也可以直接加入 UTM 区域。如果您有多边形,您可能希望在质心上加入。
url = 'https://opendata.arcgis.com/datasets/b294795270aa4fb3bd25286bf09edc51_0.zip'
utm = gpd.read_file(url)
gpd.sjoin(g.iloc[:10], utm[['ZONE', 'geometry']])