Tạo chế độ xem không gian trong PostGIS và thêm nó dưới dạng lớp trong QGIS?


49

Trong PostGIS 2.0, tôi đang tìm kiếm một cách hiệu quả để tạo chế độ xem được kích hoạt không gian có thể xem được trong QGIS.

Tôi đã theo dõi ngữ cảnh của Phần 2 của @Mike Toews trả lời về Cách tạo bảng từ các bảng hiện có (áp dụng các lược đồ mới) trong postgis DB? và chế độ xem hiển thị dưới dạng một lớp điểm (trong trường hợp của tôi) trong hộp thoại "Thêm lớp PostGIS". Nhưng sau khi tạo chế độ xem và kích hoạt không gian, tôi đã gặp lỗi sau khi cố gắng thêm chế độ xem vào QGIS:

Bạn phải chọn một bảng để thêm một lớp

Ai đó có thể giải thích lý do tại sao chế độ xem không gian sẽ không tải vào QGIS không và tôi cần phải làm gì để có thể tải nó dưới dạng một lớp trong QGIS?

Tôi hiện đang sử dụng QGIS v1.8 từ trình cài đặt OSGEO

Tôi xem được xây dựng từ cơ sở dữ liệu geonames, được tải vào PostGIS. Bảng dữ liệu không gian / dữ liệu không gian có thể được chọn / xem trong QGIS.

Khi tôi cố gắng chọn " mt_view ", QGIS sẽ thấy chế độ xem trong hộp thoại, nhưng sẽ không cho phép tôi chọn nó. Nó đưa ra một hộp chấm xung quanh khu vực, nhưng không làm nổi bật và chọn chế độ xem.

QGIS không thể chọn mt_view làm lớp


Tôi chỉ nhận thấy rằng khi tôi chạy truy vấn đầu tiên của mình:

CREATE OR REPLACE VIEW data.test AS
SELECT * FROM data.geoname
WHERE admin1='MT'

Chế độ xem hiển thị trong Hộp thoại Thêm lớp của QGIS, nhưng không thể chọn. Sau đó khi tôi chạy:

SELECT Populate_Geometry_Columns('data.test'::regclass);

Tôi nhận được kết quả là "0", trong đó theo tài liệu , tôi nghĩ rằng nó sẽ trả về "1".


1
Tôi xác nhận vấn đề. Với QGIS 1.8, PostGIS 2.0 và chế độ xem được tạo từ bảng có khóa chính, chế độ xem được liệt kê trong các lớp khả dụng nhưng thông báo lỗi "Bạn phải chọn một bảng để thêm một lớp" xuất hiện.
giohappy

2
Có cách nào khác để tự động đặt khóa chính trong cửa sổ Postgis Add Layer khi chúng ta làm việc với các khung nhìn không? Thật khó để chọn một trường khóa chính trong màn hình này cho bất kỳ lớp / khung nhìn nào nếu bạn tưởng tượng một người dùng GIS bình thường và một khung nhìn có nhiều trường số nguyên.

@Pgimenez, tôi khuyên bạn nên bắt đầu một câu hỏi mới với những gì bạn đã nêu ở trên, và sau đó tham khảo url câu hỏi này theo cách riêng của bạn. Điều đó sẽ cho nó tầm nhìn rộng hơn nhiều.
RyanDalton

Không có cách nào để hình dung một con lồi trong qgis 1.8 lisboa? Tôi đã thử theo dõi các viev trong Postgis 1.5 Tôi được yêu cầu sử dụng một cột id để xuất bản nó trong Qgis. Nếu bạn không sử dụng cột id, bạn không thể tải nó vì lỗi. 1. tạo hoặc thay thế chế độ xem con_hull_baeume3 (giá thầu) khi chọn '0', ST_ConvexHull (ST_Collect (geom)) TỪ baeume; 2. tạo hoặc thay thế chế độ xem con_hull_baeume4 (giá thầu) làm giá thầu được chọn, ST_ConvexHull (ST_Collect (geom)) TỪ nhóm baeume theo giá thầu; nhưng cái này tạo ra một lồi trên mỗi điểm hình học. Ý tôi là chỉ sử dụng 'select ST_ConvexHull (ST_Collect (geom)) TỪ baeume;' hoạt động
ulan

1
Chào mừng bạn Xin vui lòng gửi câu hỏi này như một câu hỏi mới, vì nó dường như không trả lời câu hỏi ban đầu. Ít nhất nếu đó là một câu hỏi, vì tuyên bố cuối cùng không rõ liệu bạn có thành công hay không.
lynxlynxlynx

Câu trả lời:


54

Tôi có thể xác nhận rằng không thể chỉ cần chọn một chế độ xem được liệt kê.

Có vẻ như cần phải chọn "cột khóa chính" trước. Sau đó, bảng quay có thể lựa chọn:

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


