ArcGIS에서 래스터의 중심점을 찾으십니까?


10

예를 들어 ArcMap 10 문서 (.tiff w / 관련 tfw)에로드 된 직사각형 및 지리 참조 래스터 파일이있는 경우 중심점을 쉽게 찾아 점 벡터 레이어에 저장하려면 어떻게해야합니까?

또한 ArcMap 문서에 여러 래스터가있는 경우 모든 래스터에 프로세스를 적용하려면 어떻게해야합니까?

불행히도, 나는 파이썬 경험이 없습니다. 따라서 프로그래밍 방식으로는 문제가 없지만 기존 스크립트를 ArcGIS 10에로드하고 문제의 래스터에서 실행하는 방법에 대한 특정 지침이 필요합니다. (BTW, 래스터는 모두 별도 레이어에 있습니다).


1
프로그래밍 솔루션이 허용됩니까?
Kirk Kuykendall

프로그래밍 방식의 솔루션을 수락하고 싶지만 파이썬 경험이 없습니다. 스크립트를 ArcGIS에로드하고 문제의 래스터에서 실행하는 방법에 대한 지침이 필요합니다.
hpy

답변:


7

원래 질문은 10.0에 대한 것이지만 10.3.1에 대해 아래 코드를 업데이트했습니다.

이것을 아크 맵의 파이썬 창에 붙여 넣어 RasterCenter 함수를 만듭니다 :

import arcpy, os
def RasterCenter(raster):
    #raster: string reference to raster
    raster = arcpy.Raster(raster)
    fcname = "{}_center".format(os.path.basename(str(raster)))
    x = raster.extent.XMin + (raster.extent.XMax - raster.extent.XMin)/2
    y = raster.extent.YMin + (raster.extent.YMax - raster.extent.YMin)/2
    featureclass = arcpy.CreateFeatureclass_management("in_memory", fcname, "POINT",spatial_reference = raster.spatialReference)
    with arcpy.da.InsertCursor(featureclass, ['SHAPE@XY']) as cursor:
        cursor.insertRow(((x, y),))
    mxd = arcpy.mapping.MapDocument("CURRENT")
    df = arcpy.mapping.ListDataFrames(mxd)[0]
    arcpy.MakeFeatureLayer_management(featureclass, fcname)
    layer = arcpy.mapping.Layer(fcname)
    arcpy.mapping.AddLayer(df, layer)

그런 다음 파이썬 창을 사용하여 호출하여 기능 클래스를 작성할 수 있습니다.

RasterCenter("<reference to raster">)

예를 들어 DEM이라는 래스터가있는 경우 파이썬 창에서 RasterCenter ( "dem")를 호출하면 래스터 중앙에 단일 점이있는 "dem_center"라는 레이어가 추가됩니다. 레이어는 메모리에 저장되므로 유지하려면 내보내십시오.

한 단계 더 나아가려면 스크립트를 .py 파일에 저장하고 .py 파일을 python의 검색 경로에 배치하십시오. 예를 들어 RasterCenter.py로 저장하고 PYTHONPATH에 배치하십시오 (일반적으로 C : \ Python26 \ ArcGIS10.0 \ Lib).

그럼 당신은 할 수 있습니다 :

import RasterCenter
RasterCenter.RasterCenter("<reference to raster">)

6

매우 쉽고 간단하게 래스터 속성을 가져오고 최소, 최대 x 및 y에서 중심점을 계산합니다.

MinX = arcpy.GetRasterProperties_management("raster", "LEFT")
MinY = arcpy.GetRasterProperties_management("raster", "BOTTOM")
MaxX = arcpy.GetRasterProperties_management("raster", "RIGHT")
MaxY = arcpy.GetRasterProperties_management("raster", "TOP")

centreX = (MaxX + MinX) / 2
centreY = (MaxY + MinY) / 2

그리고 일반적인 오류 검사 등 ...

그런 다음 updateCursor를 사용하여 포인트 테이블에 추가하십시오.


2
좋은 접근법. 중심 좌표에 대한 공식을 개선하고 싶다고 생각합니다. 차이점은 종점이 아닌 수단입니다.
whuber

이것은 내가 찾고있는 것처럼 보이지만 ArcGIS에 스크립팅 경험이 없기 때문에 그러한 스크립트를로드하고 실행하는 방법을 알려 줄 수 있습니까? (이것을 반영하기 위해 원래 질문을 업데이트했습니다 ...) 감사합니다!
hpy

1
raster.extent.XMin - 또한 래스터 정도의 특성, 예를 들어, 래스터 = arcpy.Raster ( "래스터"), 다음 센트렉스 (Centrex) = raster.extent.XMax 사용하여 값에 액세스 할 수 있습니다
blord - 카스티요

1
@ 우버 (Whuber) 나는 지금 오류를 볼 수있다. 나는 내가하고있는 다른 것을 생각하고 있었다! 감사 Whuber
털이
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.