Tại sao điều quan trọng là sử dụng các lớp tính năng trong ModelBuilder?


9

Tôi đang cố gắng hiểu việc tạo một công cụ địa lý với ModelBuilder, nhưng tôi không biết tại sao điều quan trọng là sử dụng các lớp tính năng thay vì các lớp tính năng khi tạo một công cụ địa lý với ModelBuilder. Ai đó có thể vui lòng giải thích tại sao?


Câu trả lời:


4

Các mô hình có thể có nhiều lớp đầu ra quá trình phụ tùy thuộc vào kích thước và độ phức tạp của chúng. Để loại bỏ các tệp được ghi vào đĩa cứng của bạn, một số công cụ giúp bạn sử dụng các lớp tính năng (ví dụ: Chọn tính năng chọn hoặc Chọn theo thuộc tính ). Các lớp tính năng là tạm thời và sẽ không tồn tại sau khi mô hình của bạn kết thúc.

Xem Tạo lớp tính năng


9

Có một vài lý do khiến bạn muốn tham khảo Lớp tính năng trong ModelBuilder, trái ngược với Lớp tính năng. Đầu tiên nó rất hữu ích để hiểu sự khác biệt.

  • "Các lớp tính năng" chỉ đơn giản là tham chiếu đến dữ liệu thô. Một ví dụ đơn giản về điều này trong đó FC là một shapefile trên đĩa.
  • "Lớp tính năng" là các tham chiếu đến sự trừu tượng hóa dữ liệu, nơi bạn có thể tương tác với một hoặc nhiều tính năng trong bộ dữ liệu thô (trái ngược với toàn bộ dữ liệu). Các lớp là những gì bạn đang tương tác hiệu quả khi bạn đã tải dữ liệu vào ArcMap.

Vì vậy, dựa trên nền tảng đó, đây là một số lý do tại sao bạn muốn sử dụng công cụ "Tạo lớp tính năng" làm trung gian giữa dữ liệu thô và các công cụ xử lý địa lý khác.

  1. Nhiều công cụ GP trong ModelBuilder yêu cầu sử dụng một lớp và sẽ không chấp nhận FC làm đầu vào. Điều này đặc biệt đúng nếu (các) công cụ GP của bạn cần chọn dữ liệu. Trong trường hợp này, bạn cần tương tác với LAYER, không phải dữ liệu thô. Ví dụ: Nếu bạn không mở ArcMap (hoặc một chương trình GIS khác), bạn sẽ chọn các tính năng từ shapefile thô như thế nào ... bạn không thể. Bạn cần tương tác với lớp trong ArcMap để thực hiện lựa chọn đó.
  2. Nếu bạn muốn chạy Mô hình từ ArcCatalog hoặc xuất Mô hình của bạn sang tập lệnh Python có thể chạy bên ngoài ArcGIS, bạn cần sử dụng "Lớp tính năng" để dữ liệu nguồn thô của bạn được chuyển đổi thành "Lớp". Điều này sẽ tương tự như "thêm dữ liệu" vào phiên ArcMap của bạn.

  3. Sử dụng các lớp giúp dễ dàng tập hợp dữ liệu của bạn khi bạn thực hiện quy trình ModelBuilder. Giả sử bạn muốn xử lý tất cả dữ liệu với thuộc tính "A" bằng một phương thức, nhưng tất cả dữ liệu có thuộc tính "B" bằng phương thức khác. Bạn có thể tham chiếu dữ liệu thô của mình một lần, sau đó chia dữ liệu thành hai "nhánh" bằng cách sử dụng Lớp tính năng và xử lý từng bộ độc lập, nhưng ảnh hưởng / cập nhật tập dữ liệu nguồn đơn.

  4. Bạn có thể tạo các lớp tính năng "in_memory" thực sự là "thùng" xử lý dữ liệu tạm thời và có thể xử lý dữ liệu nhanh hơn nhiều so với ghi vào đĩa sau mỗi thao tác. Nó cũng giới hạn số lượng rác bạn phải dọn sạch sau khi xử lý xong.

Cảm ơn bạn rất nhiều Ryan. Câu trả lời của bạn rất đầy đủ và rõ ràng.
Diego Pardo

7

