使用ArcPy从模板要素类创建渔网?


9

我不能使用arcpy.CreateFishnet_management工具,因为使用shapefile定义参数“ templateExtent”不会自动填充参数“ originCoordinate”和“ yAxisCoordinate”。

import arcpy
from arcpy import env
env.overwriteOutput = True
env.workspace = r"D:\Users\julia\erste_aufg"

#Process: Create Fishnet
outFeatureClass = r"D:\Users\julia\erste_aufg\at001l_wien\at001l_wien\wien.shp"
cellSizeWidth = '200'
cellSizeHeight = '200'
templateExtent = r"D:\Users\julia\erste_aufg\at001l_wien\at001l_wien\at001l_wien.shp"

arcpy.CreateFishnet_management(outFeatureClass, "", "", cellSizeWidth, cellSizeHeight, '0', '0', "", "NO_LABELS", templateExtent, "POLYGON")

在此处输入图片说明

它在ModelBulider中运行,因此在ModelBulider的后台运行着某些东西,当它具有“ templateExtent”时,它可以创建参数“ originCoordinate”和“ yAxisCoordinate”。仅通过参数“ templateExtent”如何使该工具在ArcPy中运行?

如果有人有解决方案,我将非常高兴,因为我需要使用脚本工具中的Fishnet,并且如果不这样做,因为最后会有一个循环,因此范围的值始终是不同的。 整个脚本的第一部分


有人知道为什么我们要在上面的解决方案部分加10吗?arcpy.CreateFishnet_management(fc [:-4] +“ _ c200.shp”,str(desc.extent.lowerLeft),str(desc.extent.XMin)+“” + str(desc.extent.YMax + 10),“ 200“,” 200“,” 0“,” 0“,str(desc.extent.upperRight),” NO_LABELS“,”#“,” POLYGON“)
user5956986

这不能为问题提供答案。一旦您拥有足够的声誉,您就可以在任何帖子中发表评论;相反,请提供不需要问询者澄清的答案。- 评分
丹ç

Answers:


14

这是一个例子。您需要从描述对象中提取边界框。

desc = arcpy.Describe(fc)
arcpy.CreateFishnet_management(fc[:-4]+"_c200.shp",str(desc.extent.lowerLeft),str(desc.extent.XMin) + " " + str(desc.extent.YMax + 10),"200","200","0","0",str(desc.extent.upperRight),"NO_LABELS","#","POLYGON")

@@ radouxju,是什么目的+ 10str(desc.extent.YMax + 10)
maycca

好问题。在这种情况下实际上没有必要。我习惯在Ymin上添加任意值以构建垂直轴,但是在这里我使用了Ymax,因此这是过大的了。
radouxju

4

这是我用来在要素类的每个要素范围内创建多个渔网的另一种方法。search_extents变量定义了该要素类的路径,该路径定义了我要创建的每个渔网的范围。渔网没有旋转。

search_extents = "path to extents" 
rows = arcpy.SearchCursor(search_extents)
shapeName = arcpy.Describe(search_extents).shapeFieldName
for row in rows:
    print("Starting Extent" + row.getValue("Extent_Num"))
    feat = row.getValue(shapeName)
    extent = feat.extent
    arcpy.CreateFishnet_management(arcpy.env.workspace + "/extents/extentgrid" + row.getValue("Extent_Num"),str(extent.lowerLeft), str(extent.upperLeft),"0","0","200","200",str(extent.upperRight),"NO_LABELS","#","POLYGON")
    print("Finishing Extent" + row.getValue("Extent_Num"))

1

这是我终于成功工作的代码(在上述示例的帮助下)以解决此处描述的问题:

    env.workspace = "C:/Holly/Work/Projects/NavigationStudy2019/Data"

    # Fetch each feature from the cursor and examine the extent properties
    for row in arcpy.da.SearchCursor(feature_class, ['SHAPE@', 'id']):
        extent = row[0].extent
        print('Extent of home range {}:'.format(row[1]))
        print('XMin: {}, YMin: {}'.format(extent.XMin, extent.YMin))
        print('XMax: {}, YMax: {}'.format(extent.XMax, extent.YMax))
        arcpy.CreateFishnet_management("fishnet_temp.shp",
                                       str(extent.XMin) + " " + str(extent.YMax),
                                       str(extent.XMin) + " " + str(extent.YMax + 10),
                                       "100",
                                       "100",
                                       "",
                                       "",
                                       "",
                                       "LABELS",
                                       feature_class,
                                       "POLYGON")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.