Gọi ST_Transform trong hình học đã có trong srid mục tiêu?


11

Tôi đang viết một hàm có dạng hình học như một tham số có thể nằm trong các hình chiếu khác nhau:

CREATE OR REPLACE FUNCTION foo(in geometry) RETURNS boolean AS $$
DECLARE
    transformed_geom geometry := in;
BEGIN
    IF ST_SRID(transformed_geom) != 32737 THEN
        transformed_geom := ST_Transform(transformed_geom, 32737);
    END IF;
    [ ... ]
END;
$$ language plpgsql;

Hàm cần hình học trong một hình chiếu cụ thể (32737) nhưng tôi không muốn bắt buộc người gọi thực hiện chuyển đổi, tôi thích xử lý nó bên trong hàm.

Câu hỏi là, thay vì kiểm tra srid thực tế, có an toàn không khi gọi ST_Transform ? Sẽ làm bất cứ điều gì nếu hình học đã có trong hình chiếu đích?

Tôi kiểm tra với một truy vấn như thế này rằng nó có vẻ an toàn, nhưng sẽ thật tuyệt nếu ai đó có thể xác nhận điều này vì tôi không thấy nó trong các tài liệu.

SELECT ST_AsEWKT(geom), ST_AsEWKT(ST_Transform(geom, 32737)) FROM table_in_32737;

Câu trả lời:


12

Hàm kiểm tra cùng và ra srid, và trả về không bị chạm nếu có, như mã nguồn hiển thị :

/*
* If input SRID and output SRID are equal, return geometry
* without transform it
*/
if ( input_srid == output_srid )
    PG_RETURN_POINTER(PG_GETARG_DATUM(0));

Cảm ơn đã liên kết mã nguồn. Đó là nguồn sự thật độc nhất.
Francisco Puga
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.