태그 보관물: arcgis-desktop

arcgis-desktop

ArcGIS for Desktop을 사용하여 포인트 피처 주위의 사각형 버퍼를 생성합니까? 웹 사이트에서 비슷한

포인트 피처에서 정사각형 버퍼를 만들고 싶지만 그것에 들어가는 코드를 이해하지 못합니다.

forums.esri 웹 사이트에서 비슷한 질문이 있었지만 10 년 전이었고 코드를 시도해도 작동하지 않았습니다.

포인트 피처에서 정사각형 버퍼를 만들려면 어떻게합니까?



답변

ArcMap 10으로 다음 단계를 시도하십시오.

  1. 포인트 기능을 버퍼링 합니다 (ArcToolbox> 분석 도구> 근접성> 버퍼). 선형 단위 상자에서 올바른 거리를 선택하십시오.
  2. 새로 작성된 버퍼를 Feature Envelope to Polygon 도구 (데이터 관리 도구> 기능> Feature Envelope to Polygon)에 입력하십시오. 포인트가 여러 개인 경우 “멀티 파트 피쳐 생성”상자를 선택하십시오.

파이썬 솔루션의 경우 :

SearchCursor 및 InsertCursor를 사용하여 정사각형 버퍼 만들기


답변

가능한 해결책은 원하는 반지름으로 표준 ESRI 버퍼 도구를 사용하여 “일반”라운드 버퍼를 생성 한 다음 해당 피쳐 클래스의 버퍼에서 피쳐 봉투를 다각형으로 수행하는 것입니다. 그러면 각 피처의 범위 주위에 정사각형 엔벌 로프 피처가 생성됩니다. Feature Envelope to Polygon은 데이터 관리> 기능에 있습니다. 모델 빌더 모델은 다음과 유사합니다.


답변

Aaron의 코드 끝에 링크 된 스크립트는 정사각형 버퍼에만 사용할 수 있고 최신 arcpy.da 모듈을 사용하지 않기 때문에 사각형 버퍼를 만드는 데 사용할 수있는 스크립트를 작성했습니다. 10k 랜덤 포인트 데이터 세트에서 10 초 안에 완료되었습니다.

import os, arcpy

point_FC = arcpy.GetParameterAsText(0)
w = float(arcpy.GetParameterAsText(1))
h = float(arcpy.GetParameterAsText(2))
output_FC = arcpy.GetParameterAsText(3)

def rect(coord, w, h):
        #Given XY coordinates and rectangle dimensions,
        #return a polygon object of a rectangle centered about the point
        x,y = coord
        w *= 0.5
        h *= 0.5
        xmin,xmax = x-w, x+w
        ymin,ymax = y-h, y+h
        poly = ((xmin, ymax), (xmax, ymax), (xmax, ymin), (xmin, ymin))
        return arcpy.Polygon(arcpy.Array(arcpy.Point(*p) for p in poly))

#Create output feature class.
spatref = arcpy.Describe(point_FC).spatialReference
folder, base = os.path.split(output_FC)
arcpy.CreateFeatureclass_management(folder, base, "POLYGON", spatial_reference=spatref)

#Get field object for every field in input except OID and Shape.
fields = [f for f in arcpy.ListFields(point_FC) if f.type not in ("OID", "Geometry")]

for field in fields:
         arcpy.AddField_management(output_FC, field.name, field.type, field.precision,
                                   field.scale, field.length, field.aliasName,
                                   field.isNullable, field.required, field.domain)

#Get field names to be inputted to cursors.
#Need SHAPE@XY token to read point coords and SHAPE@ token to write polygon coords.
fnames = [f.name for f in fields]
fields_in = fnames[::]
fields_out = fnames[::]
fields_in.append("SHAPE@XY")
fields_out.append("SHAPE@")

#Create buffers and write attributes to output FC, if any.
count = int(arcpy.GetCount_management(point_FC)[0])
arcpy.SetProgressor("step", "Buffering...", 0, count, 1)
with arcpy.da.SearchCursor(point_FC, fields_in) as Scursor,  arcpy.da.InsertCursor(output_FC, fields_out) as Icursor:
        for i,row_in in enumerate(Scursor):
                #"Convert" point to rectangle
                arcpy.SetProgressorPosition(i)
                feature = list(row_in)
                feature[-1] = rect(feature[-1], w, h)
                Icursor.insertRow(feature)

답변

ArcObjects를 사용한다고 가정하고 (사용중인 언어 및 API를 지정하려면 태그를 사용하십시오) IEnvelope.Expand다음 예제와 같이 포인트의 봉투에서 정사각형 버퍼를 만드는 데 사용할 수 있습니다. GeoFeatureLayer 스 니펫의 포인트 검색에서 모든 기능 가져 오기

ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope;
envelope.Expand(searchTolerance, searchTolerance, false);

답변

Aaron의 답변에 대한 대안으로 Advanced 라이센스가없는 경우 Minimum Bounding Geometry 도구를 사용하십시오 . 아래 단계 (Aaron에서 수정) :

  1. 포인트 기능을 버퍼링 합니다 (ArcToolbox> 분석 도구> 근접성> 버퍼). 선형 단위 상자에서 올바른 거리를 선택하십시오.
  2. 새로 작성된 버퍼를 최소 경계 형상 도구 (데이터 관리 도구> 기능> 최소 경계 형상)에 입력하십시오. ‘RECTANGLE_BY_AREA’또는 ‘RECTANGLE_BY_WIDTH’를 사용하십시오. 다른 옵션은 고급 라이센스에서만 사용할 수 있습니다.

편집 :이 옵션을 사용하면 ‘ENVELOPE’옵션 (고급 라이센스가 필요함)을 사용하지 않고 결과 사각형 버퍼의 방향을 제어 할 수 없습니다. ‘출력에 속성으로 형상 특성 추가 (옵션)’옵션을 선택하면 결과 오프셋이 출력 피쳐 클래스에서 ‘MBG_Orientation’으로 기록됩니다. 그런 다음 원하는 경우 피쳐를 중심으로 다시 회전시키는 데 사용할 수 있습니다. ArcPy를 사용하여 속성 테이블에서 값으로 다각형 회전을 참조하십시오 . 그것에 대한 잠재적 인 해결책을 위해.


답변

사이트 는 geographiclib JavaScript 및 js2shapefile을 사용하여 csv를 정사각형 또는 사각형 또는 원형 버퍼로 변환하는 방법을 설명합니다.

문제가 해결되면 살펴볼 수 있습니다.


답변