Mehr

Wie werden mehrere Tabellen/Feature-Classes zu einem einzelnen Geodatabase-Objekt in ArcObejcts zusammengeführt?

Wie werden mehrere Tabellen/Feature-Classes zu einem einzelnen Geodatabase-Objekt in ArcObejcts zusammengeführt?


Mein Projekt ist die ArcGis-Erweiterung, die einen bestimmten Satz von Tabellen und Feature-Classes verwendet. Ich möchte, dass sich diese Struktur wie ein einzelnes Geodatabase-Objekt verhält, sodass der Benutzer keinen Teil seines Schemas löschen kann. In ArcGis ist diese Funktionalität in Catastral Fabric vorhanden. Es enthält mehrere Feature-Classes und Tabellen, die für den Benutzer nicht sichtbar sind. Dies ist im "Dialog "Neue Beziehungsklasse" deutlich zu sehen.

Welche ArcObjects-Schnittstellen/Workspace-Erweiterungen muss ich implementieren, um ein solches Verhalten zu erreichen?


Im aktuellen Projekt, an dem wir arbeiten, haben wir mehrere Klassen/Schnittstellen implementiert, die als Lösung zusammengeführt werden.

Wir die folgenden Aufgaben mit diesen Klassen:

  • Validierungs-/Kaskadierungsverhalten (Klassenerweiterung);
  • IWorkspaceExtension zum Ausblenden von Interna;
  • ArcMap-Erweiterungen (Erfassung bestimmter Ereignisse, die es dem Benutzer erlauben oder verbieten, mit einem solchen Vorgang fortzufahren);
  • Bearbeiten von Aufgaben für komplexe Erstellungsvorgänge;
  • Ein In-Memory-Cache, der über eine Klassenerweiterung synchronisiert wird (dies wird verwendet, um die Roundtrips zur Datenbank beim Kaskadieren von Updates zu reduzieren)

Wir behandeln Beziehungen meistens mit nachfolgenden Abfragen, anstatt Beziehungsklassen zu verwenden, obwohl sie im Schema vorhanden sind.

Die maximale Entfernung, die wir hier erreichen können, besteht darin, das meiste Standardverhalten für jede Feature-Class zu verwenden, aber unsere Geschäftsregeln durchzusetzen. Wir könnten solche Datentypen wie Katasternetze erstellen, der Aufwand würde sich nicht lohnen: http://edndoc.esri.com/arcobjects/8.3/?URL=/ArcObjectsOnline/Samples/ArcMap/Layers/DatabaseLayers/DatabaseLayers.htm


Sie können bestimmte Tabellen und/oder Beziehungsklassen ausblenden, indem Sie eine Arbeitsbereichserweiterung implementieren. Dies wird insbesondere durch die Implementierung von IWorkspaceExtension.PrivateDatasetNames und IWorkspaceExtension.DataDictionaryTableNames erreicht. Lesen Sie auch die Übersicht über die konzeptionellen Workspace-Erweiterungen gründlich durch.

Es ist jedoch nicht einfach, das weitere Verhalten von Catastral Fabric nachzuahmen, da Sie keine neue Art von Dataset implementieren können. Wenn Sie sich die Enumeration esriDatasetType ansehen, sehen Sie, dass diese direkt in ArcGIS eingebrannt werden. Es gibt keine Erweiterbarkeitspunkte, um äquivalente Implementierungen bereitzustellen.

Am besten blenden Sie Ihre lösungsspezifischen Datensätze aus und stellen eine Reihe von Werkzeugen (ArcMap, ArcCatalog) bereit, die darauf reagieren.


Das wird eine ziemlich große Aufgabe sein; Sie möchten Ihre eigenen Schnittstellen für Ihren Speicher in die Geodatabase schreiben; aber dann auch in die Geometrie, um Ihr Feature zu definieren, das alle Beziehungsinformationen enthält und die gesamte Integrität der Informationen beibehält.
Wie Sie in den meisten von ESRI verwendeten Enterprise-DBs sehen; keiner von ihnen verlässt sich auf DB-Beziehungen oder -Abhängigkeiten; Dies macht es einfacher, abzustrahieren und eine allgemeine DB-Zugriffsschicht zu haben, sodass sie die gesamte referenzielle Integrität in ihrem eigenen Code (wie dem Kataster/Paket-Framework) verarbeiten.
Möglicherweise können Sie Ihre eigene Geometrie mithilfe von Überschreibungen oder Klonen aus der ESRI-API erstellen. aber so oder so gehen Sie; Dies wird keine kleine Aufgabe sein, da Sie Ihre eigenen ESRI-Geometrieobjekte erstellen (die von Kernobjekten erben), die Sie dann in Ihrem Code steuern.
Ich habe gerade die wichtigsten API-Dokumente für .Net durchgeblättert, und es gibt nicht einmal einen Beispielcode, den ich auswählen könnte, der Ihnen einen guten Ausgangspunkt geben würde.


Schau das Video: Join in SQL - SQL 9 Gehe auf u0026 werde #EinserSchüler