Tham gia các lớp với các yếu tố tương ứng với TopGIS Topology


24

Tôi hiện đang sử dụng tiện ích mở rộng cấu trúc liên kết của PostGIS, nhưng tôi gặp một số khó khăn trong việc hiểu cách cấu trúc hoạt động:

Một trong những điểm chính là việc sử dụng "lớp": theo những gì tôi hiểu, các thuộc tính tính năng nên được lưu trữ trong một bảng trong lược đồ cấu trúc liên kết (được đặt tên topo_actualname) và được đăng ký như một lớp của cấu trúc liên kết đó AddTopoGeometryColumn.

Tuy nhiên, có một cách đơn giản để tham gia các thuộc tính (lưu trữ trong bảng layer) với các tính năng tương ứng (các yếu tố trong node, facehoặc edge_data)?

Bây giờ, những gì tôi làm là:

SELECT whatever
FROM layer_tb l
     JOIN topo_topologyname.edge_data e ON (l.topo).id=edge_id;

Nhưng tôi đoán toàn bộ layerkhái niệm này khá vô dụng nếu tôi phải biết cả tên lược đồ cấu trúc liên kết và tên lớp để có được thông tin tôi muốn.

Trong thực tế, tôi nghĩ rằng tôi hiểu rằng topocột trên lớp có đủ thông tin để biết cấu trúc liên kết tương ứng ở đâu và hơn nữa, topologylược đồ lưu trữ một tham chiếu đến mỗi bảng lớp cho mỗi cấu trúc liên kết.

Có cách nào ngắn / đơn giản / thích hợp để nối thông tin với nhau không? Tôi đã tìm kiếm một cái gì đó trong các chức năng mở rộng cấu trúc liên kết , nhưng không thể tìm thấy bất cứ điều gì hữu ích.


3
Tôi hơi lạc lõng với cách bạn phải tận dụng các cấu trúc liên kết, nhưng điều này có thể giúp ích. Bạn có thể truyền TopoGeometrytrực tiếp vào hình học : SELECT whatever, ST_AsText(topogeom::geometry) FROM layer_tb. Vấn đề là nếu các cạnh được phân chia sau này, có vẻ như hình học có thể thay đổi do kết quả.
jpmc26

1
Những gì bạn muốn là các công cụ hoặc hoạt động dữ liệu như giao nhau, hợp nhất hoặc hợp nhất. QGIS hoạt động với bài GIS và miễn phí và có các công cụ như thế này. Các tính năng nằm trong lớp và được nối khi bạn hợp nhất các lớp dựa trên các loại hoạt động đó.
lewis

Câu trả lời:


1

Ánh xạ của các thuộc tính vào cấu trúc liên kết không trực tiếp . Các mối quan hệ là một cái gì đó như thế này cho một nút:

your_topogeom -> (topogeom_id) relation table (element_id)-> (node_id) node

Vì vậy, tuyên bố lựa chọn của bạn sẽ giống như thế này:

SELECT whatever
FROM layer_tb l
INNER JOIN relation AS r ON (((l.mytopogeom).id , (l.mytopogeom).layer_id)) = (r.topogeo_id, r.layer_id  )
INNER JOIN edge_data AS e ON (r.element_id = e.edge_id)
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.