Parece que ArcMap mantiene un caché para cada capa que contiene datos de entidades y cada vez que desea actualizar la capa o aplicar un cambio, utiliza este caché. Como descubrí, cuando ArcMap quiere dibujar una capa desde cero, envía esta consulta a la geodatabase:
seleccione ObjectId, Shape desde "featureClassName" [donde "expresión de consulta de definición de capa"]
En el modo de edición, cuando se usa el ajuste, parece que los datos de características en este caché se usan para determinar el estado de ajuste mientras se mueve el mouse. No sé cómo ArcMap almacena datos espaciales en este caché, en formato de forma ESRI o como WKB, pero necesito recuperar estos datos de entidades.
¿Hay alguna forma de recuperar datos de características de una capa usando su caché (caché de capa) en lugar de usar el IFeatureClass::get_Feature
método? ..... Tal vez mi idea no es correcta y una capa no tiene caché (no me refiero a la caché, que es opcional para las capas y aumenta la velocidad del dibujo de la capa), pero estoy casi seguro de datos espaciales de capas (mapa) se almacena en la memoria de ArcMap en algún lugar y ArcMap lo usa para su operación, como el ajuste durante la operación de edición. ¿Hay alguna forma de acceder a esta parte de los datos de ArcMap (si realmente existe)?
No quiero configurar un caché, quiero recuperar datos de ArcMap cache.ISpatialCacheManager
que no ofrece ningún método para obtener datos específicos de él. Déjame discutir lo que quiero decir con más detalles.
Cuando pongo este código dentro de mi programa
//C#
IFeature ipF=ipMyFeatureClassObject.GetFeature(10);
ArcMap emite un comando de selección para geodatabase, supongamos:
select * from MyFeatureClassTableName Where ObjectId=10
y devuelve un registro de datos.
En el modo de edición, ArcMap no puede usar este método para obtener datos espaciales y calcular el estado de ajuste para las entidades en el mapa debido a que este método consume mucho tiempo y el cálculo de ajuste necesita una recuperación de datos de alta velocidad, también porque el mouse puede moverse por todas partes el mapa y el ajuste están habilitados para cualquier zoom, todos estos testigos muestran que los datos espaciales deben estar disponibles en algún lugar de la memoria y estoy buscando un método para acceder a ellos.
Si todos estos consumos no se hacen realidad, entonces debe haber un método perfecto que ArcMap use para recuperar datos espaciales de la geodatabase sobre la marcha (por ejemplo, indexación espacial de 4 o 6 niveles en función de la extensión del mapa y use la posición del mouse para recuperar solo una parte de datos espaciales mientras el movimiento del mouse es muy rápido, de esta manera solo tiene acceso a la geodatabase cuando cambia el área de indexación más pequeña del mouse).
Estoy tratando de desarrollar una herramienta como "Herramienta de croquis y" Herramienta de edición "para una fuente de datos distinta de la fuente de datos de ArcObject y no quiero configurar una caché paralela a ArcMap. Si es posible, quiero usar los mismos datos que ArcMap almacena en la memoria para esta fuente de datos.
Ahora, ¿piensan que estos son supuestos verdaderos y si es así, hay alguna forma de acceder a los datos espaciales de ArcMap en su memoria?
fuente
Respuestas:
Básicamente, la extensión del Editor, cuando está en modo de edición, gestiona un conjunto de agentes de ajuste (vea ISnapEnvironment ). Cada uno de estos agentes de ajuste puede tener un caché de características asociado ( IFeatureSnapAgent.FeatureCache ) para que el ajuste se pueda realizar sin ejecutar una consulta espacial cada vez que mueva el cursor del mouse. Por lo tanto, no hay una única memoria caché de características, pero generalmente hay más de ellas dependiendo de la cantidad de capas editables y la cantidad de agentes de ajuste activados.
También puede usar la clase FeatureCache por separado, sin la necesidad de trabajar con el Editor.
fuente
Si ha creado una memoria caché con ISpatialCacheManager3 , IFeatureClass.GetFeature debería funcionar más rápido ...
fuente