Speichertyp "ST_Geometry" in PostgreSQL

Sie können zwei verschiedene räumliche Speichertypen in PostgreSQL verwenden: ST_Geometry und PostGIS-Geometrie. Diese Datentypen ermöglichen Ihnen, räumliche Daten in andere Typen der Geschäftsdaten zu integrieren. Dadurch erhält die Mehrbenutzer-Datenbank den Vorteil, eine geographische Komponente zu den Analysen und Datenprodukten hinzufügen zu können. Die räumlichen Daten zusammen mit anderen Geschäftsobjekten zu speichern vereinfacht auch den Mehrbenutzerzugriff, die Verwaltung und die Sicherheit der Daten, da Sie weniger Datenspeicherressourcen verwalten müssen.

Standardmäßig verwendet eine Geodatabase in PostgreSQL den räumlichen Datentyp "ST_Geometry". Sie können auch den Typ "ST_Geometry" in der PostgreSQL-Datenbank installieren. Informationen zum Installieren des Typs "ST_Geometry" in einer PostgreSQL-Datenbank finden Sie unter Hinzufügen des Typs "ST_Geometry" zu einer PostgreSQL-Datenbank.

Um Ihnen zu veranschaulichen, wie der Typ "ST_Geometry" in PostgreSQL verwendet wird, wird in diesem Abschnitt Folgendes beschrieben:

Informationen zum Arbeiten mit Tabellen, die den Speichertyp "ST_Geometry" mit SQL verwenden, finden Sie in den folgenden Themen:

Informationen zum PostGIS-Geometrietyp finden Sie unter Was ist der Geometrietyp PostGIS?

Wie ST_Geometry räumliche Daten speichert

Nachfolgend finden Sie die Beschreibung von "ST_Geometry" in PostgreSQL:

Name

Typ

Beschreibung

Größe

LONG INTEGER

Die Gesamtlänge der ST_Geometry-Struktur einschließlich des Shape-Puffers

srid

LONG INTEGER

Enthält die Kennung für die Geometrie, die sie mit ihrem zugeordneten Raumbezugsdatensatz (Koordinatensystem) in der Tabelle "sde_spatial_references" verknüpft.

numpts

LONG INTEGER

Die Anzahl der Punkte, die die Geometrie definieren; für Multipart-Geometrien schließt dies die Trennzeichen zwischen jedem Teil ein, ein Punkt für jedes Trennzeichen.

entity

SHORT INTEGER

Der Typ des geometrischen Features, der in der räumlichen Spalte gespeichert wird (Linestring, Multilinestring, Multipoint, Multipolygon, Punkt oder Polygon)

sqltype

SHORT INTEGER

Der SQL-Typ für das Shape; z. B. POINT_TYPE, POINTM_TYPE oder MULTIPOLYGONZM_TYPE

minx

LFLOAT

Definiert zusammen mit miny, maxx und maxy den räumlichen Envelope der Geometrie

miny

LFLOAT

Definiert zusammen mit minx, maxx und maxy den räumlichen Envelope der Geometrie

maxx

LFLOAT

Definiert zusammen mit minx, miny und maxy den räumlichen Envelope der Geometrie

maxy

LFLOAT

Definiert zusammen mit minx, miny und maxx den räumlichen Envelope der Geometrie

minz

LFLOAT

Minimaler Z-Wert

maxz

LFLOAT

Maximaler Z-Wert

minm

LFLOAT

Minimaler Messwert

maxm

LFLOAT

Maximaler Messwert

Fläche

LFLOAT

Die Fläche der Geometrie

len

LFLOAT

Die Länge des Umfangs der Geometrie

Form

BYTEA

Komprimierter Shape von Esri

Wie andere Objekttypen enthält auch der ST_Geometry-Datentyp eine Konstruktormethode und Funktionen. Eine Konstruktormethode gibt eine neue Instanz (Objekt) des Datentyps zurück und legt die Werte seiner Attribute fest.

Der Name des Konstruktors ist der gleiche wie der Typ (ST_Geometry). Wenn Sie ein Objekt vom Typ "ST_Geometry" instanziieren, rufen Sie die Konstruktormethode auf, wie im folgenden Beispiel gezeigt:

CREATE TABLE hazardous_sites (name varchar(128),
              location st_geometry);

Die folgenden zusätzlichen ST_Geometry accessor-Funktionen verwenden eine einzelne ST_Geometry als Eingabe und geben den angeforderten Eigenschaftswert als Zahl zurück:

Die folgende Abfrage gibt z. B. den Namen und die Fläche der einzelnen Staaten in den USA zurück.

