dsgoficial/DsgTools

Ampliar casos de flags na Construção de Polígonos a partir de linha-centroide

jpesperidiao opened this issue · 4 comments

Subject of the issue (Assunto do problema)

Quando se utilizam linhas específicas como delimitadores, assume-se que estes são utilizados exclusivamente para este fim e, por isso, delimitadores não utilizados são indício de erros.

Assim, sugere-se separar as constraints de linha em mais um parâmetro: delimitadores. Estes, então comporiam os limites dos polígonos e que, caso fornecidos, devem ter todas as suas feições ser utilizadas na construção de polígonos.

Outra sugestão de melhoria de flags seria a explicitação de qual atributo (ou quais atributos) dos centroides teria causado o conflito, resultante em flags.

Sugestão do @dinizime.

USO DE CASO 01 - Delimitadores não utilizados

Descrição:

Quando se utilizam linhas específicas como delimitadores, assume-se que estes são utilizados exclusivamente para este fim e, por isso, delimitadores não utilizados são indício de erros.

Pré-condição:

Utilizar-se de linhas específicas como delimitadores.

Fluxo atual:

  • Mergear as camadas de polígono e transformá-las em linhas.
  • Mergear os constraintLine com as linhas originadas dos polígonos.
  • Explodir e intersectar todas as linhas.
  • Deletar linhas duplicadas.
  • Gerar polígonos a partir destas linhas.
  • Filtrar espacialmente os polígonos com os centróides e copiar seus atributos.
  • Verificar casos de polígonos que contém mais de um centróide com atributos conflitantes.
  • Retornar os polígonos construídos e as flags geradas.

Fluxo proposto:

  • Possibilitar a escolha de múltiplas camadas de centróides.
  • Mergear as camadas de polígono e transformá-las em linhas.
  • Mergear os constraintLine com as linhas originadas dos polígonos.
  • Explodir e intersectar todas as linhas.
  • Deletar linhas duplicadas.
  • Gerar polígonos a partir destas linhas.
  • Filtrar as linhas da camada de delimitador que não foram utilizadas na construção dos polígonos.
  • Filtrar espacialmente os polígonos com os centróides e copiar seus atributos.
  • Verificar casos de polígonos que contém mais de um centróide com atributos conflitantes.
  • Retornar os polígonos construídos e as flags tipo polígono geradas.
  • Retornar as linhas não utilizadas na construção dos polígonos como flags.

Regras de validação:

  • Após construídos os polígonos filtrar através da matriz DE9IM as linhas que não foram utilizadas e retornar como flags.

USO DE CASO 02 - Melhoria dos textos informativos das flags

Descrição:

Sugestão de melhoria de flags seria a explicitação de qual atributo (ou quais atributos) dos centroides teria causado o conflito, resultante em flags.

Pré-condição:

Existência de flags.

Fluxo atual:

....  
  • Filtrar espacialmente os polígonos com os centróides e copiar seus atributos.
  • Verificar casos de polígonos que não contém nenhum centróide.
  • Verificar casos de polígonos que contém mais de um centróide com atributos conflitantes.
  • Retornar os polígonos construídos e as flags geradas.

Fluxo proposto:

....  
  • Filtrar espacialmente os polígonos com os centróides e copiar seus atributos.
  • Verificar casos de polígonos que não contém nenhum centróide.
  • Verificar casos de polígonos que contém mais de um centróide com atributos conflitantes.
  • Explicitar qual(is) atributo(s) está(ão) em conflito e retornar como texto da flag.
  • Retornar os polígonos construídos e as flags geradas.

Regras de validação:

  • Verificar a igualdade dos valores dos atributos dos centróides em conflito.

Explicitar ID dos centróides conflitantes para fácil identificação pelo usuário.

Não vejo como isso irá facilitar a identificação do usuário, só vai deixar mais sujo o texto do flag. Se for fazer isso acho melhor criar um atributo a mais no flag (que provavelmente o usuário irá ignorar)

Explicitar ID dos centróides conflitantes para fácil identificação pelo usuário.

Não vejo como isso irá facilitar a identificação do usuário, só vai deixar mais sujo o texto do flag. Se for fazer isso acho melhor criar um atributo a mais no flag (que provavelmente o usuário irá ignorar)

@dinizime a idéia é montar um texto de flag assim: "Polígono com centróides de Id {01} e {02} com valores conflitantes no atributo nome do atributo."
Da maneira que o método está construído hj o usuário é obrigado a marcar o pk field da camada para que não retorne como conflito de atributo e quando o usuário o faz, dentro do método que gera a flag não se tem acesso ao Id tendo que explicitá-lo.
O que o sr acha? Faz sentido?

Aproveitando o ensejo, faz sentido pro sr:

  • Rodar o algoritmo somente em feições selecionadas?
  • Possibilitar a escolha de mais de uma camada de centróide, ao invés de uma por vez?
  • Retornar os centróides não utilizados (ou conflitantes) como flag ao invés do polígono?

@dinizime a idéia é montar um texto de flag assim: "Polígono com centróides de Id {01} e {02} com valores conflitantes no atributo nome do atributo."
Da maneira que o método está construído hj o usuário é obrigado a marcar o pk field da camada para que não retorne como conflito de atributo e quando o usuário o faz, dentro do método que gera a flag não se tem acesso ao Id tendo que explicitá-lo.
O que o sr acha? Faz sentido?

Lembrar que utilizamos o Inspetor de Feições, e é importante ter um texto razoavelmente padrão para poder filtrar os casos. Se o texto tiver o ID atrapalha isso.

Além disso o fluxo otimizado para corrigir flags de centroide é:

  1. Botar o flag no inspetor de feições com filtro por tipo
  2. Resolver os flags de área sem centroide
  3. Resolver os flags de área com mais de um centroide distinto
    3.a) Abrir a tabela de centroide com somente as feições seleciondas
    3.b) Abrir o Select by Location e selecionar os centroides que intersectam a feição selecionada do flag
    3.c) Verificar na tabela de atributo qual flag tem o valor destoante.
  • Rodar o algoritmo somente em feições selecionadas?

Não é necessário

  • Possibilitar a escolha de mais de uma camada de centróide, ao invés de uma por vez?

Sim, pode modificar para aceitar multiplos.

  • Retornar os centróides não utilizados (ou conflitantes) como flag ao invés do polígono?

O polígono é melhor como o fluxo que expliquei anteriormente.