Es scheint, dass ArcMap einen Cache für jede Ebene verwaltet, die Feature-Daten enthält, und jedes Mal, wenn eine Ebene aktualisiert oder eine Änderung angewendet werden soll, dieser Cache verwendet wird. Wenn ArcMap eine Ebene von Grund auf neu zeichnen möchte, wird diese Abfrage an Geodatabase gesendet:
Wählen Sie ObjectId, Shape aus "featureClassName" [wobei "Layer Definition Query Expression"]
Im Bearbeitungsmodus scheinen bei Verwendung des Fangvorgangs die Feature-Daten in diesem Cache verwendet zu werden, um den Fangstatus während der Mausbewegung zu bestimmen. Ich weiß nicht, wie ArcMap räumliche Daten in diesem Cache, im ESRI-Formformat oder als WKB speichert, aber ich muss diese Feature-Daten abrufen.
Gibt es eine Möglichkeit, Feature-Daten eines Layers mithilfe seines Caches (Layer-Cache) abzurufen, anstatt eine IFeatureClass::get_Feature
Methode zu verwenden? ..... Vielleicht stimmt meine Idee nicht und eine Ebene hat keinen Cache (ich meine nicht den Cache, der für Ebenen optional ist und die Geschwindigkeit des Ebenenzeichnens erhöht), aber ich bin mir fast sicher, dass räumliche Daten vorhanden sind Die Anzahl der Layer (Map) wird irgendwo im ArcMap-Speicher gespeichert und von ArcMap für den Vorgang wie das Einrasten während des Bearbeitungsvorgangs verwendet. Gibt es eine Möglichkeit, auf diesen Teil der ArcMap-Daten zuzugreifen (falls tatsächlich vorhanden)?
Ich möchte keinen Cache einrichten, ich möchte Daten abrufen, ArcMap cache.ISpatialCacheManager
bietet keine Methode zum Abrufen bestimmter Daten daraus. Lassen Sie mich näher darauf eingehen, was ich meine.
Wenn ich diesen Code in mein Programm einfüge
//C#
IFeature ipF=ipMyFeatureClassObject.GetFeature(10);
ArcMap gibt einen Auswahlbefehl an die Geodatabase aus. Nehmen wir an:
select * from MyFeatureClassTableName Where ObjectId=10
und gibt eine Aufzeichnung von Daten zurück.
Im Bearbeitungsmodus kann ArcMap diese Methode nicht verwenden, um räumliche Daten abzurufen und den Fangstatus für Features auf der Karte zu berechnen, da diese Methode zeitaufwändig ist und die Fangberechnung einen Hochgeschwindigkeitsdatenabruf erfordert, auch weil sich die Maus überall auf der Karte bewegen kann Map and Snapping ist für jeden Zoom aktiviert. Alle diese Zeugen zeigen, dass räumliche Daten irgendwo im Speicher verfügbar sein müssen, und ich suche nach einer Methode, um darauf zuzugreifen.
Wenn all diese Verbrauchswerte nicht erfüllt werden, muss es eine perfekte Methode geben, mit der ArcMap räumliche Daten im laufenden Betrieb aus der Geodatabase abruft (z. B. räumliche Indizierung auf 4 oder 6 Ebenen basierend auf der Kartenausdehnung und die Mausposition, um nur einen Teil abzurufen von räumlichen Daten während der Mausbewegung sehr schnell, hat auf diese Weise nur dann Zugriff auf die Geodatabase, wenn sich der kleinste Indizierungsbereich der Maus ändert).
Ich beschäftige mich mit der Entwicklung eines Tools wie "Sketch Tool" und "Edit Tool" für eine andere Datenquelle als die ArcObject-Datenquelle und möchte keinen Cache parallel zu ArcMap einrichten. Wenn möglich, möchte ich dieselben Daten wie ArcMap verwenden speichert im Speicher für diese Datenquelle.
Glauben Sie, dass dies wahre Annahmen sind, und wenn ja, gibt es eine Möglichkeit, auf ArcMap-Geodaten in seinem Speicher zuzugreifen?
quelle
Antworten:
Grundsätzlich verwaltet die Editor-Erweiterung im Bearbeitungsmodus eine Reihe von Snap-Agenten (siehe ISnapEnvironment ). Jedem dieser Fangagenten ist möglicherweise ein Feature-Cache ( IFeatureSnapAgent.FeatureCache ) zugeordnet, sodass das Fangen ohne Ausführen einer räumlichen Abfrage bei jedem Bewegen des Mauszeigers durchgeführt werden kann. Es gibt also keinen einzelnen Feature-Cache, sondern in der Regel mehr davon, abhängig von der Anzahl der bearbeitbaren Ebenen und der Anzahl der aktivierten Fangagenten.
Möglicherweise können Sie die FeatureCache- Klasse auch separat verwenden, ohne mit dem Editor arbeiten zu müssen.
quelle
Wenn Sie mit ISpatialCacheManager3 einen Cache erstellt haben, sollte IFeatureClass.GetFeature schneller funktionieren ...
quelle