포인트 피처에서 정사각형 버퍼를 만들고 싶지만 여기에 들어가는 코드를 이해하지 못합니다.
forums.esri 웹 사이트에서 비슷한 질문을 받았지만 10 년이 넘었고 코드를 시도했을 때 작동하지 않았습니다.
정사각형을 어떻게 만드나요? 포인트 피쳐에서 버퍼링 하시겠습니까?
댓글
- gis.stackexchange.com/questions/12479 / … 는 본질적으로 중복이지만 (이 질문의 일반화를 다루기 때문에), 여기에는 이미 정사각형 버퍼에 특정한 좋은 답변이 있으므로 가장 좋은 것 같습니다. 두 스레드를 병합하는 대신 열려 있고 분리 된 상태로 둡니다. 그러나 더 많은 솔루션을 원한다면 다른 스레드도 읽어보십시오!
- 좋습니다. 감사합니다. 어제이 웹 사이트를 찾았는데 ' 아직 익숙해졌습니다. 저는 ' 향후 게시물 / 질문에서 그렇게하려고 노력할 것입니다. ' ArcGIS 포럼보다이 사이트가 훨씬 더 마음에 듭니다.
- ' 그 댓글을 의미하지는 않았습니다. 어떤 식 으로든 비판으로 Kimball : 두 스레드의 병합을 방지하기 위해 존재했습니다. ' 모두입니다. 커뮤니티에 오신 것을 환영합니다! (특히 ArcGIS 포럼에있는 친구들에게 우리에 대해 알려주세요. 🙂
- 맞습니다. 당신이 ' 그런 뜻이 아니라는 것을 알고 있습니다. 저는이 커뮤니티를 아주 좋아하고 이미이 새로운 포럼에 대해 다른 사람들에게 알리기 시작했습니다.
- 많은 의견을 보내 주셔서 감사합니다. 좌표를 수동으로 입력하지 않고 제공하는 스크립트를 사용하여 사각형 버퍼를 생성하기 위해 포인트 기능의 필드 데이터 세트를 사용하는 방법이 궁금합니다. 감사합니다.
답변
ArcMap 10에서 다음 단계를 시도해보세요.
- 버퍼 포인트 기능 (ArcToolbox> 분석 도구> 근접성> 버퍼). 선형 단위 상자에서 올바른 거리를 선택했는지 확인합니다.
- 새로 생성 된 버퍼를 피처 엔벨로프를 다각형으로 도구 (데이터 관리 도구> 기능> 기능 봉투를 다각형으로). 여러 포인트가있는 경우 “다중 부품 기능 생성”상자를 선택해야합니다.
Python 솔루션의 경우 :
SearchCursor 및 InsertCursor를 사용하여 정사각형 버퍼 만들기
댓글
- +1 솔루션이 효과가 있음을 보여주는 답글이 최고입니다.
답변
가능한 해결책은 원하는 반경으로 표준 ESRI 버퍼 도구를 사용하여 “일반”둥근 버퍼를 만든 다음 그 결과 버퍼의 피쳐 클래스에 대해 피쳐 엔벨로프를 폴리곤으로 수행하는 것입니다. 이것은 각 피처의 범위 주위에 정사각형 엔벨로프 피처를 만듭니다. Feature Envelope to Polygon은 Data Management> Features에 있습니다. 모델 작성기 모델은 다음과 유사합니다.
댓글
- 뛰어난 솔루션! 또한 버퍼의 출력을 in_memory 계층 (in_memory \ tmpBuffer)으로 생성하여 불필요한 데이터를 디스크에 쓰는 것을 방지하고 프로세스를 훨씬 빠르게 만들 수 있습니다.
답변
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를 지정하십시오) : 다음 예와 같이 포인트의 엔벨로프에서 정사각형 버퍼를 만듭니다. GeoFea의 포인트 검색에서 모든 피처 가져 오기 tureLayer 스 니펫
ESRI.ArcGIS.Geometry.IEnvelope envelope = point.Envelope; envelope.Expand(searchTolerance, searchTolerance, false);
답변
고급 라이선스가없는 경우 Aaron의 답변 대신 Minimum Bounding Geometry 도구를 사용하세요. . 아래 단계 (Aaron에서 수정 됨) :
- 버퍼 포인트 피쳐 (ArcToolbox> 분석 도구> 근접성> 버퍼). 선형 단위 상자에서 올바른 거리를 선택해야합니다.
- 새로 생성 된 버퍼를 최소 경계 형상 도구 (데이터 관리 도구> 기능> 최소 경계 형상)에 입력합니다. “RECTANGLE_BY_AREA”또는 “RECTANGLE_BY_WIDTH”를 사용하세요. 다른 옵션은 고급 라이선스로만 사용할 수 있습니다.
수정 :이 옵션을 사용하면”ENVELOPE “옵션 (고급 라이센스가 필요함)을 사용하지 않고 결과 사각형 버퍼의 방향을 제어 할 수 없습니다.”출력 할 속성으로 형상 특성 추가 ( 선택 사항) “옵션-결과 오프셋은 출력 피쳐 클래스에”MBG_Orientation “으로 기록됩니다. 그런 다음 원하는 경우 피쳐를 다시 중앙으로 회전하는 데 사용할 수 있습니다. 회전 참조 ArcPy를 사용하는 속성 테이블의 값으로 폴리곤? 에 대한 잠재적 솔루션을 찾을 수 있습니다.
댓글
- 특정 피쳐 클래스의 경우이 워크 플로를 사용하여 사각형을 다른 방향으로 회전시킵니다. 아마도 내가 가지고 있기 때문에 겹치는 버퍼 원. 확실하지 않다. Esri가 동일한 피쳐 클래스에서 위의 Aaron '의 방법을 사용하도록했고 버퍼링 된 원을 회전하지 않았습니다.
- @Andrew, 네 ' 맞습니다. 이는 고급 라이선스가없는 도구의 제한 사항입니다. ENVELOPE 옵션을 사용하면 위의 Aaron '의 방법과 동일한 결과가 반환되지만 고급 라이선스도 필요합니다. 잠재적 인 해결 방법은 ' 기하학적 특성을 속성으로 추가 ' 옵션을 선택하고 기울어 진 정도를 확인하는 것입니다 (일관 적이어야 함). ) 그런 다음 편집 세션에서 결과 사각형 버퍼를 해당 크기만큼 회전합니다. ' 아직 시도하지 않았습니다.
답변
이 site 는 geographiclib JavaScript 및 js2shapefile을 사용하여 csv를 정사각형, 직사각형 또는 원형 버퍼로 변환하는 방법을 설명합니다.
해결되면 살펴볼 수 있습니다. 당신의 문제.