Tìm điểm trung tâm của một raster trong ArcGIS?


10

Nếu tôi có một tệp raster hình chữ nhật và tham chiếu địa lý được tải trong tài liệu ArcMap 10 (.tiff w / tfw liên kết), làm thế nào để tôi dễ dàng tìm thấy điểm trung tâm của nó và lưu điểm đó trong lớp vectơ điểm?

Ngoài ra, nếu tôi có nhiều trình quét như vậy trong tài liệu ArcMap của mình, làm cách nào để áp dụng quy trình cho tất cả chúng?

Thật không may, tôi không có kinh nghiệm Python. Do đó, một giải pháp lập trình là ổn, nhưng tôi sẽ cần hướng dẫn cụ thể về cách tải tập lệnh hiện có vào ArcGIS 10 và chạy nó trên trình duyệt trong các câu hỏi. (BTW, các trình quét đều nằm trong các lớp riêng biệt của chúng).


1
Các giải pháp lập trình có được chấp nhận?
Kirk Kuykendall

Tôi muốn chấp nhận một giải pháp lập trình, nhưng không có kinh nghiệm trăn. Tôi sẽ cần hướng dẫn về cách tải tập lệnh vào ArcGIS và chạy nó trên các trình quét được đề cập.
hpy

Câu trả lời:


7

Mặc dù câu hỏi ban đầu là 10.0, tôi đã cập nhật mã bên dưới cho 10.3.1.

Sao chép dán này vào cửa sổ python trong arcmap để tạo chức năng 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)

Sau đó, bạn có thể sử dụng cửa sổ python để tạo lớp tính năng của mình bằng cách gọi

RasterCenter("<reference to raster">)

Vì vậy, ví dụ, nếu bạn có một raster tên là DEM, bạn gọi RasterCenter ("dem") trong cửa sổ python và nó sẽ thêm một lớp có tên là "dem_center" với một điểm duy nhất ở trung tâm của raster. Lớp được lưu trữ trong bộ nhớ, vì vậy nếu bạn muốn giữ nó, hãy xuất nó.

Để đi xa hơn một bước, bạn có thể lưu tập lệnh vào tệp .py và đặt tệp .py vào đường dẫn tìm kiếm python. ví dụ: lưu nó dưới dạng RasterCenter.py và đặt nó vào PYTHONPATH (thông thường vị trí của cái này là C: \ Python26 \ ArcGIS10.0 \ Lib)

Sau đó, bạn có thể làm:

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

6

Rất dễ dàng, đơn giản có được các thuộc tính của trình quét và tìm ra điểm trung tâm từ min, max x và 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

Và kiểm tra lỗi thông thường vv ....

Sau đó thêm vào bảng điểm của bạn với updateCoder


2
Cách tiếp cận tốt đẹp. Tôi nghĩ rằng bạn muốn cải thiện công thức của mình cho tọa độ trung tâm: chúng là phương tiện của các điểm cuối, không phải là sự khác biệt của chúng.
whuber

Điều này trông giống như những gì tôi đang tìm kiếm, nhưng vì tôi không có kinh nghiệm về kịch bản trong ArcGIS, bạn có thể cho tôi biết cách tải và chạy một kịch bản như vậy không? (Tôi đã cập nhật câu hỏi ban đầu để phản ánh điều này ...) cảm ơn!
hpy

1
Bạn cũng có thể truy cập các giá trị bằng các thuộc tính phạm vi raster, ví dụ raster = arcpy.Raster ("raster"), sau đó centreX = raster.extent.XMax - raster.extent.XMin
blord-castillo

1
@Whuber Bây giờ tôi có thể thấy lỗi, tôi đã nghĩ đến việc khác tôi đang làm! Cảm ơn Whuber
Hairy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.