Zaten hedef karede bulunan geometride ST_Transform mu çağrılıyor?


11

Farklı projeksiyonlarda olabilir bir parametre olarak bir geometri olan bir işlev yazıyorum:

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;

Fonksiyonun belirli bir projeksiyonda geometriye ihtiyacı vardır (32737), ancak arayanı dönüşümü yapmakla yükümlü kılmak istemiyorum, fonksiyonun içinde ele almayı tercih ediyorum.

Soru, gerçek srid'i kontrol etmek yerine, her zaman ST_Transform'u aramak güvenli midir ? Geometri zaten hedef projeksiyondaysa bir şey yapacak mı?

Güvenli gibi göründüğü gibi bir sorgu ile kontrol, ama dokümanlar onu görmedim biri bunu onaylamak eğer harika olacak.

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

Yanıtlar:


12

İşlev, giriş ve çıkış srid'ini kontrol eder ve kaynak kodda gösterildiği gibi, dokunulmazsa döndürür :

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

Kaynak kodunu bağladığınız için teşekkürler. Bu eşsiz gerçeğin kaynağı.
Francisco Puga
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.