首页 文章

绘制底图中特定区域的边界

提问于
浏览
0

我已经定义了一个我感兴趣的区域,例如及时蒸发 . 现在我想通过仅绘制边界来描绘底图上的这个区域 . 该区域被定义为(几乎)全局lat / lon数组,在Region的坐标处仅填充1(如陆地/海洋掩模,但对于我的特定区域) .

如果人们想要绘制某个几何体的边界,它们通常会引用shapefile(我不熟悉),但这似乎是一种创建多边形并在底图上绘制此多边形的简单方法 . 但是,我找不到有关从类似于'Region array'的数组创建shapefile的信息 .

你的建议是什么?

1 回答

  • 0

    感谢您的回复,我确实通过使用我所在区域的edge-gridcells的坐标制作多边形来解决它 .

    {

    import numpy as np
    from netCDF4 import Dataset
    
    def getRegion(latnrs,lonnrs, latitude, longitude, lsm):   
    lsm_globe = lsm
    for lat in range(0,len(latitude)):
        for lon in range(0,len(longitude)):
            if longitude[lon] < 1.5:
                lsm_globe[lat,lon] = 0.
            if longitude[lon] > 15:
                lsm_globe[lat,lon] = 0.
            if latitude[lat] < 48:
                lsm_globe[lat,lon] = 0.
            if latitude[lat] > 54:
                lsm_globe[lat,lon] = 0.
    
    Region = lsm_globe
    
    
    
    import matplotlib.path as mpath
    
    coord_region = np.argwhere(Region>0)
    
    lats = np.zeros(len(coord_region))
    lons = np.zeros(len(coord_region))
    for i in range(len(coord_region)):
    
        lats[i] = coord_region[i][0]
        lons[i] = coord_region[i][1]
    
    uppergp = []
    lowergp = []
    for i in range(len(coord_region)-1):
        if lats[i] < lats[i+1]:
            uppergp.append( [lats[i], lons[i]] )
            lowergp.append( [lats[i+1], lons[i+1]] )
    uppergp.append( [lats[-1], lons[-1]] )
    lowergp.insert(0, [lats[0], lons[0]] )
    lowergp.reverse()
    boundgp = uppergp + lowergp
    
    
    vertlist = []       
    for i in range(len(boundgp)):
        vertlist.append( (longitude[int(boundgp[i][1])]+1.125/2., latitude[int(boundgp[i][0])]-1.125/2.))
    
    verts = vertlist
    # adding last vert to list to close poly
    verts.append(verts[-1])
    
    
    Path = mpath.Path
    lineto = Path.LINETO
    codes = [Path.MOVETO, Path.CLOSEPOLY]
    for i in range(len(boundgp)-1):
        codes.insert(1, lineto)
    
    
    boundgpcoord = mpath.Path(verts, codes)
    return boundgpcoord, Region
    

    }

相关问题