Tạo lớp tính năng đa giác từ tọa độ X, Y bằng ArcPy?


8

Tôi đang cố gắng viết một tập lệnh tạo ra một lớp tính năng đa giác mới chứa một đa giác (vuông) duy nhất có tọa độ sau: (0, 0), (0, 1.000), (1.000, 0) và (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

tọa độEx8.txt trông như thế này dưới đây

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

Treo lên trên dòng này:

for line in fileinput.FileInput(infile):

Thông báo lỗi:

ValueError: too many values to unpack

bất kỳ đề xuất? Tôi bị thua lỗ, tôi nghĩ rằng đó là thiết lập tệp .txt của tôi nhưng vẫn bị treo trên lỗi đó bất kể là gì. Không chắc chắn cách tiến hành, đây là câu hỏi trước câu hỏi bài tập về nhà thực tế của tôi sẽ khó hơn nhiều ... ban đầu, vòng lặp for là:

for line in fileinput.input(infile):

đã đưa ra một lỗi khác ...

Câu trả lời:


11

Đến:

Viết một kịch bản tạo ra một lớp đối tượng đa giác mới chứa một đa giác (vuông) duy nhất với các tọa độ sau: (0, 0), (0, 1.000), (1.000, 0) và (1.000, 1.000).

Tôi sẽ sử dụng cách tiếp cận sau, đây là một sự điều chỉnh nhỏ từ ví dụ về tài liệu Chèn Con trỏ .

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

2

Trong câu hỏi của bạn, thật khó để biết bài tập bạn đang cố gắng hoàn thành ở đâu và quá trình thử mã của bạn bắt đầu, nhưng tôi nghi ngờ rằng đoạn mã dưới đây sẽ gây ra lỗi tương tự:

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

Nếu vậy, thì bạn có thể kết luận rằng bạn đang gặp phải vấn đề Python (IT), thay vì ArcPy (GIS), nên được nghiên cứu / hỏi tại Stack Overflow chứ không phải ở đây.


Tôi luôn luôn có hai trang web lẫn lộn và những gì nên được đăng ở đâu, tôi sẽ đảm bảo xem xét điều đó trong tương lai trước khi đăng. Chỉnh sửa mã ở trên, một phần còn lại trong đó cần phải được xóa.
Staley

1
@Staley Theo nguyên tắc thông thường, nếu nó ném lỗi khi đề cập đến ArcPy thì có lẽ nó thuộc về đây, nếu không thì rất có thể đó có thể là lỗi Python. Nhận ra ArcPy kết thúc ở đâu và Python bắt đầu khó khăn ban đầu, nhưng tôi nghĩ đó là một kỹ năng quan trọng cần có, bởi vì nó cho phép bạn không biết lỗi xuất phát từ đâu, và do đó chúng nên được nghiên cứu, nhanh hơn nhiều.
PolyGeo

1
Tôi đã không nghĩ về nó như thế, khá thông minh, tôi chắc chắn sẽ sử dụng và áp dụng điều đó trong tương lai.
Staley

0

Kịch bản này đã làm việc cho tôi:

(lấy cảm hứng từ các câu trả lời trước và từ các ví dụ ở đây: https://pro.arcgis.com/en/pro-app/arcpy/get-started/wr-geometries.htmlm )

  1. Nhận phạm vi của raster
  2. Lưu giá trị phạm vi dưới dạng điểm (tọa độ trong [x,y])
  3. Tạo lớp tính năng mới để lưu trữ hình học mới
  4. Chèn cursordưới dạng hình học vào lớp đối tượng mới

Kịch bản:

# 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")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.