2009-06-21 30 views
28

PostgreSQL hỗ trợ nhiều loại geometric types ngoài hộp, cùng với nhiều hình dạng operatorsGiST indexes có vẻ như cung cấp chỉ mục dữ liệu không gian.Dữ liệu không gian trong PostgreSQL

Và sau đó cũng có PostGIS, là phần mở rộng cho PG.

Sự khác nhau giữa hỗ trợ không gian tích hợp trong PG và PostGIS là gì?

Nếu ứng dụng của tôi cần lưu trữ tọa độ địa lý (điểm, diện tích, đa giác) và sau đó thực hiện truy vấn hiệu quả (chẳng hạn như điểm trong đa giác, giao điểm đa giác), tôi có cần PostGIS hay không. cú pháp/kiểu dữ liệu được tích hợp sẵn và đơn giản hơn?

Trả lời

31

Trước tiên tôi muốn làm rõ chỉ mục GiST: GiST thực sự là một khuôn khổ để tạo chỉ mục cho các loại dữ liệu mới, không phải bất kỳ sơ đồ lập chỉ mục cụ thể nào. Khung này được sử dụng cho các kiểu hình học đi kèm với Postgres, nhưng nó cũng được sử dụng cho một chỉ số tương tự văn bản so khớp trên các cột văn bản chuẩn, và tất nhiên được sử dụng bởi các lược đồ lập chỉ mục của nhiều gói bên ngoài, trong đó chúng ta có thể số PostGIS.

Cho dù các kiểu dữ liệu hình học chuẩn sẽ làm việc cho bạn hay bạn cần PostGIS phụ thuộc hoàn toàn vào ứng dụng của bạn.

PostGIS lưu trữ dữ liệu hình học trong một cột thuộc loại "hình học"; trong này, bạn có thể lưu trữ nhiều hơn hoặc ít hơn tùy ý dữ liệu (điểm, vòng tròn, đa giác, những gì-có-bạn). Việc lập chỉ mục nhanh và khá phức tạp: nó có thể làm những việc như lập chỉ mục lossy bằng cách sử dụng các hộp giới hạn cho các hình dạng phức tạp mà không thể lập chỉ mục theo bất kỳ cách hợp lý nào khác. Các hệ thống tham chiếu không gian khác nhau được hỗ trợ, với việc chuyển đổi tự động kết quả truy vấn. PostGIS cũng hỗ trợ các định dạng OpenGIS chuẩn công nghiệp, có thể giúp chia sẻ dữ liệu với các hệ thống khác.

Ngược lại, tập các loại hình học nội bộ và chỉ mục của chúng kém phức tạp hơn nhiều. Không có kiểu hình học "chung" thực; thay vào đó, bạn phải chọn loại cột là một điểm, đường thẳng, hình tròn, đa giác hoặc những gì bạn có; để kết hợp, có thể bạn sẽ phải sử dụng nhiều cột. Việc lập chỉ mục không tốt; không có nhiều loại hình dạng khác nhau có thể được lập chỉ mục (mặc dù bạn có thể thêm hỗ trợ hộp giới hạn bằng cách sử dụng một cột riêng cho chúng và tạo hộp giới hạn theo cách thủ công) và các chỉ mục có thể không nhanh trong một số trường hợp. Mặt khác, nếu các kiểu hình học bên trong lấp đầy nhu cầu của bạn, bạn có được lợi thế là ứng dụng của bạn dễ dàng di chuyển sang các hệ thống khác có Postgres nhưng không cài đặt PostGIS.

Lời khuyên của tôi sẽ là chơi xung quanh với các loại hình học bên trong và xem mức độ phù hợp với bạn; nếu bạn bắt đầu gặp sự cố, hãy thử PostGIS.

+0

cảm ơn. này, bạn có nhớ xem qua điều này không: http://stackoverflow.com/questions/1012504/sql-query-for-point-in-polygon-using-postgres –

+0

Trên trang đó có vẻ như bạn đã có câu trả lời: bạn đang trộn các kiểu hình học Postgres tiêu chuẩn và các loại PostGIS. Đây là hai điều riêng biệt; Tôi đề nghị bạn sử dụng một hoặc khác, trừ khi bạn tìm thấy một số trường hợp lạ, nơi các loại Postgres tiêu chuẩn có hiệu quả hơn hoặc làm việc tốt hơn so với các loại PostGIS. –

Các vấn đề liên quan