Sao chép các thuộc tính từ một lớp đa giác sang một lớp khác?


11

Tôi có một vấn đề mà dường như tôi không thể có được. Tôi có hai lớp đa giác:

  • Đa giác A - là tập con của đa giác B có cùng các trường và có đa giác giống hệt với Đa giác B
  • Đa giác B - có dữ liệu thuộc tính tôi muốn ở Đa giác A

Điều này có thể giải quyết như thế nào? Tôi đã thử công cụ QGIS "Tham gia thuộc tính theo vị trí" nhưng vì một số đa giác nằm trong các công cụ khác, nó có xu hướng liên kết với giao điểm đầu tiên mà nó tìm thấy (đa giác bên ngoài).


tạo trọng tâm (điểm) của Đa giác A và nối các thuộc tính vào B và xuất sang tệp mới để bảo toàn các thuộc tính từ A.
Mapperz

3
@Mapperz Đây là một cách tiếp cận nguy hiểm, bởi vì nó có thể tạo ra lỗi mặc dù nó thường sẽ tạo ra một câu trả lời có khả năng tìm kiếm. Nếu các đa giác chồng lên nhau, tất cả các cược được tắt. Ngay cả khi không có sự chồng chéo, trung tâm của một đa giác có thể nằm trong một đa giác khác (không chồng chéo). Độ chính xác có thể được đảm bảo nói chung chỉ khi tất cả các đa giác trong A không chồng chéo và lồi.
whuber

+1 @ Diego - câu hỏi của bạn dẫn đến cuộc thảo luận / tranh luận khá thú vị; một điều thú vị ở đó!
Dano

Câu trả lời:


9

@Dano đặt ra một số vấn đề được giải quyết tốt nhất trong một câu trả lời đầy đủ.

Một khó khăn , đã được @Celenius lưu ý, đó là sự kết hợp giữa B và A (theo một trong hai hướng) sao chép tất cả các trường; nó có thể là khó khăn để sửa điều này. Tôi đã đề xuất trong các ý kiến ​​rằng cách dễ dàng rõ ràng (xuất sang bảng tính) đặt ra câu hỏi về tính toàn vẹn dữ liệu. Một khó khăn khác , đã được giải quyết theo đề xuất của Celenius, liên quan đến việc giải quyết vấn đề này khi không có sự kết hợp các thuộc tính nào có thể đóng vai trò là chìa khóa cho cả A và B, vì điều đó ngăn cản việc tham gia cơ sở dữ liệu. Sự tham gia không gian được giải quyết xung quanh vấn đề đó.

Điều gì, sau đó, là một giải pháp tốt? Một cách tiếp cận sử dụng A để xác định các bản ghi tương ứng của B chứa dữ liệu mong muốn. Tùy thuộc vào các giả định về cấu hình của đa giác - cho dù chúng trùng nhau, liệu một số có thể chứa các lớp khác, v.v. - điều này có thể được thực hiện theo nhiều cách khác nhau: sử dụng một lớp để chọn các đối tượng trong lớp kia hoặc thông qua các phép nối. Vấn đề ở đây là tất cả những gì chúng ta muốn làm trong giai đoạn này là chọn tập hợp con của B tương ứng với A.

Có được lựa chọn đó, xuất lựa chọn và để nó thay thế A. Xong .

Giải pháp này giả định rằng tất cả các trường trong B được dự định thay thế các đối tác của chúng trong A. Nếu không, thì thực sự cần thiết phải thực hiện nối 1-1 của B (nguồn) với A (đích). Phép nối dựa trên số nhận dạng là tốt nhất, nhưng làm cho phép nối với nhận dạng đa giác (Celenius) hoạt động tốt nếu id không có sẵn và không có cơ hội hình dạng đa giác tương ứng trong A và B có thể khác nhau, tuy nhiên hơi khác . . hoặc tự động thực hiện các thay đổi toàn cầu trong các chỉnh sửa cục bộ.)

Tại thời điểm này, có hai bản sao của mọi trường: nếu [Foo] là trường chung cho A và B, thì phép nối chứa A. [Foo] và B. [Foo]. Sử dụng phép tính trường , sao chép B. [Foo] vào A. [Foo]. Lặp lại cho tất cả các trường cần thiết. Sau khi hoàn thành, loại bỏ tham gia.

