如何在geopandas中获取shapefile多边形的UTM区域

时间:2018-04-25 23:20:40

标签: polygon geopandas utm

我需要从shapefile中获取多边形的UTM区域。一段代码:

all= gpd.GeoDataFrame.from_file(shapefile)
for i,current in all.iterrows():
    UTM = ?

当然,它可以是"投影字符串"在某种程度上,我可以使用正则表达式找到它。

2 个答案:

答案 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']])