SELECT name, st_area(geometry)
FROM us_states
ORDER BY name;

"ST_LineString", "ST_MultiLineString", "ST_MultiPoint", "ST_MultiPolygon", "ST_Point" und "ST_Polygon" sind alle Subtypes (oder Subclasses) von "ST_Geometry". "ST_Geometry" und die zugehörigen Subtypes haben gemeinsame Attribute und Funktionen. Die Konstruktordefinition für "ST_LineString", "ST_MultiLineString", "ST_MultiPoint", "ST_MultiPolygon", "ST_Point" und "ST_Polygon" ist die gleiche. Der Name des Konstruktors ist der Gleiche wie der des konstruierten Typs.

Metadaten-Schema

Der räumliche Datentyp für PostgreSQL-Typen und Metadatentabellen wird im SDE-Schema gespeichert. Die Schemadefinition ist die Basistabellenbeschreibung für Metadatentabellen, die verwendet wird, um den Typ Spalte/Tabelle, den räumlichen Index und die Raumbezugsinformationen zu definieren und zu beschreiben.

Eine Beschreibung der einzelnen Tabellen finden Sie in der Auflistung unter Systemtabellen einer Geodatabase in PostgreSQL. Die Tabellen sind "st_coordinate_systems", "st_units_of_measure", "sde_geometry_columns", "sde_spatial_references" und "sde_coordinate_system".

Erstellen von Feature-Classes mit dem Speichertyp "ST_Geometry" unter Verwendung von ArcGIS

Beim Erstellen von Feature-Classes durch ArcGIS for Desktop wählen Sie den zu verwendenden Speichertyp aus.

Wenn Sie eine Feature-Class in ArcGIS erstellen, die das Format "ST_Geometry" verwendet, wird die Business-Tabelle der Feature-Class mit einer Spalte vom Typ "ST_Geometry" erstellt, in der räumliche Daten für die Feature-Class gespeichert werden.

Wenn Sie eine Verbindung mit einer Datenbank herstellen, wählen Sie "ST_Geometry" beim Erstellen einer räumlichen Tabelle aus, falls dies der Typ der räumlichen Spalte ist, den Sie verwenden möchten. Weitere Informationen zum Erstellen von Tabellen in einer Datenbank finden Sie unter Erstellen einer Spatial-Database-Tabelle in ArcGIS.

Wenn Sie eine Verbindung mit einer Geodatabase herstellen, geben Sie den Speicher an, indem Sie das zu verwendende Konfigurationsschlüsselwort auswählen. Die Standardspeichereinstellungen werden in der Tabelle "sde_dbtune" durch den GEOMETRY_STORAGE-Parameter des Konfigurationsschlüsselwortes "DEFAULTS" definiert. Wenn Sie den GEOMETRY_STORAGE-Parameterwert des Schlüsselworts "DEFAULTS" nicht ändern, werden all Ihre Feature-Classes mit dem Format "ST_Geometry" erstellt, es sei denn, Sie geben ein anderes Konfigurationsschlüsselwort an, wenn Sie die Feature-Class erstellen.

Wenn Sie den Parameter "DEFAULTS GEOMETRY_STORAGE" ändern, um eine PostGIS-Geometrie zu verwenden, können Sie immer noch Feature-Classes erstellen, die das Format "ST_Geometry" verwenden. Erstellen Sie hierzu in der Tabelle "sde_dbtune" ein neues Konfigurationsschlüsselwort für das Format "ST_Geometry". Erstellen Sie beispielsweise ein Konfigurationsschlüsselwort wie folgt:

##ST_GEOMETRY
GEOMETRY_STORAGE    "ST_GEOMETRY"
UI_TEXT   "User-interface for ST_GEOMETRY keyword"

END

Wenn Sie anschließend die Feature-Class in ArcGIS erstellen, wählen Sie dieses Schlüsselwort aus. Die neue Feature-Class verwendet dann das Format "ST_Geometry".

TippTipp:

Sie verwenden den Befehl "sdedbtune", um Werte in der Tabelle "sde_dbtune" zu ändern oder hinzuzufügen. Weitere Anweisungen erhalten Sie unter Ändern des Inhalts der DBTUNE-Tabelle.

Zugreifen auf PostgreSQL-Tabellen mit ST_Geometry-Spalten

