ArcSDE und räumliche Datentypen von Microsoft
ArcSDE-Geodatabases unterstützen das Speichern von Vektordaten mithilfe der Microsoft-Datentypen "geometry" und "geography". Diese Typen sind in SQL Server 2008 verfügbar und erfordern keine separate Installation. Verwenden Sie diese Datentypen, wenn Sie mit SQL auf Ihre räumlichen Daten zugreifen möchten.
Der Microsoft-Datentyp "geometry" ähnelt vorhandenen räumlichen GIS-Datentypen: Er verwendet Koordinaten in einer beliebigen Ebene, z. B. definierte Projektionen.
Der Microsoft-Datentyp "geography" wird für Daten auf einem Sphäroid verwendet, die mit Breitengrad- und Längengradkoordinaten gespeichert werden.
Die beiden Typen unterscheiden sich hinsichtlich der verwendeten Methode für räumliche Berechnungen. Weitere Informationen zu den räumlichen Datentypen von Microsoft finden Sie in der SQL Server 2008-Dokumentation.
Verwenden von Konfigurationsschlüsselwörtern zum Angeben räumlicher Datentypen von Microsoft
Standardmäßig verwenden ArcSDE-Geodatabases in SQL Server den Datentyp "ArcSDE Compressed Binary". Wenn Sie stattdessen die Microsoft-Datentypen "geometry" oder "geography" für die Speicherung verwenden möchten, müssen Sie entweder (1) den Parameter GEOMETRY_STORAGE unterhalb des Konfigurationsschlüsselworts DEFAULTS in der Tabelle "SDE_dbtune" in GEOMETRY bzw. GEOGRAPHY ändern oder (2) beim Erstellen von Feature-Classes ein Konfigurationsschlüsselwort angeben, das für den Parameter GEOMETRY_STORAGE den Wert GEOMETRY bzw. GEOGRAPHY festlegt. Sie sollten den Parameter GEOMETRY_STORAGE unterhalb des Schlüsselworts DEFAULTS nur ändern, wenn die Mehrheit der Benutzer hauptsächlich den Datentyp "geometry" oder "geography" verwendet. Wenn nur einige wenige Daten im Datentyp "geometry" oder "geography" gespeichert werden, sollten Sie beim Erstellen der Feature-Class ein separates Schlüsselwort festlegen. Es werden zwei Schlüsselwörter, GEOMETRY und GEOGRAPHY, bereitgestellt, Sie können jedoch auch eigene benutzerdefinierte Schlüsselwörter erstellen.
Voraussetzungen zum Verwenden der Microsoft-Datentypen "geometry" oder "geography" in einer Geodatabase
Wenn Sie mithilfe einer Drittanbieteranwendung oder SQL Tabellen erstellt haben, die Spalten von Typ "Geometry" oder "Geography" von Microsoft enthalten, können Sie diese Tabellen in ArcSDE und in der Geodatabase registrieren, um die Geodatabase-Funktionalität zu nutzen. Hierzu müssen die Tabellen bestimmte Voraussetzungen erfüllen:
- Der Benutzer, von dem die Tabelle registriert wird, muss deren Besitzer sein.
- Die Tabelle muss eine einzelne räumliche Spalte vom Typ "geometry" oder "geography" enthalten.
- Alle Shapes in der Spalte müssen den gleichen räumlichen Datentyp (Punkte, Linien oder Polygone, Multipoints, Multilinestrings oder Multipolygone) aufweisen.
Das Hinzufügen von Shapes eines anderen Typs zu der Spalte mittels SQL, nachdem Sie die Tabelle in ArcSDE registriert haben, wird ebenfalls nicht unterstützt und führt zu einem unvorhersehbaren Verhalten der Feature-Class.
- Alle Shapes in der Spalte müssen dieselbe Raumbezugs-ID (SRID) aufweisen.
- Die bei der Registrierung angegebene ArcSDE-SRID muss in der Systemtabelle "SDE_spatial_references" enthalten sein. Wenn dies nicht der Fall ist, muss die Projektion bei der Registrierung definiert werden. Hinweis:
Die SRID von ArcSDE und die SRID der Datentypen "geometry" und "geography" von Microsoft sind nicht identisch. Die ArcSDE-SRID wird von ArcSDE zugewiesen, wenn der Systemtabelle "SDE_spatial_references" das Koordinatensystem hinzugefügt wird.
- Wenn die Tabelle einen Primärschlüssel enthält, muss sie gruppiert sein.
Registrieren einer vorhandenen Geography- oder Geometry-Tabelle in ArcSDE und in der Geodatabase
Verwenden Sie zum Registrieren einer Tabelle in ArcSDE den Befehl "sdelayer" zusammen mit der Operation "register".
Im nachfolgenden Beispiel wird die Tabelle "spdata " mit Polygongeometrien (–e a) in einer Geometry-Spalte namens "features" registriert. Die Tabelle verfügt über die Ganzzahlspalte "fid". Diese wird als Spalte für die eindeutige Feature-Kennung verwendet, deren Werte von ArcSDE (–C fid,SDE) verwaltet werden. Die Raumbezugs-ID (SRID), die zum Registrieren des Layers verwendet wurde, ist 5 (‑R 5). Dies ist die SRID in der Tabelle "SDE_spatial_references".
sdelayer –o register –l spdata,features –e a –C fid,SDE –t GEOMETRY –R 5 –i sde:sqlserver:tornado –D agency1 –u vijay –p open.septagenarian
Wenn der benötigte Raumbezug in der Tabelle "SDE_spatial_references" nicht vorhanden ist, können Sie eine Template-Feature-Class in ArcCatalog erstellen, die den gewünschten Raumbezug verwendet. Fragen Sie dann die Tabelle "SDE_spatial_references" ab, um zu sehen, welche SRID ihr zugewiesen wurde.
Für eine sde-Schema-Geodatabase
SELECT * FROM sde.SDE_spatial_references
Für eine dbo-Schema-Geodatabase
SELECT * FROM dbo.SDE_spatial_references
Suchen Sie den mit der Template-Feature-Class hinzugefügten Raumbezug, und identifizieren Sie die SRID-Nummer. Beim Registrieren von anderen Tabellen, die Geometry-Spalten enthalten und sich im gleichen Koordinatenbezugssystem befinden, können Sie dann diese Nummer zusammen mit der Option "–R" verwenden.
Sie können anstelle der Option ‑R auch eine Projektion-ID mit der Option –G angeben. Wenn Sie Tabellen mit einer Geography-Spalte registrieren, muss die verwendete Project-ID mit einer der SRIDs übereinstimmen, die in der SQL Server-Tabelle "sys.spatial_references_systems" gespeichert sind.
sdelayer –o register –l spgeogdata,features –e a –C fid,SDE –t GEOGRAPHY –G 4326 –i sde:sqlserver:tornado –D agency1 –u vijay –p open.septagenarian
Unabhängig vom Speichertyp für räumliche Daten erfordert die Registrierung von Tabellen, die eine große Anzahl von Datensätzen enthalten, möglicherweise weniger Zeit, wenn Sie die Zeilen-ID-Spalte als vom Benutzer verwaltet registrieren. Esri rät jedoch von der Verwendung benutzerverwalteter Zeilen-IDs ab.
sdelayer –o register –l polsamples,shape –e p –C fid,USER –t GEOMETRY –R 300 –i 6543 –D agency1 –u guadalupe –p overnout
Wenn Sie die Feature-ID-Spalte als vom Benutzer verwaltet registrieren und dann die Feature-Class in der Geodatabase registrieren, fügt ArcGIS eine zusätzliche Feature-ID-Spalte mit dem Namen "object_ID" hinzu. Die Werte in dieser Spalte werden von ArcGIS verwaltet. Wenn die Tabelle eine große Anzahl von Datensätzen enthält, kann das Hinzufügen dieser zusätzlichen "object_ID"-Spalte einige Zeit in Anspruch nehmen.
Durch Ausführung des Befehls "sdelayer –o register" wird die Tabelle in ArcSDE registriert. Hierdurch wird den Systemtabellen "SDE_layers", "SDE_geometry_columns", "SDE_column_registry" und "SDE_table_registry" in der Geodatabase ein Datensatz hinzugefügt. Es wird kein räumlicher Index erstellt. Mithilfe von SQL können Sie räumliche Indizes für Tabellen erzeugen, die außerhalb von ArcGIS erstellt wurden, und die Tabellen dann in ArcSDE registrieren. Alternativ können Sie den räumlichen Index auch nach dem Registrieren der Tabelle in ArcSDE erstellen. Verwenden Sie hierzu den Befehl "sdelayer" mit der entsprechenden Operation "alter", um die Layer-Ausdehnung zu definieren. Verwenden Sie dann die Operation "load_only_io", um den Nur-Lade-E/A-Modus, um die Tabelle zu aktivieren, und die Operation "normal_io", um die Tabelle wieder in den normalen E/A-Modus zurückzusetzen, wodurch automatisch ein räumlicher Index erstellt wird. Wenn Sie anschließend den Layer in der Geodatabase registrieren, können Sie mit ArcCatalog einen räumlichen Index erstellen. Wenn Sie den räumlichen Index mithilfe von "sdelayer" oder ArcCatalog erstellen, werden die in der Tabelle "SDE_dbtune" angegebenen Parameter für den räumlichen Index und die aktuelle Ausdehnung der Daten im Layer verwendet.
Weitere Informationen zum Befehl "sdelayer" finden Sie in der ArcSDE Administration Command Reference.
Wenn für die Feature-Class Geodatabase-Funktionen wie Beziehungsklassen, Topologie, geometrische Netzwerke, Cadastral Fabrics, Terrains und Schemas oder Subtypes, Standardwerte, Domänen oder Validierungsregeln verwendet werden sollen, müssen Sie diese ebenfalls in der Geodatabase registrieren.
Sie können die Datasets in ArcCatalog wie folgt registrieren:
- Starten Sie ArcCatalog.
- Stellen Sie eine Verbindung mit der Geodatabase her, die den zu registrierenden Layer enthält. Stellen Sie sicher, dass Sie die Verbindung als Besitzer des Layers herstellen.
- Klicken Sie mit der rechten Maustaste auf den Layer, den Sie in der Geodatabase registrieren möchten.
- Klicken Sie auf In Geodatabase registrieren.
Räumlichen Index erstellen
Eine Voraussetzung für das Erstellen eines räumlichen Indexes in SQL Server ist, dass die Tabelle einen Primärschlüssel enthält.
Für räumliche Tabellen, die außerhalb von ArcGIS erstellt wurden, z. B. mit SQL, müssen Sie in der Tabelle einen Primärschlüssel und mit SQL einen räumlichen Index erstellen. Nachfolgend ist die SQL-Syntax zum Erstellen eines räumlichen Indexes für eine Tabelle dargestellt, die eine Geometry- oder Geography-Spalte enthält:
CREATE SPATIAL INDEX <index_name> ON <table> (<spatial column>) USING GEOMETRY_GRID WITH ( BOUNDING_BOX = minx,miny,maxx,maxy), GRIDS = (low|medium|high, low|medium|high, low|medium|high, low|medium|high), CELLS_PER_OBJECT = n, <other regular btree index options like filegroups, fill factors, etc> )
Wenn Sie in ArcGIS einen Layer mit einer räumlichen Geometry- oder Geography-Spalte erstellen, wird das umgebende Rechteck der Feature-Class als Ausdehnung der zu indizierenden Daten berechnet. Alle Features außerhalb dieses Bereichs werden nicht indiziert. Sie werden jedoch weiterhin in räumlichen Abfragen zurückgegeben. Wenn die Layer-Ausdehnung nicht festgelegt wird, wird der maximale Koordinatenbereich für das Raumbezugssystem des Layers als umgebendes Rechteck verwendet. Jedes Mal, wenn der Layer vom Nur-Lade-E/A-Modus in den normalen E/A-Modus wechselt, wird das umgebende Rechteck basierend auf der aktuellen Layer-Ausdehnung angepasst.
Darüber hinaus erzeugt ArcSDE beim Erstellen einer Feature-Class mit einer Geometry- oder Geography-Spalte in ArcGIS standardmäßig einen gruppierten Primärschlüssel für die Zeilen-ID-Spalte der Business-Tabelle. Anschließend wird ein räumlicher Index basierend auf den Werten für den Parameter B_MS_SPINDEX des Konfigurationsschlüsselworts in der Tabelle "SDE_dbtune" erstellt, die beim Erstellen der Feature-Class verwendet wurden. Wenn die Feature-Class als versioniert registriert ist, wird ein gruppierter Primärschlüssel für die Zeilen-ID- und Status-ID-Spalte der Adds-Tabelle erstellt. Der räumliche Index wird dann basierend auf den Werten für den Parameter A_MS_SPINDEX im Konfigurationsschlüsselwort erstellt, die beim Erstellen der Feature-Class verwendet wurden. Der Standardwert für beide Parameter lautet wie folgt:
GRIDS = (MEDIUM, MEDIUM, MEDIUM, MEDIUM), CELLS_PER_OBJECT = 16
Weitere Informationen zum Festlegen von Werten in der Tabelle "SDE_dbtune" finden Sie unter Ändern des Inhalts der Tabelle DBTUNE, nachdem sie erstellt wurde.
Bekannte Einschränkungen bei der Verwendung von SQL Server-Geographie mit einer ArcSDE-Geodatabase
Nachfolgend finden Sie eine Liste von Einschränkungen, die Sie beachten müssen, wenn Sie SQL Server-Geographiedaten in der ArcSDE-Geodatabase speichern:
- In dieser Version von ArcSDE können keine Z- oder M-Werte im Datentyp "geography" gespeichert werden. Wenn Sie vorhandene Daten in die Geodatabase einfügen, z. B. ein Shapefile oder eine Feature-Class aus einer anderen Geodatabase, und diese mit dem Datentyp "geography" gespeichert werden müssen, darf das eingehende Dataset keine 3D-Attribute (z) oder Messwertattribute (m) aufweisen.
Die z- und m-Attribute müssen deaktiviert werden, bevor Sie die Daten importieren. Alternativ können Sie Daten mit 3D- oder Messwertattributen in Feature-Classes importieren, die den Speichertyp "geometry" oder die Standardeinstellung "Compressed Binary" verwenden.
- Die Messwerte für Geographiedaten liegen größtenteils in Metern vor. Die Maßeinheit wird in "sys.spatial_ref_system" angegeben. Überprüfen Sie dort, welche Einheit für den EPSG-Wert verwendet wird, der mit den Daten verknüpft ist.
- Die einzelnen Features und alle Teile eines Multipart-Features müssen in einer einzelnen Hemisphäre liegen.