Mặc dù thủ tục này có thể hơi khó chịu khi có nhiều lĩnh vực tham gia, nhưng giá trị của nó bao gồm

  • Nó là đơn giản và nhanh chóng để kịch bản.
  • Scripting nó để lại một dấu vết kiểm toán ghi lại quá trình xử lý được thực hiện trên dữ liệu. Điều này là rất quan trọng để bảo vệ tính toàn vẹn dữ liệu.
  • Nó bảo vệ chống lại một số loại lỗi bán buôn, chẳng hạn như giữ lại trường sai sau khi tham gia (do đó giữ dữ liệu cũ thay vì dữ liệu mới cho trường đó) hoặc xóa một trường quan trọng.
  • Nó tận dụng các biện pháp phòng vệ tích hợp được cung cấp bởi hệ thống quản lý cơ sở dữ liệu, chẳng hạn như thực thi loại dữ liệu và thực thi quy tắc kinh doanh, hoạt động để ngăn chặn và xác định lỗi và duy trì tính nhất quán giữa tất cả các bảng và lớp trong cơ sở dữ liệu.

Một số nguyên tắc hướng dẫn liên quan đến đề xuất này là

  1. Sử dụng hệ thống quản lý cơ sở dữ liệu của bạn để xử lý dữ liệu thay vì sử dụng phần mềm không được thiết kế hoặc không phù hợp với nhiệm vụ này.
  2. Tránh thay đổi cấu trúc cơ sở dữ liệu (chẳng hạn như xóa hoặc thêm các trường) khi các hoạt động không hoàn toàn yêu cầu nó.
  3. Sử dụng các khả năng của phần mềm để tự động hóa để đơn giản hóa công việc, ghi lại tài liệu và làm cho các hoạt động có thể được tái tạo.

Người ta có thể phản đối rằng trong nhiều trường hợp, có những cách nhanh hơn và dễ dàng hơn để đạt được kết quả tương tự. Vâng, có thể có, và chúng có thể có hiệu quả và thường chúng hoạt động khi được thực hiện một cách cẩn thận. Nhưng các giải pháp có nguy cơ dữ liệu rất khó để đề xuất và bảo vệ như các câu trả lời cho mục đích chung. Chúng được sử dụng tốt nhất trong các tình huống một lần với các bộ dữ liệu nhỏ trong đó tham nhũng trong dữ liệu sẽ nhanh chóng trở nên rõ ràng và hậu quả của bất kỳ sai lầm nào là không quan trọng.


+1 @ whuber - Rõ ràng là bạn đã cố gắng cân nhắc tất cả các biến ở đây; một câu trả lời cũng nghĩ ra. Xin vui lòng xem phần bổ sung cho câu trả lời ban đầu của tôi, vì tôi sẽ hết chỗ trong hộp là bình luận.
Dano

1
cho những người tự hỏi điều gì đã xảy ra với "Celenius" đã đề cập đến nhiều nơi khác nhau trong chủ đề này: bây giờ được biết là @djq, và câu trả lời của anh ấy / cô ấy ở đây . Kudos để Wayback máy: web.archive.org/web/20120127210858/http://gis.stackexchange.com/...
mờ Wilkie

5

Trong Arcmap, bạn có thể tham gia không gian Polygon B đến Polygon A; điều này sẽ liên quan đến các thuộc tính. Vì tên trường giống nhau nên nó sẽ tạo ra một số kết hợp mới của tên.


Đây là những gì tôi sẽ đặt. Trong mắt tôi, câu trả lời ngắn gọn này là đúng.
Simon

4

Xuất bảng cho Shapefile "B" sang Excel và xóa các cột dư thừa và bất kỳ cột nào chứa thông tin bạn không cần. Hãy chắc chắn rằng bạn giữ cột định danh được chia sẻ của bạn, sau đó lưu nó vào thư mục thích hợp. Đi vào ArcMap, thêm bảng, sau đó chuột phải vào Shapefile "A" và tiến hành nối bảng . Liên kết sẽ dẫn đến một video về cách làm điều này.


@ whuber - Toàn bộ cách tiếp cận là âm thanh và đảm bảo tính toàn vẹn của dữ liệu. Điều duy nhất tôi có thể nói để bác bỏ câu trả lời này, là một số tình huống / dự án nhất định không đủ khả năng cho chúng tôi thời gian hoặc ngân sách để có phương pháp này trong phương pháp của chúng tôi.

