Eu tenho pontos representando locais de amostra. Freqüentemente, várias amostras serão coletadas no mesmo local: vários pontos com o mesmo local, mas diferentes IDs de amostra e outros atributos. Gostaria de rotular todos os pontos que estão co-localizados com um único rótulo, com texto empilhado listando todos os IDs de amostra de todos os pontos nesse local.
Isso é possível no ArcGIS usando o mecanismo de identificação regular ou o Maplex? Sei que poderia solucionar isso criando uma nova camada com todos os IDs de amostra para cada local em um valor de atributo, mas gostaria de evitar a criação de novos dados apenas para rotular.
Basicamente, quero passar disso:
Para isso (para o ponto mais alto):
Sem fazer nenhuma edição manual dos rótulos.
Respostas:
Uma maneira de fazer isso é clonar a camada, usando consultas de definição e rotulando-as separadamente, usando a posição do rótulo somente no canto superior esquerdo da primeira camada e no canto inferior esquerdo do segundo.
Adicione o número inteiro do tipo THEFIELD à camada e preencha-o usando a expressão abaixo:
Chame por:
Crie uma cópia da camada na tabela de conteúdo, aplique a consulta de definição THEFIELD = 1.
Aplique a consulta de definição THEFIELD = 2 para a camada original.
Aplicar posicionamento de etiqueta fixa diferente
ATUALIZAÇÃO com base nos comentários da solução original:
Adicione o campo COORD e preencha-o usando
Resuma esse campo usando o primeiro e o último para o rótulo. Associe-se a esta tabela de volta ao original usando o campo COORD. Selecione registros nos quais o primeiro <> é último e concatena o primeiro e o último rótulo em um novo campo usando
Use Count_COORD e THEFIELD para definir 2 'camadas diferentes' e campos para rotulá-los:
Atualização # 2 inspirada na solução @Hornbydd:
ATUALIZAÇÃO novembro de 2016, espero que seja o último.
Abaixo da expressão testada em 2000 duplicatas, funciona como charme:
fonte
Abaixo está uma solução parcial.
Isso vai para a expressão do rótulo Advance. Não é muito eficiente, portanto, estou perguntando sobre o número de pontos no seu conjunto de dados. Portanto, para cada linha que é rotulada, cria dois dicionários em
d
que a chave é o XY e o valor é o texto ed2
qual é o objectID e o XY. Usando essa combinação de dicionários, é possível retornar um único rótulo, que é uma concatenação com caracteres de nova linha; no meu exemplo, está concatenando TARGET_FID. "sj" é o nome da camada no sumário.Por que essa é uma solução parcial é que isso é feito para todos os pontos, não consegui pensar em como você desativaria todos os outros pontos empilhados. É por isso que acho que a solução definitiva é um python que constrói uma nova camada de pontos únicos com um único rótulo construído a partir da pilha de pontos.
Abaixo está a saída de 3 pontos empilhados, como você pode ver, o rótulo é criado para cada ponto, pois todos existem no mesmo local.
fonte