Usando consultas Label classes vs Definition - qual é o melhor desempenho?


11

Qual seria o melhor desempenho para trabalhar no ArcMap com conjuntos de dados muito grandes armazenados em um geodatabase do ArcSDE? Várias classes de rótulo usando consultas SQL complexas para rotular recursos específicos ou várias cópias da mesma camada usando as mesmas consultas SQL complexas definidas como uma consulta de definição para cada camada?


2
Eu acho que "várias cópias da mesma camada, cada uma com sua própria consulta de definição e rotulagem simples baseada em campo" serão as favoritas, mas não tenho métricas para fazer backup desse instinto, então acho que essa é uma ótima pergunta. Uma classe de recurso de geodatabase de arquivo com um milhão de polígonos se qualificaria como um conjunto de dados muito grande em sua linguagem?
PolyGeo

Respostas:


5

Supondo que as consultas SQL nas classes de rótulo sejam as mesmas das camadas divididas, a abordagem de camada única com várias classes de rótulo será mais rápida. Por quê?:

A rotulagem no ArcMap executará uma consulta para o desenho da camada e, em seguida, uma consulta para cada classe de etiqueta. Portanto, uma camada com 4 classes de rótulo consultará uma vez (1 consulta) todos os recursos selecionados e, em seguida, mais 4 vezes no total (uma para cada classe de rótulo ou mais 4 consultas) = ​​5 consultas totais

Se você dividir as camadas, terá 1 consulta filtrada (consulta de definição) para cada camada (4 consultas) e a mesma consulta para cada classe de rótulo (mais 4 consultas) = ​​8 consultas no total

Em quase todos os casos, cinco consultas serão mais rápidas que oito devido a uma sobrecarga simples, embora isso dependa da fonte de dados.

Observe que, no ArcGIS Server, um cache é usado para rotular recursos e 1 camada com 4 classes de rótulo provavelmente será tratada através de uma consulta quando as classes de rótulo usarem SQL bastante padrão sem funções específicas do fornecedor.


2
Mas, com o cenário de consulta de definição, eu não criaria classes de rótulo. Eles seriam apenas rotulados com base em um único valor de campo. Ou estou lendo o terceiro parágrafo incorretamente?
Ianbroad # 29/14

As classes Label são usadas para rotular um subconjunto de recursos definidos por uma cláusula where SQL (exatamente o mesmo que uma consulta de definição) e possuem seu próprio símbolo de texto, expressão de rótulo e regras de posicionamento. Na minha descrição, não está claro como a mudança de classes para uma consulta de definição permite que você rotule apenas um único campo. Você está se referindo a expressões de rótulo complexas e não a consultas SQL complexas?
Craig Williams

1
Não, só quero dizer que, para ambos os cenários, nenhum dos dois usa uma expressão de rótulo. Ambos são rotulados usando um único campo.
Ianbroad #

4
Eu trabalho na equipe de rotulagem da Esri. Estou intimamente familiarizado com como isso funciona. A localização da chamada da consulta não afeta o desempenho, mas você deseja reduzir o total de consultas.
Craig Williams

1
Acho que entendi sua resposta agora, Craig, mas me pergunto se há alguma maneira de reformulá-la para facilitar a compreensão. Eu tive que ler algumas vezes para perceber que sua matemática provavelmente não está errada como eu e outros pensamos.
Jmpreiks

2

Fiz alguns testes muito simples usando alguns dados do NHD provenientes de uma conexão SDE e encontrei muito pouca diferença entre os dois métodos.

  1. 7 classes de etiqueta em uma única camada, também 7 simbologias separadas: 36 segundos
  2. 7 camadas separadas com consultas de definição, classe de rótulo único em cada uma sem consulta: 37 segundos

Algumas advertências:

  1. Meu teste foi muito simples, com rótulos simples e consultas simples; consultas complexas devem ser testadas, pois isso fazia parte da pergunta.
  2. Cerca de um terço do tempo total foi para desenhar a simbologia.
  3. Meu tempo estava com um cronômetro, então a margem de erro é bem grande.

+1 para seus testes. Gostaria de saber se faz diferença se conflitos de rótulo ocorrem ou não? Talvez você possa aumentar o tamanho da fonte para que muitos rótulos se sobreponham. Em seguida, desative a opção colocar etiquetas sobrepostas. Existe alguma diferença agora?
Jens

1
Na verdade, houve muitos conflitos de rótulo em meus testes, porque eu tive que mostrar uma grande extensão para obter um tempo de processamento realmente longo que eu pudesse medir facilmente.
Jmpreiks # 1/14

1
Não existe "nenhuma classe de etiqueta", pois sempre existe uma.
Craig Williams

Verdadeiro Craig, editei minha resposta para esclarecer.
Jmpreiks #

1

Eu acho que a consulta de definição seria mais rápida porque está no nível do objeto e não no nível de dados do atributo.

Você ainda teria que testar. No entanto, eu usaria consultas de definição e não rotular classes.


1
Sim, teste (e relate se puder). Eu também me inclino a consultas de definição, mas por razões de desempenho de usabilidade. As caixas de diálogo de expressão de rótulo são dolorosamente lentas e várias camadas de clique são mais profundas que as de consulta de definição. Eles também são mais fáceis de acessar em python.
224168

Eu não acho que isso se qualifique como uma resposta sem algum tipo de base técnica ou teste quantitativo. Isso pode enganar algumas pessoas. Teria sido melhor como um comentário para a pergunta original.
Jmpreiks #

Eu teria feito isso se tivesse a capacidade de comentar. Obrigado pelo voto negativo. Apenas tentando ajudar.
Geogeek #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.