1
Wow, tôi sẽ không bao giờ nhìn thấy điều đó. Cám ơn rất nhiều! Tôi đã chỉnh sửa tiêu đề để phản ánh vấn đề là với QGIS, không phải chế độ xem PostGIS.
RyanDalton

Có vẻ như đây là một vấn đề đối với QGIS 1.8 (mà tôi chưa sử dụng). Các bước này không bắt buộc đối với 1.7.
Mike T

Đúng vậy, 1.7 đã cố gắng đoán khóa chính. Nhưng nó không hoạt động tốt.
underdark

trên một lưu ý phụ, @underdark, QGIS có chấp nhận các loại PK khác không?
George Silva

1
Trong QGIS3, cột có tiêu đề "id tính năng" chứ không phải "cột khóa chính" và (ít nhất là đối với tôi), nó nằm ngoài rìa của cửa sổ mặc định (nghĩa là không hiển thị) và không có dấu hiệu cho thấy có nhiều cột hơn! Tôi nghĩ rằng tôi sẽ đăng nhập một yêu cầu tính năng mà một người được nhắc cho các chi tiết này (nếu cần) sau khi lựa chọn. Có vẻ như các nhà phát triển cho rằng mọi người sẽ đảm bảo có một khóa duy nhất trong cột đầu tiên.
Russell Fulton

5

(Cập nhật câu trả lời của tôi một chút)

Miễn là trường OBRIID (row_number) là lần đầu tiên trong định nghĩa cột của chế độ xem , QGIS sẽ chọn nó mà không yêu cầu bạn thêm từ menu 'thêm lớp vectơ'.

CREATE OR REPLACE VIEW dqmt.addressverify AS 
 SELECT row_number() OVER (ORDER BY newaddresses.addressid) AS objectid,
    newaddresses.addressid
  , geom
   FROM dqmt.newaddresses;

Tôi chỉ sửa một số khung nhìn cũ bị hỏng theo câu hỏi ban đầu, nhưng việc di chuyển trường OBRIID sang đầu khung nhìn đã khắc phục vấn đề!


Tôi cũng đã sử dụng cú pháp "row_number () over ()" cho nhiều chế độ xem. Tôi thường đã sử dụng "gid" cho trường khóa chính của mình. Có phải tất cả các chế độ xem khác của bạn sử dụng "objectid" làm khóa chính không?
RyanDalton

thường là objectid - hoạt động trong ví dụ trên - nhưng sẽ thử gid ... đó có phải là thứ mà QGIS nhận ra trước bất kỳ trường 'id' nào khác không?
DPSSpatial

GID không có bất kỳ ảnh hưởng nào đến việc này ...
DPSSpatial

Chỉ mơ ước khả năng. cảm ơn bạn đã kiểm tra
RyanDalton

(Cuối cùng, nhưng ...) theo phỏng đoán, tôi nghĩ rằng nếu một bảng đang được tải có một PRIMARY KEYđịnh nghĩa, thì QGIS thường chọn nó: nó không bao giờ thất bại trong việc 'chọn' PK trên bất kỳ bảng nào của tôi có PK, mặc dù gần như tất cả các PK của tôi VARCHAR. Điều đó không thể xảy ra với một VIEWvì PostgreSQL VIEWkhông thể có CONSTRAINTs. Khá chắc chắn rằng tại sao cần phải chọn PK VIEWbằng tay khi nhập vào QGIS thông qua nút 'Thêm lớp PostGIS', đó là lý do tại sao tôi nhập chúng bằng tập lệnh Python.
GT.

4

Có quan điểm của bạn hiển thị trong geometry_columnsbảng? Theo hướng dẫn , chế độ xem sẽ tự động hiển thị trong 2.0 nhưng tôi chưa thử.

Hãy thử chạy như sau để kiểm tra:

SELECT f_geometry_column As col_name, type, srid, coord_dimension As ndims 
FROM geometry_columns
WHERE f_table_name = 'my_spatial_table' AND f_table_schema = 'my_schema';

Có, chạy kiểm tra này theo quan điểm của tôi sẽ trở lại: the_geom, Point, 4269,2
RyanDalton

3

Chế độ xem của bạn có sử dụng trường số nguyên duy nhất như "gid" hoặc PK tương đương với một trong các bảng trong chế độ xem của bạn không?

Tôi biết rằng trong các phiên bản trước của QGIS, tôi đã gặp vấn đề với các chế độ xem được thêm vào bản đồ khi không có trường số nguyên duy nhất. Tuy nhiên tôi đã nhận được một thông báo lỗi khác chỉ ra vấn đề đó, nhưng có thể đáng để kiểm tra để che giấu tất cả các cơ sở.


Có, bảng geonames có "geonameid" là một ID duy nhất và có một ràng buộc PRIMARY KEY được đặt trên trường đó.
RyanDalton
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.