Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python创建fishet网格_Python_Gis_Geopandas_Ogr - Fatal编程技术网

使用python创建fishet网格

使用python创建fishet网格,python,gis,geopandas,ogr,Python,Gis,Geopandas,Ogr,我正在尝试创建一个渔网网格来聚合一些地理空间数据。我使用了GDAL/OGR Python手册中的以下代码,但是它只返回一个多边形对象,基本上是一个巨大的矩形。请让我知道我做错了什么 资料来源: 导入操作系统,系统 导入ogr 从数学导入单元 def main(outputGridfn、xmin、xmax、ymin、ymax、gridHeight、gridWidth): #将sys.argv转换为float xmin=浮动(xmin) xmax=浮动(xmax) ymin=浮动(ymin) yma

我正在尝试创建一个渔网网格来聚合一些地理空间数据。我使用了GDAL/OGR Python手册中的以下代码,但是它只返回一个多边形对象,基本上是一个巨大的矩形。请让我知道我做错了什么

资料来源: 导入操作系统,系统 导入ogr 从数学导入单元 def main(outputGridfn、xmin、xmax、ymin、ymax、gridHeight、gridWidth): #将sys.argv转换为float xmin=浮动(xmin) xmax=浮动(xmax) ymin=浮动(ymin) ymax=浮动(ymax) gridWidth=浮动(gridWidth) gridHeight=浮动(gridHeight) #吵架 行=天花板((ymax ymin)/网格高度 #获取列 cols=ceil((xmax xmin)/gridWidth) #启动网格单元信封 ringXleftOrigin=xmin ringXrightOrigin=xmin+gridWidth 环孢菌素=ymax ringYbottomOrigin=ymax网格高度 #创建输出文件 outDriver=ogr.GetDriverByName('ESRI Shapefile')) 如果os.path.exists(outputGridfn): 删除操作系统(outputGridfn) outDataSource=outDriver.CreateDataSource(outputGridfn) outLayer=outDataSource.CreateLayer(outputGridfn,geom_type=ogr.wkbPolygon) featureDefn=outLayer.GetLayerDefn() #创建网格单元 countcols=0 当countcols 输出:


代码在我看来不错,可能是“刷新”问题。还可以尝试通过将图层设置为“无”来关闭该图层:

outLayer = None
您正在使用的代码非常复杂,很好地演示了OGR是如何工作的,但是您可以简单地使用它。考虑下面的例子:

定义网格和输出:

# settings
output_shp = r'D:\tmp_grid_v5.shp'

drv = ogr.GetDriverByName('ESRI Shapefile')

if os.path.exists(output_shp):
    # DeleteDataSource will delete related files, compared to os.remove
    drv.DeleteDataSource(output_shp)

# grid definition
# extent
ulx, uly, lrx, lry = -180, 90, 180, -90

# resolution 1 degree grid
xres = 1
yres = -1

# half the resolution
dx = xres/2
dy = yres/2
计算每个多边形的中心坐标。使用Numpy meshgrid很方便,但可以一次计算所有网格。如果内存是个问题,你可以一个接一个地做

# center coordinates
xx, yy = np.meshgrid(
    np.arange(ulx+dx, lrx+dx, xres), 
    np.arange(uly+dy, lry+dy, yres),
)
初始化输出形状文件:

ds = drv.CreateDataSource(output_shp)
lyr = ds.CreateLayer(output_shp, geom_type=ogr.wkbPolygon)
fdefn = lyr.GetLayerDefn()
在每个中心坐标上循环并将多边形添加到输出:

for x,y in zip(xx.ravel(), yy.ravel()):

    poly_wkt = f'POLYGON (({x-dx} {y-dy}, {x+dx} {y-dy}, {x+dx} {y+dy}, {x-dx} {y+dy}, {x-dx} {y-dy}))'

    ft = ogr.Feature(fdefn)
    ft.SetGeometry(ogr.CreateGeometryFromWkt(poly_wkt))
    lyr.CreateFeature(ft)
    ft = None
关闭输出

lyr = None
ds = None

代码在我看来很好,可能是“刷新”问题。还可以尝试通过将图层设置为“无”来关闭该图层:

outLayer = None
您正在使用的代码非常复杂,很好地演示了OGR是如何工作的,但是您可以简单地使用它。考虑下面的例子:

定义网格和输出:

# settings
output_shp = r'D:\tmp_grid_v5.shp'

drv = ogr.GetDriverByName('ESRI Shapefile')

if os.path.exists(output_shp):
    # DeleteDataSource will delete related files, compared to os.remove
    drv.DeleteDataSource(output_shp)

# grid definition
# extent
ulx, uly, lrx, lry = -180, 90, 180, -90

# resolution 1 degree grid
xres = 1
yres = -1

# half the resolution
dx = xres/2
dy = yres/2
计算每个多边形的中心坐标。使用Numpy meshgrid很方便,但可以一次计算所有网格。如果内存是个问题,你可以一个接一个地做

# center coordinates
xx, yy = np.meshgrid(
    np.arange(ulx+dx, lrx+dx, xres), 
    np.arange(uly+dy, lry+dy, yres),
)
初始化输出形状文件:

ds = drv.CreateDataSource(output_shp)
lyr = ds.CreateLayer(output_shp, geom_type=ogr.wkbPolygon)
fdefn = lyr.GetLayerDefn()
在每个中心坐标上循环并将多边形添加到输出:

for x,y in zip(xx.ravel(), yy.ravel()):

    poly_wkt = f'POLYGON (({x-dx} {y-dy}, {x+dx} {y-dy}, {x+dx} {y+dy}, {x-dx} {y+dy}, {x-dx} {y-dy}))'

    ft = ogr.Feature(fdefn)
    ft.SetGeometry(ogr.CreateGeometryFromWkt(poly_wkt))
    lyr.CreateFeature(ft)
    ft = None
关闭输出

lyr = None
ds = None