Vous créez une résille à partir d'une classe d'entités modèles à l'aide d'ArcPy?

9

Je ne peux pas utiliser l'outil arcpy.CreateFishnet_management car définissez le paramètre "templateExtent" avec un shapefile il ne remplit pas automatiquement les paramètres "originCoordinate" et "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")

entrez la description de l'image ici

Il fonctionne dans le ModelBulider, donc quelque chose tourne en arrière-plan du ModelBulider qui pourrait créer les paramètres "originCoordinate" et "yAxisCoordinate" quand il a un "templateExtent". Comment puis-je faire fonctionner cet outil dans ArcPy en ayant juste le paramètre «templateExtent»?

Je serais vraiment heureux si quelqu'un a une solution car j'ai besoin du Fishnet dans un scripttool et je ne peux pas m'en passer car à la fin il y a une boucle donc les valeurs de l'étendue sont toujours différentes. la première partie de l'ensemble du script

Nora
la source
Est-ce que quelqu'un sait pourquoi nous ajoutons un 10 à la partie de la solution ci-dessus? 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
Cela ne fournit pas de réponse à la question. Une fois que vous avez une réputation suffisante, vous pourrez commenter n'importe quel message ; fournissez plutôt des réponses qui ne nécessitent pas de clarification de la part du demandeur . - De l'avis
Dan C

Réponses:

14

Voici un exemple. Vous devez extraire la boîte englobante d'un objet décrit.

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
la source
@@ radouxju, à quoi sert + 10in str(desc.extent.YMax + 10)?
Maycca
bonne question. En fait, pas nécessaire dans ce cas. J'ai l'habitude d'ajouter une valeur arbitraire sur le Ymin pour construire un axe vertical, mais ici j'ai utilisé Ymax, donc c'est exagéré.
radouxju
4

Voici une autre approche que j'ai utilisée pour créer plusieurs filets de pêche dans les limites de chaque entité d'une classe d'entités. La variable search_extents définit le chemin d'accès à cette classe d'entités définissant l'étendue de chaque résille que je voulais créer. Il n'y a pas eu de rotation de la résille.

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"))
GForce
la source
1

Voici le code que j'ai finalement réussi à travailler (avec l'aide des exemples ci-dessus) pour résoudre le problème décrit ici:

    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")
Holly Copeland
la source