Một ví dụ thực tế:

Một công ty khai thác Junior đang ngồi trên một thân quặng lớn với hàng trăm triệu đô la tiền mặt truyền vào khả năng "chứng minh" tài nguyên của họ. Một đánh giá máy tính để bàn của các ấn phẩm và bản đồ / dữ liệu địa chất dẫn đến một chương trình khoan rất được nhắm mục tiêu và rất tốn kém. Khi các xét nghiệm quay trở lại từ lần chạy đầu tiên, các giá trị này được gắn thẻ vào các vị trí điểm tương ứng của chúng thông qua nối bảng và được bơm trở lại ở định dạng Excel trong đó dữ liệu được chuẩn bị trước để nhập vào DataMine (cho phép nội suy quặng 3D).

Theo kinh nghiệm của tôi , các nhà địa chất dự án yêu cầu dữ liệu này được đặt sẵn trong Excel, nó tuân theo MỌI quy tắc / quy ước định dạng cho chữ cái (không có khoảng trắng, không có ký tự đặc biệt, v.v.) và tệp nhập DataMine được gửi theo định dạng .csv (trở lại sau đó dù thế nào). Điều này sẽ dẫn đến đầu tư nhiều hơn vào khoan mục tiêu và chúng tôi sẽ xem xét lại quá trình (trong một số trường hợp) nhiều lần. Tất cả điều này thường xảy ra trên một dòng thời gian đặc biệt chặt chẽ và quan trọng.

Mỗi người trong chúng ta đều có câu chuyện của riêng mình và những trải nghiệm của riêng chúng ta mà chúng ta đã kết hợp vào cách tiếp cận của chúng ta về cách chúng ta làm mọi việc. Phải nói rằng, kinh nghiệm của tôi đã xem Excel là một điều cần thiết tuyệt đối và là một công cụ quan trọng trong quy trình làm việc của tôi; đó là những gì tôi biết Chúng tôi đã thực hiện mọi biện pháp phòng ngừa QA / QC trong việc chuẩn bị dữ liệu này. Nơi mà các bạn sẽ tránh xa Excel, tôi không còn cách nào khác ngoài sử dụng nó.


(-1) Sử dụng Excel để thực hiện tham gia không chỉ khó hơn so với việc hoàn thành nó với GIS hoặc RDBMS mà còn gây ra các lỗi nghiêm trọng.
whuber

8
Excel rất đơn giản, nó hoạt động và do đó, nó có thể chịu trách nhiệm cho nhiều lỗi bán buôn, không bị phát hiện hơn bất kỳ phần mềm nào từng được sản xuất. Nó vi phạm các nguyên tắc cơ bản của DBMS được phát triển để bảo vệ chống lại các lỗi mà Excel làm cho tất cả quá dễ dàng để thực hiện, chẳng hạn như (1) sắp xếp một số cột nhưng không phải các cột khác; (2) lỗi đánh máy làm thay đổi loại dữ liệu; (3) tổ hợp phím đi lạc làm mất dữ liệu; (4) vô tình xóa các hàng hoặc cột; (5) ẩn chuyển đổi dữ liệu, chẳng hạn như văn bản thành ngày; (6) cắt ngắn dữ liệu; (7) làm tròn các giá trị số ẩn; và nhiều thứ khác nữa.
whuber

2
câu trả lời và bình luận kết quả này là một minh họa tuyệt vời về cách một câu trả lời "xấu" có thể mang lại kết quả tốt, tiết lộ thông tin có thể không được đưa ra ánh sáng. Xin đừng cảm thấy như bạn nên xóa nó để tránh "đánh".
matt wilkie

3
... Và để bù đắp cho cú đánh, CÂU HỎI TUYỆT VỜI sẽ hỏi tại sao sử dụng Excel để xử lý dữ liệu có thể dẫn đến các vấn đề rất nghiêm trọng. Và làm thế nào để sử dụng nó một cách an toàn.
matt wilkie

1
(+1) Để chỉnh sửa chu đáo và được mô tả tốt. @matt Kiểm tra các cuộc thảo luận về thống kê.stackexchange.com liên quan Điều gì sẽ là một cách tốt để làm việc với một tập dữ liệu lớn trong Excel? Excel như một bàn làm việc thống kê .
whuber

