Wenn ein kvwmap-Layer eine Geometrie haben soll, wird datenbankseitig ein Geometry-Attribut angelegt.
Grundsätzlich:
- Geometrie-Attribut mittels SQL anlegen, nicht mit dbeaver.
- Die Angabe des Datentyps geometry reicht NICHT aus, es müssen IMMER EPSG und Geometrietyp angegeben werden.
Ein Geometrie-Attribut wird nach Anlegen der Tabelle mit separatem SQL angelegt oder - wenn die Tabelle per CREATE TABLE angelegt wird - im SQL selbst:
SELECT AddGeometryColumn('schema', 'tabelle','the_geom',25833,'MULTIPOLYGON', 2); -- Geometrietyp immer in '...'; Groß-/Kleinschreibung wird ignoriert– bzw.
CREATE TABLE <schema>.<tabelle> ( -- ..., the_geom geometry(multipolygon, 25833) NOT NULL -- Geometrietyp kann auch in '...' geschrieben werden; Groß-/Kleinschreibung wird ignoriert );
- Der Name des Geometrie-Attributs ist egal. Üblicherweise:„the_geom“.
- Wenn es keine anderen Gründe gibt, sollte immer EPSG 25833 verwendet werden. Hinweis: Die EPSG 35833 und EPSG 2398 gibt es nicht (mehr) - falls nicht anders möglich, die offiziellen EPSG 5650 bzw. EPSG 5674 verwenden!
- Als Geometrietyp müssen MULTIPOLYGON bzw. MULTILINE eingetragen werden. POLYGON oder LINE nur dann, wenn gesplittete Geometrien unbedingt verhindert werden sollen.
- Bei Punktgeometrien wird immer POINT angegeben.
- Der genannte Befehl darf kein „true“ oder „false“ nach der „2“ am Ende enthalten!
Außerdem sollte immer ein Index auf das Geometrie-Attribut gelegt werden:
CREATE INDEX gist_<name> ON <schema>.<tabelle> USING gist (the_geom);<name> sollte der Name der Tabelle sein, möglicherweise etwas abgekürzt.
Außerdem sollte das Geometrie-Attribut immer auf NOT NULL gesetzt werden. Einzige Ausnahme: Es ist abzusehen, dass es auch Datensätze ohne Geometrie geben wird. Dieser Fall muss auf jeden Fall mit dem Datenherrn besprochen werden!
ALTER TABLE <schema>.<tabelle> ALTER COLUMN the_geom SET NOT NULL;Einfacher ist es hier aber, das NOT NULL über dbeaver in den Spalteneigenschaften zu setzen.
Geometrie-Attribute nicht über dbeaver als „geometry“ anlegen!
Keine Constraints außer NOT NULL erzeugen!
NOT NULL nicht vergessen!