Membuat kelas fitur poligon dari koordinat X, Y menggunakan ArcPy?

8

Saya mencoba menulis skrip yang membuat kelas fitur poligon baru yang berisi satu poligon (persegi) dengan koordinat berikut: (0, 0), (0, 1.000), (1.000, 0), dan (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

koordinatEx8.txt terlihat seperti ini di bawah ini

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

Menggantung di baris ini:

for line in fileinput.FileInput(infile):

Pesan eror:

ValueError: too many values to unpack

ada saran? Saya bingung, saya pikir itu adalah set up file .txt saya tetapi tetap tergantung pada kesalahan itu tidak peduli apa. Tidak yakin bagaimana untuk melanjutkan, ini adalah pertanyaan sebelum pertanyaan pekerjaan rumah saya yang sebenarnya yang akan jauh lebih sulit ... juga awalnya for loop adalah:

for line in fileinput.input(infile):

yang memberi kesalahan berbeda ...

Staley
sumber

Jawaban:

11

Untuk:

Tulis skrip yang membuat kelas fitur poligon baru yang berisi satu poligon (persegi) dengan koordinat berikut: (0, 0), (0, 1.000), (1.000, 0), dan (1.000, 1.000).

Saya akan mengambil pendekatan berikut, yang merupakan sedikit adaptasi dari contoh dokumentasi Insert Cursor .

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
Harun
sumber
2

Dalam pertanyaan Anda, sulit untuk mengatakan di mana latihan yang Anda coba selesaikan dan upaya kode Anda dimulai, tetapi saya curiga bahwa kode di bawah ini akan memberi Anda kesalahan yang sama:

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()

Jika demikian, maka Anda dapat menyimpulkan bahwa Anda mengalami masalah Python (IT), bukan ArcPy (GIS), yang harus diteliti / ditanyakan di Stack Overflow daripada di sini.

PolyGeo
sumber
Saya selalu mencampuradukkan kedua situs dan apa yang harus diposting di mana, saya akan memastikan untuk mempertimbangkannya di masa depan sebelum memposting. Mengedit kode di atas, bagian yang tersisa harus dihapus.
Staley
1
@Staley Sebagai aturan praktis, jika ia melempar kesalahan yang menyebutkan ArcPy maka mungkin miliknya di sini, jika tidak maka kemungkinannya adalah kesalahan Python. Mengenali dari mana ArcPy berakhir dan Python dimulai pada awalnya sulit tetapi, saya pikir ini adalah keterampilan yang penting untuk diperoleh, karena memungkinkan Anda membidik dari mana kesalahan berasal, dan dengan demikian dari mana mereka harus diteliti, jauh lebih cepat.
PolyGeo
1
Saya belum memikirkannya seperti itu, cukup pintar, saya pasti akan menggunakan dan menerapkannya ke depan.
Staley
0

Skrip ini berfungsi untuk saya:

(terinspirasi oleh jawaban sebelumnya dan dari contoh di sini: https://pro.arcgis.com/en/pro-app/arcpy/get-started/writing-geometries.htm )

  1. Dapatkan tingkat raster
  2. Simpan nilai batas sebagai titik (koordinat dalam [x,y])
  3. Buat kelas fitur baru untuk menyimpan geometri baru
  4. Sisipkan cursorsebagai geometri ke kelas fitur baru

Naskah:

# 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
sumber