Làm cách nào để chuyển đổi / typecast từ Đa giác sang Đa giác trong PostGIS?


30

Có cách nào để đánh máy đa giác thành kiểu Đa giác không?

Ví dụ: tôi đã tạo một vòng tròn bằng ST_Buffer () trên một điểm. Kiểu trả về của hàm đó là kiểu Đa giác. Vấn đề là trên cột hình học có một hạn chế giới hạn nó ở loại Đa đường. Vì vậy, tôi không thể chèn một đa giác đơn giản.

Tôi đã sử dụng hàm ST_MPolyFromText (), nhưng như thường lệ, nó sẽ trả về null cho điều đó và ST_Dump () không đưa ra đầu ra thích hợp.

Các ràng buộc là:

CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MULTIPOLYGON'::text OR geom IS NULL),

Có một lý do để thêm một ràng buộc đa đường? Làm thế nào về việc thay đổi các ràng buộc để đa giác?
underdark

Đây có phải là câu hỏi của trẻ em về gis.stackexchange.com/questions/14198/ không?
unicoletti

Đó là, nhưng nó có thể được nhắc lại là một câu hỏi độc lập quá.
underdark

vâng, đây là một câu hỏi dành cho trẻ em, nhưng vấn đề là khi bạn nhập shapefile vào postgis có chứa lớp đa giác thì nó sẽ tự động tạo ra hình học của đa giác. sau đó sẽ hơi tẻ nhạt khi chuyển đổi kiểu dữ liệu từ đa giác sang đa giác .. bởi vì điều đó sẽ được thực hiện bởi máy khách. Vì vậy, chỉ cần lưu đầu ra vào colummn của loại đó được tạo bởi postgis ..
Vicky

PS: để thực hiện nghịch đảo, từ multi-to-poly, sử dụng st_geometryn(geom, 1).
Peter Krauss

Câu trả lời:


55

ST_Multi - Trả về hình dạng dưới dạng hình học MULTI *. Nếu hình học đã là MULTI *, nó được trả về không thay đổi.

Thí dụ:

SELECT ST_AsText(ST_Multi(ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
        743265 2967450,743265.625 2967416,743238 2967416))')));
        st_astext
        --------------------------------------------------------------------------------------------------
        MULTIPOLYGON(((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,
        743238 2967416)))
        (1 row)
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.