ArcPyを使用してX、Y座標からポリゴンフィーチャクラスを作成しますか?


8

次の座標を持つ単一(正方形)のポリゴンを含む新しいポリゴンフィーチャクラスを作成するスクリプトを記述しようとしています:(0、0)、(0、1,000)、(1,000、0)、および(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

ordinateEx8.txtは以下のようになります

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

この行で電話を切る:

for line in fileinput.FileInput(infile):

エラーメッセージ:

ValueError: too many values to unpack

助言がありますか?私は途方に暮れています。それは私の.txtファイルの設定であると思いましたが、何があってもそのエラーに留まり続けます。続行する方法がわからない、これは実際の宿題の質問の前の質問で、はるかに難しくなります...また、元々forループは次のとおりでした:

for line in fileinput.input(infile):

別のエラーが発生しました...

回答:


11

に:

次の座標を持つ単一(正方形)のポリゴンを含む新しいポリゴンフィーチャクラスを作成するスクリプトを記述します:(0、0)、(0、1,000)、(1,000、0)、および(1,000、1,000)。

私は次のアプローチをとります。これは、カーソル挿入のドキュメントの例を少し変更したものです。

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

あなたの質問では、完了しようとしている演習がどこで終了し、コードの試行が始まっているのかを知るのは難しいですが、以下のコードで同じエラーが発生するのは私の疑いです:

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

その場合、ArcPy(GIS)の問題ではなく、Python(IT)の問題が発生していると結論付けることができます。この問題は、ここではなくスタックオーバーフローで調査/確認する必要があります。


私は常に2つのサイトを混同しており、何をどこに投稿するべきかを考えています。投稿する前に、将来的にそれを考慮することを確認します。上記のコードを編集すると、削除する必要のある部分が残っています。
スターリー

1
@Staley経験則として、ArcPyについて言及するエラーがスローされた場合は、おそらくここに属しています。そうでない場合は、代わりにPythonエラーである可能性があります。ArcPyが終了し、Pythonが開始する場所を認識することは最初は難しいですが、エラーがどこから発生しているのか、つまりどこでエラーを調査する必要があるのか​​をより迅速に把握できるため、習得することは重要なスキルだと思います。
PolyGeo

1
私はそのようにそれについて考えていなかった、かなり賢い、私は間違いなくそれを今後使用して適用するでしょう。
スターリー

0

このスクリプトは私にとってうまくいきました:

(以前の回答とここの例からヒントを得た:https : //pro.arcgis.com/en/pro-app/arcpy/get-started/writing-geometries.htm

  1. ラスターの範囲を取得する
  2. 範囲値をポイントとして保存します(の座標[x,y]
  3. 新しいジオメトリを保存する新しいフィーチャクラスを作成します
  4. cursorジオメトリとして新しいフィーチャクラスに挿入

脚本:

# 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")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.