답변:
ArcToolbox 에서 Feature Vertices To Points 도구 를 사용 하거나 Advanced 라이센스가없는 경우 ET GeoWizard (무료 도구) 의 Polygon to Point 도구를 사용할 수 있습니다 . 마지막으로 ArcMap에서 XY 좌표 추가 도구를 사용하여 각 정점에 대한 XY 값을 생성하고 테이블을 Excel 로 사용하여 스프레드 시트를 생성하십시오.
텍스트 파일에 쓰기 기능을 포함하는 샘플 도구 상자가 있습니다. 파이썬 스크립트 :
피쳐 좌표를 텍스트 파일에 씁니다.
참고 :
기술적으로 샘플 도구 상자의 도구는 더 이상 사용되지 않습니다. 10 이전에 개발 한 기존 스크립트 또는 모델 도구가 계속 작동 할 수 있도록 ArcGIS와 함께 설치됩니다.
이것은 da.SearchCursor를 사용하여 수행하는 또 다른 방법입니다 .
import arcpy
fc=r'C:\TEST.gdb\polygons123'
with arcpy.da.SearchCursor(fc,['OID@','SHAPE@']) as cursor:
for row in cursor:
array1=row[1].getPart()
for vertice in range(row[1].pointCount):
pnt=array1.getObject(0).getObject(vertice)
print row[0],pnt.X,pnt.Y
Excel로 복사 할 수있는 ObjectID, X 및 Y 결과 :
...
1 537505.894287 6731069.60889
1 537533.516296 6731078.20947
1 537555.316528 6731082.53589
1 537562.501892 6731085.47913
1 537589.395081 6731070.52991
1 537617.062683 6731058.29651
2 537379.569519 6729746.16272
2 537384.81311 6729746.06012
2 537396.085327 6729748.62311
2 537404.065674 6729752.75311
2 537425.145325 6729773.72931
2 537429.842102 6729777.07129
2 537442.971313 6729780.10651
2 537450.27533 6729780.51611
...
다음 python 스크립트 (ArcGIS 10.1 이상이 필요)는 arcpy.da
shapefile을 입력으로 사용하고 .shp에있는 각 다각형의 각 정점에 대한 항목이있는 스프레드 시트를 작성하는 데 활용 합니다 (저는 더 낮은 수준의 arcgis 라이센스로 작동한다고 생각합니다) . 객체와 시퀀스 ID는 점을 특정 다각형의 특정 위치에 다시 연결합니다.
이 게시물에서 H / t @PaulSmith : 도구 에서 옵션 을 강조하기 위해 폴리 라인의 모든 점을 가져explode_to_points
옵니다arcpy.da.FeatureClassToNumPyArray
import os
import csv
import arcpy
from os import path
from arcpy import da
from arcpy import env
env.overwriteOutput = True
env.workspace = '/folder/containing/your/shp/here'
polygon_shp = path.join(env.workspace, 'your_shapefile_name.shp')
vertex_csv_path = 'your/csv/path/here/poly_vertex.csv'
def getPolygonCoordinates(fc):
"""For each polygon geometry in a shapefile get the sequence number and
and coordinates of each vertex and tie it to the OID of its corresponding
polygon"""
vtx_dict = {}
s_fields = ['OID@', 'Shape@XY']
pt_array = da.FeatureClassToNumPyArray(polygon_shp, s_fields,
explode_to_points=True)
for oid, xy in pt_array:
xy_tup = tuple(xy)
if oid not in vtx_dict:
vtx_dict[oid] = [xy_tup]
# this clause ensures that the first/last point which is listed
# twice only appears in the list once
elif xy_tup not in vtx_dict[oid]:
vtx_dict[oid].append(xy_tup)
vtx_sheet = []
for oid, vtx_list in vtx_dict.iteritems():
for i, vtx in enumerate(vtx_list):
vtx_sheet.append((oid, i, vtx[0], vtx[1]))
writeVerticesToCsv(vtx_sheet)
def writeVerticesToCsv(vtx_sheet):
"""Write polygon vertex information to csv"""
header = (
'oid', 'sequence_id',
'x_coordinate', 'y_coordinate')
with open(vertex_csv_path, 'wb') as vtx_csv:
vtx_writer = csv.writer(vtx_csv)
vtx_writer.writerow(header)
for row in vtx_sheet:
vtx_writer.writerow(row)
getPolygonCoordinates(polygon_shp)
나는 또한 특정의 요구 사항을 해결하는 스크립트 작성 : 다각형 삽입 정점 좌표 이 질문에 중복으로 표시되고, 그 코드는 다음과 같습니다 :
import os
import arcpy
from os import path
from arcpy import da
from arcpy import env
from arcpy import management
env.overwriteOutput = True
env.workspace = '/folder/containing/your/shp/here'
polygon_shp = path.join(env.workspace, 'your_shapefile_name.shp')
file_gdb = 'your/file/gdb/path/here/temp.gdb'
def addVerticesAsAttributes(fc):
"""Add the x,y coordinates of vertices as attributes to corresponding
features. The coordinates will be in the order the appear in the geometry"""
polygon_copy = createGdbFcCopy(fc)
vtx_dict = {}
s_fields = ['OID@', 'Shape@XY']
pt_array = da.FeatureClassToNumPyArray(polygon_copy, s_fields,
explode_to_points=True)
for oid, xy in pt_array:
xy_tup = tuple(xy)
if oid not in vtx_dict:
vtx_dict[oid] = [xy_tup]
# this clause ensures that the first/last point which is listed
# twice only appears in the list once
elif xy_tup not in vtx_dict[oid]:
vtx_dict[oid].append(xy_tup)
# find that largest number of points that exist within a polygon to determine
# the number of fields that need to be added to the shapefile
max_vertices = 0
for vtx_list in vtx_dict.values():
if len(vtx_list) > max_vertices:
max_vertices = len(vtx_list)
xy_fields = addXyFields(polygon_copy, max_vertices)
u_fields = ['OID@'] + xy_fields
with da.UpdateCursor(polygon_copy, u_fields) as cursor:
oid_ix = cursor.fields.index('OID@')
for row in cursor:
xy_ix = oid_ix + 1
for vtx in vtx_dict[row[oid_ix]]:
for coord in vtx:
row[xy_ix] = coord
xy_ix += 1
cursor.updateRow(row)
def createGdbFcCopy(fc):
"""Create copy of the input shapefile as a file geodatabase feature class,
because a huge number of fields may be added to the fc this preferable to shp"""
if not arcpy.Exists(file_gdb):
management.CreateFileGDB(path.dirname(file_gdb),
path.basename(file_gdb))
polygon_copy = path.join(file_gdb, 'polygon_shp_copy')
management.CopyFeatures(polygon_shp, polygon_copy)
return polygon_copy
def addXyFields(fc, vtx_count):
"""Add fields to the feature class that will hold the x, y coordinates for each
vertex, the number of fields is twice the number of most vertices in any polygon"""
field_list = []
f_type = 'DOUBLE'
for i in range(1, vtx_count+1):
f_names = ['x{0}'.format(i), 'y{0}'.format(i)]
for fn in f_names:
management.AddField(fc, fn, f_type)
field_list.extend(f_names)
return field_list
addVerticesAsAttributes(polygon_shp)
아직 솔루션을 완료하지 않았지만이 도구를 사용할 수있는 것처럼 보입니다.
JSON으로 변환> JSON> 기능
그러면 shapefile (내 경우에는 81 다각형)이 JSON 파일로 변환됩니다. 텍스트 편집기로 이것을 열어서 실제로 모든 정점이 각 다각형에 대해 나열되어 있는지 확인할 수 있습니다.
또한 파이썬 표준 라이브러리 (import json)는 json 객체를 사전으로 취급합니다. 그런 다음 사전을 반복하여 정점 값 (및 원하는 다른 속성)을 csv 파일에 쓸 수 있습니다. 그것이 작동하게되면 돌아와서 soln을 게시 할 것입니다.
폴리 라인과 폴리곤에 대한 x와 y 좌표가 필요했습니다. ToolBox-> 데이터 관리 도구-> 기능-> Feature to Point를 사용했습니다. 이것은 점 모양 파일을 만든 다음 같은 기능 메뉴에서 XY 좌표 추가를 사용하여 XY 좌표를 생성했습니다. 그런 다음 도형 속성 테이블의 정보를 Excel 시트로 추출했습니다. 이것은 내 문제를 해결했지만, 당신이 같은 것을 찾고 있는지 확실하지 않습니다.
절망적 인 시간에 해결 방법이 있습니다.
이 방법은 소규모 데이터 세트에는 적합하지만 OCR 변환기의 종속성 / 제한이 주요 관심사입니다. 주의해서 사용하십시오.