QGIS có thể đọc quan điểm không gian?


10

Tôi có một cơ sở dữ liệu không gian mà tôi đã tạo ra kéo dài vài năm dữ liệu tội phạm. Để tạo điều kiện cho một kịch bản trong thế giới thực, nơi tôi có thể đơn giản hóa sự tương tác cho người dùng bằng cách giới thiệu Chế độ xem chỉ giới hạn khoảng thời gian hoặc loại tội phạm nào được trả lại, tôi muốn biết liệu QGIS có thể đọc Chế độ xem này như thế nào không bất kỳ bảng không gian khác trong cơ sở dữ liệu của tôi. Vấn đề ở đây là rõ ràng là tôi không muốn tạo một bảng riêng cho mỗi Chế độ xem có thể sử dụng và tôi đang cố gắng làm cho nó đơn giản bằng cách không yêu cầu người dùng biết cơ sở dữ liệu và SQL thích hợp để tự đặt dữ liệu. Một quy trình công việc tương tự trong thế giới ArcGIS có thể đang tạo các tệp lớp riêng biệt mà người dùng có thể mở trong ArcMap truy cập cơ sở dữ liệu (giả sử, SQL Server) và chỉ hiển thị tập dữ liệu hạn chế.

Tôi đã tạo một View trong cơ sở dữ liệu của mình, nhưng nó không hiển thị trong danh sách các lớp tính năng mà tôi có thể nhập khi tôi kết nối với db spatialite trong QGIS. Có lẽ Lượt xem không được coi là không gian? (Đây là điều mà tôi sẽ xem xét sau này, nhưng tôi nghĩ rằng tôi đã làm rồi; tôi chỉ không nhớ lại kết luận.) ?

Câu trả lời:


15

Tôi nghĩ rằng bạn phải đăng ký chế độ xem trong bảng hình học_columns để có thể sử dụng chế độ xem trong QGIS.

Một tài nguyên tốt là "Viết tay XEM XEM không gian của riêng bạn" với ví dụ sau:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column)
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry');

Dù sao, bạn phải đăng ký XEM này vào lượt xem_geometry_columns, để biến nó thành Chế độ xem không gian thực sự.


Đó dường như là vấn đề. Tôi đã tạo khung nhìn và kiểm tra các bảng meta. Rõ ràng, hình học từ chế độ xem không được liệt kê. Làm cách nào để đăng ký hình học của khung nhìn? Tôi đã thử RecoverGeometryColumn nhưng nó cho tôi biết bảng không tồn tại. Tôi nghĩ rằng tôi đang ở phiên bản 2.4, nhưng rõ ràng tôi đang làm việc với Spatialite 3.0 beta. Có lẽ tôi đang thực hiện lệnh sai? Có lẽ nó không hoạt động trên lượt xem? (Nó tốt hơn!); để rõ ràng, lệnh của tôi là CHỌN RecoverGeometryColumn ('tblName', 'SHAPE', 2226, 'POINT', 2);
Bryan Goodrich

4
Có một bảng đặc biệt để xử lý các khung nhìn dựa trên hình học. Sử dụng cú pháp sau CHỈ VÀO VIEWS_GEOMETRY_COLUMNS VALUES ('{TABLE NAME}', '{GEOM COLUMN NAME}', '{GEOM TYPE}', 2, {SRID}, 0);
Nathan W

ví dụ: XÁC NHẬN VÀO VIEWS_GEOMETRY_COLUMNS GIÁ TRỊ ('Towns_v1', 'Geometry', 'POINT', 2, 32632, 0);
Nathan W

Sử dụng SELECT * FROM views_geometry_columns;để xem những gì cần thiết để được chèn. Thêm thông tin tại gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/ Kẻ
Nathan W

2

Bạn cũng có thể phải đặt một ID duy nhất vào chế độ xem, tương tự như những gì được thảo luận ở đây: Trong PostGIS, có thể tạo một Chế độ xem với một ID duy nhất không?


Trừ khi tôi rõ ràng không chọn PK trong chế độ xem, nếu không một ID duy nhất sẽ được mang theo? Ít nhất là cho truy vấn chọn đơn giản tôi đang làm ở đây.
Bryan Goodrich

@ Bryanoodrich- Hãy dùng thử, nhưng nó không hoạt động theo quan điểm của PostGIS, theo như tôi đã tìm thấy.
RyanKDalton

Chế độ xem được tạo bởi "CHỌN * TỪ tội phạm Ở ĐÂU ..." và tôi tập hợp theo mệnh đề where. Điều này trả về cột PK (rowname, mà tôi đã tạo từ các tên cột trong bảng R mà tôi đã sử dụng để điền vào SQLite DB). Vấn đề là như underdark đã chỉ ra: nó cần một tham chiếu hình học trong các bảng meta. Đây là những gì QGIS sử dụng để xác định các bảng không gian và chế độ xem không có bất kỳ bản ghi nào trong các bảng meta đó.
Bryan Goodrich

Tốt để biết. Cảm ơn bạn đã đặt câu hỏi và nhận được câu trả lời hay
RyanKDalton

2

đăng ký chế độ xem trong hình học_column hiện nay (năm 2015) dường như yêu cầu một trường bổ sung 'read_only' như vậy:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry', 1);

1
Bạn có thể vui lòng thêm một liên kết đến tài liệu hỗ trợ? Cảm ơn!
underdark

2

Đối với SpatialLite 4.x, cần có hai thay đổi cho câu trả lời ban đầu - việc thêm read_onlycột và thay đổi tất cả các giá trị được chèn thành chữ thường. SQL được cập nhật sẽ trông như thế này:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'rowid', 'local_councils', 'geometry', 1);

Các read_onlylĩnh vực chấp nhận hoặc là 0 hoặc 1. (comment Xem Sandro Furieri trong Google Groups để làm rõ thêm.)

Thông tin chi tiết về những thay đổi này và 4.x khác có thể được tìm thấy trên wiki chuyển đổi sang 4.0 .


1
INSERT INTO views_geometry_columns VALUES
('nameOfView' , 'geometry', 'rowid', 'geometryTable', 'geometry', 1);

NB: chỉ thay thế: nameOfView và hình họcTable

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.