Jak uzyskać typ geometrii pustej tabeli PostGIS?


10

Mam aplikację internetową, która musi znać typ geometrii pola geomicznego tabeli PostGIS przed wstawieniem do niego wierszy. Używam następującego zapytania, aby określić typ geometrii kolumny geom:

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1

Zwraca typ geometrii rzeczywistego wiersza, więc nie działa, gdy moja tabela jest pusta. Jak określić typ geometrii samej kolumny geometrii?

Odpowiedzi:


17

W geometry_columnsten sposób zapytanie można uruchomić dla tabeli

SELECT type 
FROM geometry_columns 
WHERE f_table_schema = 'my_schema' 
AND f_table_name = 'building' 
and f_geometry_column = 'geom';

(lub, jeśli używasz geografii typ, subsititute geometry_columnsz geography_columnsi f_geometry_columnz f_geography_column)


Sql w odpowiedzi zwróci geometrytyp, podczas gdy nadal nie możemy wiedzieć, czy geometria jest punktowa czy liniowa.
giser

1
Oznacza to, że kolumna geometrii jest ustawiona na typ geometrii „geometria” (tzn. Akceptuje wszystkie rodzaje geometrii). W takim przypadku będziesz musiał sprawdzić każdą geometrię osobno za pomocą ST_GeometryType
atlefren

SELECT GeometryType(geom) FROM my_schema.building LIMIT 1lubisz to jako post na OP? To nie działa, jeśli tabela jest pusta.
giser

I jeszcze jedno, jeśli cała kolumna geometrii jest ustawiona na geometrypisanie dla całej tabeli, czy mogę utworzyć widok zawierający wszystkie tabele, które mogą zawierać points lines polyogn?
giser

1
Dobrze. Analogia: oświadczenie, że kolumna geom jest typu „geometria”, przypomina wyznaczenie szuflady na skarpetki dowolnego koloru. Sprawdzanie, jaki kolor skarpet jest w tej szufladzie, jest niemożliwe, gdy jest pusta.
atlefren

3

Poszukaj tabeli geometry_columns. Wszystkie kolumny geo z typem srid i geometrią są tutaj rejestrowane. Jeśli istnieje kolumna typu GEOMETRIA, można zapisać wszystkie typy geometrii.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.