Wenn Sie SQL verwenden, um eine Tabelle mit einer ST_Geometry-Spalte zu erstellen, können Sie über SQL oder benutzerdefinierte Anwendungen von Drittanbietern auf die Daten wie auch auf die Tabelle in ArcGIS zugreifen. Wenn Sie eine Verbindung mit der Datenbank von ArcGIS herstellen, können Sie Analysen anzeigen oder durchführen. Sie können auch Daten in Tabellen laden, die eine ST_Geometry-Spalte enthalten. Hierzu müssen die folgenden Kriterien erfüllt werden:

Wenn Sie die Tabelle in einer Geodatabase mit SQL erstellen, können Sie sie bei der Geodatabase registrieren, sofern Sie die Geodatabase-Funktionalität (z. B. Replikation, Netzwerke, Beziehungsklassen und Topologie) verwenden. Wenn Sie die Tabelle in ArcGIS bearbeiten möchten, können Sie die Tabelle bei der Geodatabase registrieren, vorausgesetzt, die folgenden Kriterien werden erfüllt:

Registrieren der räumlichen Spalte

Wenn Sie zum Erstellen einer Tabelle mit einer ST_Geometry-Spalte SQL verwenden, können Sie die Spalte zur Verwendung eines bestimmten Raumbezugs und einer Dimensionalität registrieren. Auf diese Weise wird vermieden, dass Benutzer, die Datensätze über SQL einfügen, versehentlich Datensätze mit anderen Raumbezügen oder Dimensionen einfügen. Verwenden Sie hierzu die Funktion "sde.st_register_spatial_column". Die Syntax zum Verwenden dieser Funktion lautet wie folgt:

SELECT st_register_spatial_column('<database_name>', '<schema_name>', 
'<table_name>', '<spatial_column_name>', <srid>, <coordinate_dimension>)

Die von Ihnen zu spezifizierende SRID muss in der Tabelle "public.sde_spatial_references" enthalten sein. Durch die Koordinatendimension wird angegeben, ob die Daten nur über XY-Koordinaten (2), XYZ-Koordinaten (3), XYZM-Koordinaten (4) oder XYM-Koordinaten (5) verfügen. Wenn Sie keine Koordinatendimension angeben, werden die Daten standardmäßig so konfiguriert, als ob sie nur XY-Dimensionen enthielten.

Im folgenden Beispiel ist die Shape-Spalte der Blocktabelle im Schema "sasha" der Datenbank "mycitydb" für die Verwendung einer SRID von 4236 und zum Speichern nur dreidimensionaler Koordinaten registriert:

SELECT st_register_spatial_column(
'mycitydb', 'sasha', 'blocks', 'shape', 4236, 3);

Dadurch wird ein Datensatz für die räumliche Spalte zur Tabelle "public.sde_geometry_columns" in der Geodatabase oder Datenbank hinzugefügt.

Wenn die räumliche Spalte leer ist und Sie diese mit einer bestimmten SRID und Dimensionalität registrieren, können Sie die Registrierung aufheben, um die SRID oder Dimensionalität zu ändern, und die Spalte danach mit anderen Werten erneut registrieren. Sie können die Registrierung einer räumlichen Spalte aufheben, indem Sie die Funktion "st_unregister_spatial_column()"ausführen. Diese Funktion entfernt die räumliche Spalte aus der Systemtabelle "public.sde_geometry_columns", so dass die räumliche Spalte nicht mehr mit jedem Raumbezugssystem verknüpft ist. Die Syntax zum Verwenden dieser Funktion lautet wie folgt:

SELECT st_unregister_spatial_column(
'<database_name>', '<schema_name>',
 '<table_name>', '<column_name>')

Sie können überprüfen, ob eine räumliche Spalte registriert ist, indem Sie die Funktion "st_isregistered_spatial_column" ausführen. Die Syntax zur Verwendung dieser Funktion lautet wie folgt:

SELECT st_isregistered_spatial_column(
'<database_name>', '<schema_name>',
 '<table_name>', '<column_name>', <srid>)

Wenn die räumliche Spalte mit der angegebenen SRID registriert ist, wird 1 zurückgegeben, andernfalls wird 0 zurückgegeben.

Mit der Funktion "st_get_coord_dimension" können Sie ermitteln, mit welcher Dimensionalität die Tabelle registriert wurde. Die Syntax für die Funktion "st_get_coord_dimension" lautet wie folgt:

SELECT st_get_coord_dimension(
'<schema_name>', '<table_name>', '<column_name>', <srid>)

In diesem Beispiel gibt die Funktion "st_get_coord_dimension" XYZ zurück, da die Blocktabelle als dreidimensional registriert ist:

SELECT st_get_coord_dimension(
'sasha', 'blocks', 'shape', 4236);

st_get_coord_dimension
---------------------------
xyz
9/11/2013