LineJoiner trong FME


8

Tôi có rất nhiều đối tượng dòng. Một số trong số họ nhỏ hơn một số tiêu chí.

Tôi muốn tham gia tất cả các dòng hoặc các phân đoạn nhỏ hơn dòng nhỏ hơn 1 metercác dòng lớn hơn, giữ các thuộc tính của dòng lớn hơn.

Có lời khuyên nào không?

Tôi đã thử sử dụng Trình kiểm tra đầu tiên để kiểm tra độ dài của các đối tượng đường (nếu nó nhỏ hơn 1 m) và hơn đầu ra được chuyển đến LineJoiner. Nhưng thực tế không có gì xảy ra và các dòng xuất phát từ cổng đầu ra của LineJoiner không có thuộc tính như các dòng trước đó (vì chúng nên có nó). Tôi đã phức tạp quá nhiều, nhưng tôi nghĩ đây sẽ là nhiệm vụ dễ dàng.


Bạn có thể vui lòng làm rõ - bạn có muốn các dòng lớn hơn lấy các thuộc tính của các dòng nhỏ hơn mà chúng được nối vào không?
GIS-Jonathan

Đối diện :) Tôi cần các dòng nhỏ hơn tham gia để lớn hơn (1 + 5 = 6).
Z77

Tôi biết bạn muốn hợp nhất các dòng, nhưng bạn muốn điều gì xảy ra với các thuộc tính? Bạn có muốn giữ các thuộc tính cho dòng lớn hơn như ban đầu hay bạn muốn sử dụng các thuộc tính từ các dòng nhỏ hơn cho dòng lớn mới?
GIS-Jonathan

Giữ các thuộc tính từ dòng lớn hơn.
Z77

Câu trả lời:


7

Bạn có thể sử dụng LineJoinerbiến áp với tham số List Name. Nhưng bạn cần thực hiện một số xử lý dữ liệu bổ sung:

  1. Sử dụng LengthCalculatorđể tính chiều dài.
  2. Sử dụng Sorterđể sắp xếp các dòng của bạn theo độ dài (sắp xếp số, giảm dần).
  3. Sử dụng LineJoinerđể tham gia các dòng. Những cái lớn nhất đầu tiên (nhờ bước 2). Chỉ định tham số List Namecủa LineJoiner- một số tên cho thuộc tính danh sách mới.
  4. Sử dụng ListIndexervới chỉ mục danh sách 0 - để có được các thuộc tính được tham gia đầu tiên (thuộc tính lớn nhất) 'từ danh sách.

Đây là giao diện của nó: ví dụ mô hình

EDIT1:

Để có thể chỉ tham gia các tính năng <1m đến các tính năng lớn hơn, chúng tôi cần sử dụng thêm:

  1. Tester máy biến áp sau lengthCalculator với thử nghiệm: _length < 1
  2. Sử dụng SpatialFilter(kiểm tra để thực hiện tham số TOUCHES:) sau Trình kiểm tra để chỉ lọc các tính năng có tính năng chạm <1m. Sau đó thực hiện nối dòng trên chúng cùng với các tính năng <1m. Các tính năng không chạm <1m, trực tiếp đến đầu ra (hoặc xử lý thêm).

Mô hình: mô hình2

EDIT2:

Nếu bạn có dòng <1m chạm hai cái lớn thì tất cả chúng sẽ được nối với nhau. Nếu trường hợp đó (tính năng <1m chạm hai hoặc nhiều cái lớn hơn) có thể có trong dữ liệu của bạn thì bạn nên thêm một số xử lý các trường hợp đó. Hãy xem các thông số Merge AttributesAttribute Prefixmáy biến áp SpatialFilter. Sử dụng các tham số này, bạn sẽ có thể phát hiện các trường hợp như vậy và sau đó thực hiện một số bộ lọc bổ sung.

EDIT3:

Hãy giải quyết trường hợp khi bạn có hai đường lớn chạm vào một đường nhỏ (<1m). Chúng ta chỉ cần lấy một trong những dòng lớn để tham gia cùng với một dòng nhỏ.

Để có thể thực hiện việc lọc như vậy, chúng ta cần đánh dấu hai tính năng lớn này bằng một số id từ nhỏ mà chúng đang chạm vào. Như đã nêu trong EDIT2, nó có thể được thực hiện trong SpatialFiltermáy biến áp bằng các tham số Merge AttributesAttribute Prefix.

Sau đó sử dụng biến áp DuplicateRemoverđể lọc các tính năng trùng lặp như vậy (hai lớn) và chỉ lấy một trong số chúng.

Gợi ý: cố gắng sử dụng Inspectormáy biến áp trong khi tạo mô hình của bạn và xem kết quả trung gian trong mọi trường hợp không rõ ràng với bạn. Bằng cách đó, bạn sẽ hiểu rõ hơn về cách thức hoạt động của từng máy biến áp. Thử nghiệm với dữ liệu của bạn! :)


Đồng ý. Thanl bạn cho phản ứng. Tôi cũng sẽ thử điều này.
Z77

1
Ok, đây là một nhiệm vụ phức tạp hơn. Tôi đã cập nhật câu trả lời của tôi. Ý tưởng là sử dụng SpatialFilter và thử nghiệm tính năng TOUCH. Bằng cách đó, chúng tôi có thể cung cấp cho LineJoiner chỉ <1m tính năng và tính năng mà họ chạm vào.
Alex Markov

1
Nhận ra rằng trường hợp thậm chí phức tạp hơn là có thể và thêm một số thông tin. Hãy xem.
Alex Markov

1
Cập nhật thêm câu trả lời của tôi. Hãy xem.
Alex Markov

1
Bằng cách Sorterchúng tôi thực thi các tính năng có độ dài dài hơn trước LineJoinervà sau đó các thuộc tính của nó sẽ có chỉ số "0" trong danh sách (xem tham số List Name) và sau đó chúng tôi có thể di chuyển chúng sang các thuộc tính chính của tính năng ( ListIndexer). Nếu không, bạn có thể có kết quả trong đó các thuộc tính của các tính năng nhỏ sẽ "thống trị". Bạn có thể thấy không có sự khác biệt trong trường hợp nếu các tính năng lớn đi trước, nhưng tôi sẽ không liên quan đến nó.
Alex Markov
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.