Kết hợp các lớp tạm thời vào các mô hình của bạn cũng làm giảm thời gian xử lý. Từ quan điểm xử lý, việc ghi vào bộ nhớ hiệu quả hơn nhiều so với ghi vào đĩa. Tương tự, bạn có thể ghi dữ liệu tạm thời vào không gian làm việc in_memory , cũng hiệu quả hơn về mặt tính toán.

Nhiều hoạt động trong ArcGIS yêu cầu các lớp tạm thời làm đầu vào. Ví dụ: Chọn lớp theo vị trí (Quản lý dữ liệu) là một công cụ rất mạnh mẽ và tiện dụng cho phép bạn chọn các tính năng của lớp chia sẻ mối quan hệ không gian với tính năng chọn khác. Bạn có thể chỉ định các mối quan hệ phức tạp, chẳng hạn như "Lawr_THEIR_CENTER_IN" hoặc "BOUNDARY_TOUCHES", v.v.

Biên tập:

Vì tò mò và để giải thích về sự khác biệt khi sử dụng các lớp tính năng và không gian làm việc in_memory, hãy xem xét bài kiểm tra tốc độ sau trong đó 39.000 điểm được đệm 100m:

import arcpy, time
from arcpy import env

# Set overwrite
arcpy.env.overwriteOutput = 1

# Parameters
input_features = r'C:\temp\39000points.shp'
output_features = r'C:\temp\temp.shp'

###########################
# Method 1 Buffer a feature class and write to disk
StartTime = time.clock()
arcpy.Buffer_analysis(input_features,output_features, "100 Feet")
EndTime = time.clock()
print "Method 1 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

############################
# Method 2 Buffer a feature class and write in_memory
StartTime = time.clock()
arcpy.Buffer_analysis(input_features, "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 2 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

############################
# Method 3 Make a feature layer, buffer then write to in_memory
StartTime = time.clock()
arcpy.MakeFeatureLayer_management(input_features, "out_layer")
arcpy.Buffer_analysis("out_layer", "in_memory/temp", "100 Feet")
EndTime = time.clock()
print "Method 3 finished in %s seconds" % (EndTime - StartTime)
time.sleep(5)

nhập mô tả hình ảnh ở đây


Chúng ta có thể thấy rằng các phương thức 2 & 3 tương đương và nhanh hơn khoảng 3 lần so với phương thức 1. Điều này cho thấy sức mạnh của việc sử dụng các lớp tính năng như các bước trung gian trong quy trình công việc lớn hơn.


Điều này dường như được kết hợp hai thứ (dữ liệu trong bộ nhớ và các lớp tính năng). Chúng không giống nhau. Dữ liệu được ghi vào vùng in_memorylàm việc vẫn là dữ liệu (ví dụ: các lớp và bảng tính năng) vẫn chiếm (rất nhiều khả năng) không gian. Mặt khác, Lớp tính năng là chế độ xem dữ liệu, cho phép bạn chọn một tập hợp con của dữ liệu và sử dụng nó trong các quy trình tiếp theo, thay vì dữ liệu trùng lặp chỉ để lấy tập hợp con của dữ liệu đó. Lớp tính năng chiếm gần như không có không gian. Tôi thích nghĩ về chúng như là "con trỏ với siêu dữ liệu", ví dụ: chúng trỏ đến một số dữ liệu và mô tả cách truy vấn / kết xuất nó.
blah238

Chỉ cần thêm vào nhận xét trước đây của tôi, tôi đã đọc ở đâu đó trên trang web này rằng in-memorykhông gian làm việc về cơ bản là một cơ sở dữ liệu địa lý tập tin nằm trong bộ nhớ, nếu bạn muốn nghĩ về nó theo cách đó.
blah238

Giống như một cơ sở dữ liệu địa lý tệp nhưng các khu vực hình dạng không được tính khi in_memory - sẽ cung cấp liên kết đến điều này sau.
PolyGeo

Trong ví dụ thứ hai được cập nhật của bạn, bạn đang tạo một lớp tính năng trong bộ nhớ, không phải lớp tính năng.
blah238

2
Đã được một thời gian nhưng đây là liên kết tôi đã hứa hơn 6 tháng trước.
PolyGeo
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.