Xem liên kết này để biết thêm chi tiết.
Vấn đề:
Tôi muốn lặp qua một raster liên tục (một cái không có bảng thuộc tính), từng ô và nhận giá trị của ô. Tôi muốn lấy các giá trị đó và chạy các điều kiện trên chúng, mô phỏng các bước đại số bản đồ chi tiết bên dưới mà không thực sự sử dụng máy tính raster.
Theo yêu cầu của các bình luận bên dưới, tôi đã thêm các chi tiết cung cấp nền tảng cho vấn đề và chứng minh sự cần thiết phải thực hiện một phương pháp như vậy trong phần bên dưới có tên là "Phân tích cần thiết:".
Phân tích được đề xuất dưới đây, trong khi có liên quan đến vấn đề của tôi bằng cách cung cấp nền, không cần phải thực hiện trong câu trả lời. Phạm vi của câu hỏi chỉ liên quan đến việc lặp qua một raster liên tục để lấy / đặt các giá trị ô.
Các phân tích cần thiết:
Nếu BẤT K of điều kiện nào sau đây được thỏa mãn, hãy đặt cho ô đầu ra một giá trị là 1. Chỉ cung cấp cho ô đầu ra giá trị 0 nếu không có điều kiện nào được đáp ứng.
Điều kiện 1: Nếu giá trị ô lớn hơn ô trên cùng và dưới cùng, hãy đưa ra giá trị 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Trường hợp tập tin kernel trông như thế này:
3 3
0 1 0
0 0 0
0 1 0
Điều kiện 2: Nếu giá trị ô lớn hơn các ô bên trái và bên phải, hãy đưa ra giá trị 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Trường hợp tập tin kernel trông như thế này:
3 3
0 0 0
1 0 1
0 0 0
Điều kiện 3: Nếu giá trị ô lớn hơn các ô topleft và bottomright, đưa ra giá trị 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Trường hợp tập tin kernel trông như thế này:
3 3
1 0 0
0 0 0
0 0 1
Điều kiện 4: Nếu giá trị ô lớn hơn các ô dưới cùng và topright, cho giá trị 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Trường hợp tập tin kernel trông như thế này:
3 3
0 0 1
0 0 0
1 0 0
Điều kiện 5: Nếu bất kỳ một trong các ô liền kề có giá trị THIẾT BỊ cho ô trung tâm, hãy cung cấp cho raster đầu ra giá trị 1 ( sử dụng đa dạng tiêu cự với hai phép tính lân cận gần nhất )
Tại sao không sử dụng đại số bản đồ?
Dưới đây đã lưu ý rằng vấn đề của tôi có thể được giải quyết bằng cách sử dụng đại số bản đồ nhưng như đã thấy ở trên, đây là tổng cộng sáu phép tính raster, cộng với một để kết hợp tất cả các raster được tạo với nhau. Dường như với tôi rằng nó là nhiều hơn nữa hiệu quả để đi ô-by-tế bào và làm tất cả những so sánh cùng một lúc trong mỗi tế bào thay vì lặp qua từng cá nhân bảy lần và sử dụng khá nhiều bộ nhớ để tạo Bảy rasters.
Vấn đề nên được tấn công như thế nào?
Liên kết ở trên khuyên bạn nên sử dụng giao diện IPixelBlock, tuy nhiên không rõ ràng từ tài liệu ESRI cho dù bạn thực sự đang truy cập vào một giá trị ô thông qua IPixelBlock hoặc nếu bạn đang truy cập nhiều giá trị ô từ kích thước của IPixelBlock bạn đã đặt. Một câu trả lời tốt sẽ đề xuất một phương pháp để truy cập các giá trị ô của raster liên tục và đưa ra lời giải thích về phương pháp đằng sau mã, nếu không rõ ràng.
Tóm tắt:
Phương pháp tốt nhất để lặp qua mọi ô trong trình raster TIẾP TỤC ( không có bảng thuộc tính ) để truy cập các giá trị ô của nó là gì?
Một câu trả lời tốt không cần phải thực hiện các bước phân tích được mô tả ở trên, nó chỉ cần cung cấp một phương pháp để truy cập các giá trị ô của raster.