กำลังค้นหาจุดศูนย์กลางของแรสเตอร์ใน ArcGIS หรือไม่?


10

ถ้าฉันพูดไฟล์แรสเตอร์รูปสี่เหลี่ยมผืนผ้าและอ้างอิงทางภูมิศาสตร์โหลดในเอกสาร ArcMap 10 (.tiff w / ที่เกี่ยวข้อง tfw) ฉันจะหาจุดกึ่งกลางของมันได้อย่างง่ายดายและจัดเก็บจุดนั้นในเลเยอร์เวกเตอร์จุดได้อย่างไร

นอกจากนี้ถ้าฉันมีแรสเตอร์หลายตัวในเอกสาร ArcMap ของฉันฉันจะใช้กระบวนการนี้กับพวกเขาทั้งหมดได้อย่างไร?

น่าเสียดายที่ฉันไม่มีประสบการณ์ Python เลย ดังนั้นทางออกของการเขียนโปรแกรมก็โอเค แต่ฉันต้องการคำแนะนำเฉพาะเกี่ยวกับวิธีการโหลดสคริปต์ที่มีอยู่ใน ArcGIS 10 และเรียกใช้บน rasters ในคำถาม (BTW แรสเตอร์ทั้งหมดอยู่ในเลเยอร์แยกต่างหาก)


1
วิธีแก้ปัญหาเชิงโปรแกรมเป็นที่ยอมรับหรือไม่?
Kirk Kuykendall

ฉันต้องการยอมรับวิธีการเขียนโปรแกรม แต่มีประสบการณ์หลามเป็นศูนย์ ฉันจะต้องการคำแนะนำเกี่ยวกับวิธีการโหลดสคริปต์ลงใน ArcGIS และเรียกใช้บน rasters ในคำถาม
hpy

คำตอบ:


7

แม้ว่าคำถามเดิมสำหรับ 10.0 ฉันได้ปรับปรุงรหัสด้านล่างสำหรับ 10.3.1

คัดลอกวางลงในหน้าต่างไพ ธ อนใน arcmap เพื่อสร้างฟังก์ชั่น 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" โดยมีจุดเดียวที่กึ่งกลางของแรสเตอร์ เลเยอร์จะถูกเก็บไว้ในหน่วยความจำดังนั้นหากคุณต้องการเก็บไว้ให้ส่งออก

หากต้องการไปอีกขั้นตอนหนึ่งคุณสามารถบันทึกสคริปต์เป็นไฟล์. และวางไฟล์. pi ในพา ธ การค้นหาสำหรับ python เช่นบันทึกเป็น RasterCenter.py และวางไว้ใน PYTHONPATH (ปกติจุดนี้คือ C: \ Python26 \ ArcGIS10.0 \ Lib)

จากนั้นคุณสามารถทำได้:

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

6

ง่ายมาก ๆ ง่าย ๆ รับคุณสมบัติของ rasters และหาจุดศูนย์กลางจาก min, max 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 = arcpy.Raster ("raster") จากนั้น centreX = raster.extent.XMax - raster.extent.XMin
blord-castillo

1
@ เมื่อฉันเห็นข้อผิดพลาดตอนนี้ฉันกำลังคิดถึงสิ่งอื่นที่ฉันกำลังทำอยู่! ขอบคุณ Whuber
ขน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.