โทร ST_Transform ในรูปทรงเรขาคณิตที่มีอยู่แล้วใน srid เป้าหมายหรือไม่


11

ฉันกำลังเขียนฟังก์ชันที่มีรูปทรงเรขาคณิตเป็นพารามิเตอร์ที่สามารถใช้ในการฉายภาพที่แตกต่างกัน:

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;

ฟังก์ชันต้องการเรขาคณิตในการฉายภาพเฉพาะ (32737) แต่ฉันไม่ต้องการบังคับให้ผู้เรียกทำการเปลี่ยนแปลงฉันชอบที่จะจัดการกับมันภายในฟังก์ชั่น

คำถามคือแทนที่จะตรวจสอบ srid จริงปลอดภัยหรือไม่ที่จะโทรไปที่ST_Transformเสมอ? จะทำอะไรถ้าเรขาคณิตนั้นมีอยู่ในการฉายเป้าหมายหรือไม่?

ฉันตรวจสอบด้วยแบบสอบถามเช่นนี้ดูเหมือนว่าจะปลอดภัย แต่จะดีถ้ามีใครสามารถยืนยันได้เพราะฉันไม่เห็นในเอกสาร

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

คำตอบ:


12

ฟังก์ชั่นการตรวจสอบเหมือนกันในและนอก srid และผลตอบแทนที่ไม่มีใครแตะต้องถ้าเป็นเช่นนั้นตามรหัสที่มาแสดง :

/*
* 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));

ขอบคุณสำหรับลิงค์ซอร์สโค้ด นั่นคือแหล่งที่มาที่แท้จริงของความจริง
Francisco Puga
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.