Daugiau

SRID užtikrinimas „PostGIS“ geometrijos stulpelyje

SRID užtikrinimas „PostGIS“ geometrijos stulpelyje


Aš naudoju stalą sugeometrijatipo stulpelį pavadinimu „wkt". Jo apibrėžimas lentelėje atrodo taip:

sukurti lentelę (… wkt geometry not null,…);

Noriu jį pakeisti, kad įsitikinčiau, jog bet kurios įterptos geometrijos SRID bus 4326. Todėl noriu padaryti kažką panašaus įwkt"stulpelis:

wkt geometrija (POINT, 4326) nėra null

Tačiau tai nurodo, kad stulpelio geometrija yra TAŠKAS, ir aš noriu, kad stulpelis imtų bet kokią geometriją, kaip nurodyta dabartiniame apibrėžime.

Kaip galiu užtikrinti, kad stulpeliui būtų taikomas SRID? Ar turėčiau pridėti apribojimą "wkt"stulpelis, pvz."force_srid_the_geom"(kaip surinkau iš įrašo Kaip pakeisti esamų duomenų SRID" PostGIS "?) ARBA ar galėčiau naudoti kokią nors kitągeometrijatipas, apie kurį aš nežinau?


@BradHards yra teisus. Mišrių tipų turėjimas greičiausiai sukels problemų. Jei esate tikri, kad jūsų įrankiai gali valdyti mišrius tipus arba ketinate juos nuskaityti kitu būdu (per DB rodinius arba programiškai), galite suskirstyti apribojimus į dvi dalis, iš kurių viena yra neprivaloma:

Norėdami pakeisti esamą lentelę

- Tikrinkite SRID ALTER TABLE mytable ADD CONSTRAINT forcece_srid_wkt CHECK (ST_Srid (wkt) = 4326); - Patikrinkite tik geometrijos matmenis (2 skirta tik daugiakampiams) ALTER TABLE mytable ADD CONSTRAINT forcece_dimension_wkt CHECK (ST_Dimension (wkt) = 2);

Jei nustatote naują lentelę, tiesiog pridėkite ją naujoje eilutėje

sukurti lentelę kada nors (… wkt geometry not null, CONSTRAINT force_srid_the_geom CHECK (ST_Srid (wkt) = 4326));

Daugiau informacijos / skaitymo:


„PostGIS 2.x“ jums nereikia suvaržymų, o tik mums tipodams. 2D geometrijoms, kurių SRID = 4326, tipmod yrageometrija (Geometrija, 4326). Arba M matmenų geometrijų atveju tai būtųgeometrija (GeometryM, 4326)(supratote mintį).

Pavyzdys:

sukurti laikiną lentelę (wkt geometry (Geometry, 4326)); - veikia įterpimas į tam tikras (wkt) reikšmes („SRID = 4326; 1 PUNKTAS“)) įterpiamas į kai kurias (wkt) vertes („SRID = 4326; LINESTRING (1 2, 3 4)“)- ne darbinis intarpas į kai kurias (wkt) reikšmes („PUNKTAS (1 2)“) - KLAIDA: Geometrija SRID (0) neatitinka stulpelio SRID (4326) įterpti į kai kurias (wkt) reikšmes („SRID = 4326; M PUNKTAS ( 1 2 3) ') - KLAIDA: Geometrija turi M matmenis, bet stulpelis neturi

Tačiau, kaip įspėjo kiti, įsitikinkite, kad galite naudotiwktduomenis galutinio vartotojo programose. Be to, jis nėra techniškai saugomas kaip gerai žinomas tekstas-jis saugomas kaip gerai žinomas dvejetainis arba WKB.