Parece que o ArcMap mantém um cache para cada camada que contém dados de recursos e toda vez que deseja atualizar a camada ou aplicar uma alteração, usa esse cache. Como descobri, quando o ArcMap deseja desenhar uma camada do zero, envia essa consulta ao geodatabase:
selecione ObjectId, Shape em "featureClassName" [where "layer definition query expression"]
No modo de edição, ao usar o snap, parece que os dados dos recursos desse cache são usados para determinar o estado do snap durante o movimento do mouse. Não sei como o ArcMap armazena dados espaciais nesse cache, no formato de forma ESRI ou como WKB, mas preciso recuperar esses dados de recursos.
Existe alguma maneira de recuperar dados de recurso de uma camada usando seu cache (cache de camada) em vez de usar o IFeatureClass::get_Feature
método? ..... Talvez minha ideia não esteja correta e uma camada não tenha nenhum cache (não me refiro ao cache, que é opcional para camadas e aumenta a velocidade do desenho da camada), mas tenho quase certeza de dados espaciais de camadas (mapa) é armazenado na memória do ArcMap em algum lugar e o ArcMap o utiliza para sua operação, como encaixe durante a operação de edição. Existe alguma maneira de acessar essa parte dos dados do ArcMap (se realmente existir)?
Não quero configurar um cache, quero recuperar dados ArcMap cache.ISpatialCacheManager
não oferece nenhum método para obter dados específicos dele. Deixe-me discutir o que quero dizer com mais detalhes.
Quando eu coloco esse código dentro do meu programa
//C#
IFeature ipF=ipMyFeatureClassObject.GetFeature(10);
O ArcMap emite um comando select para o geodatabase, vamos supor:
select * from MyFeatureClassTableName Where ObjectId=10
e devolve um registro de dados.
No modo de edição, o ArcMap não pode usar esse método para obter dados espaciais e calcular o estado de snap para recursos no mapa, devido ao tempo que esse método possui e o cálculo de snap precisa de uma recuperação de dados em alta velocidade, também porque o mouse pode se mover em qualquer lugar do map and snapping está ativado para qualquer zoom, todas essas testemunhas mostram que os dados espaciais devem estar disponíveis em algum lugar da memória e estou procurando um método para acessá-los.
Se todos esses consumos não se concretizarem, deve haver um método perfeito que o ArcMap use para recuperar dados espaciais do geodatabase em tempo real (por exemplo, indexação espacial de 4 ou 6 níveis com base na extensão do mapa e use a posição do mouse para recuperar apenas parte de dados espaciais enquanto o mouse se move muito rápido, dessa maneira só tem acesso ao banco de dados geográfico quando a menor área de indexação do mouse é alterada).
Estou lidando com o desenvolvimento de uma ferramenta como "Sketch Tool e" Edit tool "para uma fonte de dados que não seja a fonte de dados ArcObject e não quero configurar um cache paralelo ao ArcMap. Se possível, quero usar os mesmos dados que o ArcMap armazena na memória essa fonte de dados.
Agora, vocês acham que essas são suposições verdadeiras e se sim, existe alguma maneira de acessar os dados espaciais do ArcMap em sua memória?
fonte
Respostas:
Basicamente, a extensão do Editor, no modo de edição, gerencia um conjunto de agentes de snap (consulte ISnapEnvironment ). Cada um desses agentes de snap pode ter um cache de recurso associado ( IFeatureSnapAgent.FeatureCache ) para que o snap possa ser feito sem executar uma consulta espacial toda vez que você mover o cursor do mouse. Portanto, não há um único cache de recurso, mas normalmente mais deles, dependendo do número de camadas editáveis e do número de agentes de snap ativados.
Você também pode usar a classe FeatureCache separadamente, sem a necessidade de trabalhar com o Editor.
fonte
Se você criou um cache usando ISpatialCacheManager3 , o IFeatureClass.GetFeature deve funcionar mais rápido ...
fonte