Làm cách nào để có được kiểu hình học của bảng PostGIS trống?


9

Tôi có một ứng dụng web cần biết loại hình học của trường địa lý của bảng PostGIS trước khi chèn các hàng vào đó. Tôi sử dụng truy vấn sau để xác định loại hình học của cột geom:

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1

Cái này trả về kiểu hình học của một hàng thực tế, vì vậy nó không hoạt động khi bảng của tôi trống. Làm cách nào để xác định loại hình học của cột hình học?

Câu trả lời:


16

Truy vấn có thể được chạy với geometry_columnsbảng theo cách này

SELECT type 
FROM geometry_columns 
WHERE f_table_schema = 'my_schema' 
AND f_table_name = 'building' 
and f_geometry_column = 'geom';

(hoặc, nếu bạn đang sử dụng loại địa lý , hãy đăng ký geometry_columnsvới geography_columnsf_geometry_columnvới f_geography_column)


Các sql trong câu trả lời sẽ trả về geometrycho loại, trong khi chúng ta vẫn không thể biết liệu hình học là điểm hay đường.
Giser

1
Điều đó có nghĩa là cột hình học của bạn được đặt thành loại hình học "hình học" (nghĩa là nó chấp nhận tất cả các loại hình học). Trong trường hợp này, bạn sẽ phải kiểm tra từng hình học một cách tự nhiên bằng cách sử dụng ST_GeometryType
atlefren

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1như bài này như bài OP? Nó không hoạt động nếu bảng trống.
Giser

Và một điều nữa, nếu tất cả các cột hình học được đặt thành geometryloại cho tất cả các bảng, tôi có thể tạo chế độ xem chứa tất cả các bảng có thể chứa points lines polyognkhông?
Giser

1
Đúng. Một sự tương tự: tuyên bố rằng một cột geom thuộc loại "hình học" giống như chỉ định một ngăn kéo cho tất có bất kỳ màu nào. Kiểm tra màu gì của vớ trong ngăn kéo này là không thể khi nó trống.
atlefren

3

Tìm kiếm một bảng hình học_columns. Tất cả các cột địa lý với srid và loại hình học được đăng ký ở đây. Nếu có một cột có kiểu GEOMETRY thì tất cả các kiểu hình học có thể được lưu trữ.

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.