1

Vào cuối những năm 1990, chúng tôi đã nhận được một bản cập nhật quy mô lớn cho tất cả các dòng nước và dòng nước của chúng tôi, bao gồm khoảng 55 tờ bản đồ NTS và hàng ngàn tính năng chưa được công bố. Chúng tôi cần phải giữ các thuộc tính giá trị gia tăng của thủy văn cũ của chúng tôi (tên hồ, độ cao bề mặt, v.v.) và thay thế hình học. Hình dạng của cũ và mới đủ gần để chúng ta có thể đảm bảo trọng tâm của mỗi đa giác vẫn sẽ bị giới hạn bởi các ranh giới đa giác mới - đây là một điểm quan trọng, không có sự chắc chắn cơ bản này, cách tiếp cận dưới đây không phải là một ý tưởng tốt.

Giải pháp trong trường hợp cụ thể này là thay vì đưa các thuộc tính vào hình học, đưa hình học vào các thuộc tính. Vì vậy, về mặt khái niệm:

  1. từ * Layer_with_attribut *, xóa đa giác nhưng giữ bản ghi bảng,
  2. từ * Layer_with_polys * sao chép và dán hình học vào * Layer_with_attribut *
  3. hợp nhất và tiết kiệm.

Xem ở đây để mô tả mở rộng hơn và công thức cho . Tôi không chắc rằng Arcgis hoặc Qgis hiện đại có thể xóa hình học mà không xóa đồng thời bản ghi thuộc tính của nó, nhưng này, chỉ trong trường hợp, đây là ý tưởng.


1

Tôi không chắc nhưng có lẽ một số DBMS thực hiện các hoạt động bình đẳng trên các trường Shape trong SQL (?). Dường như với tôi rằng nếu hai hình học giống hệt nhau thì =toán tử SQL sẽ trả về true ( WHERE A.Shape = B.Shape).

Nếu điều này đúng với cơ sở dữ liệu bạn đang sử dụng, bạn sẽ có thể thực hiện một phép nối không gian bằng cách sử dụng cú pháp giống như bạn làm cho một phép nối không theo không gian.


Có vẻ phương thức ST_Equals (một tiêu chuẩn OGC) có thể được sử dụng cho việc này.


0

Như thường lệ whuber là đúng. Bạn cần suy nghĩ thấu đáo về quá trình của bạn. Đặc biệt nếu đây là những bộ dữ liệu lớn và thao tác này sẽ được thực hiện nhiều lần hoặc dữ liệu là nhiệm vụ quan trọng.

Xem xét dữ liệu và trách nhiệm của bạn:

Bạn đã làm gì

Bạn đang làm gì đấy?

Bạn định làm gì

Và luôn hỏi: Tại sao?


Bây giờ cho một câu trả lời dễ dàng nhắm trực tiếp vào câu hỏi. Hãy ghi nhớ luôn có ít nhất 5 cách để làm mọi việc nhưng thường chỉ có một cách tốt nhất.

Giả sử fullset có mọi thuộc tính bạn muốn có trong tập hợp con và tập hợp con không có gì chưa có trong tập hợp đầy đủ ngoại trừ thông tin lỗi thời.

Đoán rằng cấu trúc liên kết tập hợp con phù hợp với tập hợp đầy đủ (bao gồm Xuất xứ / Chiếu và Dung sai XY).

1) Sử dụng tính năng để trỏ với hộp kiểm "Bên trong" được chọn và tạo lớp tính năng điểm hoặc shapefile từ tập hợp con.

2) Sử dụng Chọn theo Spatial Tham gia để tìm tất cả các đa giác trong tập hợp đầy đủ tương ứng với tập hợp con dựa trên lớp tính năng Điểm mới được tạo hoặc shapefile.

3) Xuất lựa chọn từ tập hợp đầy đủ và đó có thể là tập hợp con mới của bạn.


0

Chắc chắn, nếu Đa giác A là tập con của Đa giác B, cách tiếp cận dễ nhất là lặp qua Đa giác A, sử dụng ID có trong Đa giác A (và B nếu A là tập hợp con hoặc B) để tìm kiếm dữ liệu hàng trong Đa giác B và sau đó cập nhật hàng trong Đa giác A.

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.