Erstellen einer Polygon-Feature-Class aus X- und Y-Koordinaten mit ArcPy?

8

Ich versuche, ein Skript zu schreiben, das eine neue Polygon-Feature-Class erstellt, die ein einzelnes (quadratisches) Polygon mit den folgenden Koordinaten enthält: (0, 0), (0, 1.000), (1.000, 0) und (1.000, 1.000) .


import arcpy
import fileinput
import string
import os

from arcpy import env    
env.workspace = "D:/UW/Winter_2016/501/w5_more_arcpy8_9_10/ex8" 
env.overwriteOutput = True

infile = "D:/UW/Winter_2016/501/w5_more_arcpy8_9_10/ex8/coordinatesEx8.txt"

for line in fileinput.FileInput(infile):
    ID, X, Y = string.split(line, " ")
    array.add(arcpy.Point(X, Y))
cursor.insertRow([arcpy.Polygon(array)])
fileinput.close()

outpath = "D:/UW/Winter_2016/501/w5_more_arcpy8_9_10/ex8"
newfc = "newFeatureClassEx8.shp"
arcpy.CreateFeatureclass_management(outpath, newfc, "Polygon")

cursor = arcpy.da.InsertCursor(newfc, ["SHAPE@"])
array = arcpy.Array()

del cursor

koordinatesEx8.txt sieht unten so aus

1 0 1000 
2 1000 0 
3 1000 1000 
4 0 0

Auflegen in dieser Zeile:

for line in fileinput.FileInput(infile):

Fehlermeldung:

ValueError: too many values to unpack

irgendwelche Vorschläge? Ich bin ratlos, ich dachte, es wäre das Setup meiner TXT-Datei, aber ich halte an diesem Fehler fest, egal was passiert. Ich bin mir nicht sicher, wie ich vorgehen soll. Dies ist die Frage vor meiner eigentlichen Hausaufgabenfrage, die viel schwieriger sein wird. Ursprünglich war auch die for-Schleife:

for line in fileinput.input(infile):

was einen anderen Fehler gab ...

Staley
quelle

Antworten:

11

Zu:

Schreiben Sie ein Skript, das eine neue Polygon-Feature-Class erstellt, die ein einzelnes (quadratisches) Polygon mit den folgenden Koordinaten enthält: (0, 0), (0, 1.000), (1.000, 0) und (1.000, 1.000).

Ich würde den folgenden Ansatz wählen, der eine geringfügige Anpassung des Dokumentationsbeispiels zum Einfügen des Cursors darstellt .

import arcpy

# Create a polygon geometry
array = arcpy.Array([arcpy.Point(0, 0),
                     arcpy.Point(0, 1000),
                     arcpy.Point(1000, 1000),
                     arcpy.Point(1000, 0)
                     ])
polygon = arcpy.Polygon(array)

# Open an InsertCursor and insert the new geometry
cursor = arcpy.da.InsertCursor(r'C:\path\to\your\geodatabase.gdb\polygon', ['SHAPE@'])
cursor.insertRow([polygon])

# Delete cursor object
del cursor
Aaron
quelle
2

In Ihrer Frage ist es schwer zu sagen, wo die Übung, die Sie abschließen möchten, endet und Ihr Codeversuch beginnt, aber ich vermute, dass der folgende Code Ihnen den gleichen Fehler gibt:

import fileinput
import string
import os

infile = "D:/UW/Winter_2016/501/w5_more_arcpy8_9_10/ex8/coordinatesEx8.txt"

for line in fileinput.FileInput(infile):
    ID, X, Y = string.split(line, " ")
fileinput.close()

Wenn ja, können Sie daraus schließen, dass Sie auf ein Python (IT) - und nicht auf ein ArcPy (GIS) -Problem stoßen, das bei Stack Overflow und nicht hier untersucht werden sollte.

PolyGeo
quelle
Ich verwechsle immer die beiden Seiten und was wo gepostet werden soll, werde ich in Zukunft berücksichtigen, bevor ich poste. Beim Bearbeiten des obigen Codes blieb ein Teil übrig, das gelöscht werden musste.
Staley
1
@Staley Als Faustregel gilt, dass ein Fehler, der ArcPy erwähnt, wahrscheinlich hierher gehört. Wenn nicht, besteht die Möglichkeit, dass es sich stattdessen um einen Python-Fehler handelt. Zu erkennen, wo ArcPy endet und Python beginnt, ist anfangs schwierig, aber ich denke, es ist eine wichtige Fähigkeit, diese zu erwerben, da Sie so viel schneller herausfinden können, woher Fehler kommen und wo sie untersucht werden sollten.
PolyGeo
1
Ich hatte nicht so darüber nachgedacht, ziemlich klug, ich werde das auf jeden Fall in Zukunft verwenden und anwenden.
Staley
0

Dieses Skript hat bei mir funktioniert:

(inspiriert von früheren Antworten und Beispielen hier: https://pro.arcgis.com/de/pro-app/arcpy/get-started/writing-geometries.htm )

  1. Holen Sie sich das Ausmaß des Rasters
  2. Ausdehnungswerte als Punkte speichern (Koordinaten in [x,y])
  3. Erstellen Sie eine neue Feature-Class, um neue Geometrie zu speichern
  4. cursorAls Geometrie in neue Feature-Class einfügen

Skript:

# Create polygon from raster extent

import arcpy, os
from arcpy.sa import *   # import Spatial analysis extension

arcpy.CheckOutExtension("spatial")

# Define path to your data
inWD = "C:/Users/myData/rasterExtentToPoly"

# set working environment
arcpy.env.workspace = os.path.join(inWD)
arcpy.env.overwriteOutput = True

# Read input raster
raster = "eu_dem_v11_E40N20.TIF"

# Get raster extent
myRaster = Raster(raster)   # need to read raster as Raster object
myExtent = myRaster.extent

# Store extent coordinates 
xmax = myExtent.XMax
xmin = myExtent.XMin
ymax = myExtent.YMax
ymin = myExtent.YMin

# Store extent values as list of coordinates 
coordinates = [(xmin, ymin),
               (xmin, ymax),
               (xmax, ymax),
               (xmax, ymin)]

# Get coordinate system
sr = arcpy.Describe(raster).spatialReference


# Create new feature class and than insert the polygon geometry 
result = arcpy.management.CreateFeatureclass(inWD,
                                             "rasterExtent",
                                              "POLYGON",
                                              "",
                                              "",
                                              "",
                                              sr) # define projection

# Create feature class
outPolyExtent= result[0]

# Use Insert cursor to add new geometry to feature class Write feature to new feature class
with arcpy.da.InsertCursor(outPolyExtent, ['SHAPE@']) as cursor:
    cursor.insertRow([coordinates])

# Return the Spatial Analysis extension 
arcpy.CheckInExtension("Spatial")
Maycca
quelle