Archive julho 2017

Case Finotti Agrimensura

A Finotti Agrimensura é uma empresa com sede em Uberlândia – MG e atua nos segmentos de agrimensura e meio ambiente.

Sua área de atuação é bastante dinâmica, contando com diversos colaboradores e centenas de clientes, de todos os portes. A empresa está na estrada há bastante tempo e possui um histórico impecável de serviços realizados.

Com esta enorme gama de clientes e serviços prestados, existe uma dificuldade natural em manter todos os dados organizados – ainda mais com um acervo tão significativo.

A Finotti, procurou o Geoadmin para organizar e garantir a segurança de todos os dados de seus clientes

Neste case de sucesso, faremos uma breve entrevista com Diogo Finotti, sócio da Finotti Agrimensura, principal agente transformador no uso de um sistema inteligente para a organização dos serviços prestados, segurança da informação e facilitação da comunicação entre os diversos membros da equipe.

Geoadmin: Diogo, quais eram as principais dificuldades enfrentadas pela sua equipe, antes do uso do Geoadmin?

Diogo Finotti: Entre as principais dificuldades que encontrávamos aqui na Finotti era em relação a organização das informações. Como coletamos muita informação em campo e diversos documentos de natureza alfanumérica, tínhamos muitos arquivos organizados sem os metadados apropriados.

Com o Geoadmin, toda a informação
contextual está disponível, acelerando muito o processo de manutenção dos dados e armazenamento de documentos sensíveis.

G: Como o Geoadmin te ajudou na organização dos seus dados referentes a prestação de serviços ambientais e de agrimensura?

DF: A principal vantagem do Geoadmin foi disponibilizar todas as informações que possuímos em um mapa, com fácil consulta para toda a equipe. Não é mais
necessário parar um membro da equipe para, por exemplo, descobrir a versão mais atual de um arquivo para enviar para um cliente.

Outro ganho muito legal foi em termos de segurança. Todos os nossos dados aqui no escritório possuem backup, mas com o Geoadmin posso
me concentrar em executar meus trabalhos da melhor maneira, sem precisar gastar tempo e dinheiro com o que não é meu negócio chave.

G: Qual é a maior vantagem em usar um sistema totalmente online?

DF: Facilidade de comunicação entre a equipe e liberdade para me concentrar nos meus clientes.

G: Atualmente, quantos usuários usam o sistema na sua organização? O uso do sistema facilitou a comunicação entre as equipes?

DF: Atualmente são quatro usuários utilizando o Geoadmin. O uso do sistema facilitou nossa comunicação de uma forma muito bacana.

Nossas equipes de campo podem realizar upload dos dados coletados em campo, onde a equipe de escritório já inicia o processamento
dos mesmos, antes de que eles cheguem aqui.

Outra funcionalidade interessante é que com as tarefas e serviços no sistema, estamos sempre em dia, antevendo as necessidades
dos nossos clientes.


Apesar de “puxarmos” uma sardinha para nosso lado, ficamos muito satisfeitos de ver que nosso trabalho tem ajudado as pequenas e médias empresas a melhorarem a gestão da informação e dos processos em seus ambientes de trabalho.

A melhoria destes processos significa, basicamente, uma redução de custos e maior efetividade na hora de conquistar novos clientes.

Faça como a Finotti Agrimensura, registre-se no Geoadmin e venha agilizar a gestão do seus trabalhos em campo :D.

Equipe Geoadmin

Penny, uma IA para prever riqueza

A Digital Globe, gigante do sensoriamento remoto anda inovando.

Apenas neste ano, vimos surgir sua própia Maps API, que permite ao desenvolvedor a criar aplicativos usando imagens diretamente da Digital Globe.

Logo depois, surgiu o [GBDX] uma plataforma em nuvem para execução de algoritmos a serem aplicados a enorme biblioteca de imagens da empresa.

Agora, mais uma, usando esse conjunto citado acima. O lançamento é do aplicativo Penny.

O Penny é uma IA (inteligência artificial) criada para detectar e prever riqueza. Mas como isto é possível?

Analisando e cruzando dados de satélite com dados do censo americano, é possível treinar uma rede neural ou qualquer algoritmo de machine learning que se queira para estimar a probabilidade de uma área ser rica ou pobre, baseado nos dados do entorno.

Os passos básicos são:

  1. Adquirir dados do Censo;
  2. Comparação entre os dados vetoriais com os dados de imagens;
  3. Treinamento de uma rede neural, cruzando feições com as informações do censo sobre renda;

Exemplo (e um chute):

  1. No bairro X existem dois shoppings e a renda é mais alta;
  2. No bairro Y existem mais estacionamentos e a renda é média;
  3. No bairro Z existem mais parques e a renda é baixa;
  4. No bairro X1 existem mais árvores e a renda é mais alta;

A partir de algumas premissas e identificação de feições chave, foi possível cruzar e prever quais tipos de construções/pólos aumentam o valor da renda em determinado lugar.

Isto não quer dizer que as pessoas ficam mais ricas, apenas que pessoas mais ricas frequentam aquele lugar.

Claro que isto é um experimento. A Digital Globe ainda permite que você altere o mapa, colocando partes de outras imagens no local onde você está. Por exemplo, é possível “gentrificar” ou “aumentar o valor da renda” de uma área, colocando mais árvores ou prédios de luxo, como o Empire State Building.

É uma aplicação interessante que mostra para nós como vai ser o futuro do sensoriamento remoto.

GeoSampa é oficializado como base oficial

Boas notícias sobre o GeoSampa, um dos projetos desenvolvidos e apoiados pela SIGMA Geosistemas.

O GeoSampa é um portal de informações geográficas, disponibilizado pela PRODAM e pela SMUL (Secretaria Municipal de Urbanismo e Licenciamento), contendo mais de 180 camadas de informações geográficas.

A prefeitura de São Paulo, oficializou a plataforma como base de dados oficial do município, aumentando ainda mais a relevância da mesma, através do decreto 57.770, editado pelo prefeito João Dória.

A plataforma já era bastante utilizada pela população e pelos colaboradores municipais, agora tem o status de base de dados oficial, possuindo mais de cem mil acessos mensais únicos.

Este é um passo importante para a correta institucionalização do sistema, permitindo uma sinergia entre os diversos interessados nos dados existentes e publicados através da mesma.

Entre os artigos do decreto, um me chama bastante atenção, oficializando o GeoSampa como plataforma integradora:

Art. 6º Os sistemas de dados e informações municipais de qualquer natureza deverão ser estruturados pelos órgãos responsáveis de forma a permitir sua interoperabilidade e integração com os demais sistemas, facilitando seu escalonamento, reuso e manutenção, e deverão:

I – garantir a simplificação do acesso, de forma a possibilitar à Administração Municipal o uso eficiente de suas informações no atendimento às demandas internas e externas;

II – dar transparência às ações de governo, de forma a permitir o acesso público a todas as informações que não sejam de uso restrito, em conformidade com a legislação pertinente, em especial o Decreto nº 53.623, de 12 de dezembro de 2012;

III – garantir que não haja a sobreposição de ações, evitando o dispêndio desnecessário de recursos e a duplicidade de dados da Administração Municipal.

Parágrafo único. O mecanismo de integração deverá garantir ao usuário acesso à informação atualizada por meio do sincronismo entre os sistemas e as bases externas com periodicidade definida e da atualização da base geoespacial.

O artigo 6° é uma comprovação de nossa filosofia de trabalho: o geoprocessamento pode e deve ser usado de forma inteligente, de maneira aumentar a eficiência do planejamento e redução de custos para a administração pública.

A SIGMA Geosistemas ajuda e ajudou na construção desta plataforma, utilizando apenas tecnologias livres. Dentre os serviços executados, desenvolvemos todas as ferramentas de análise, disponíveis por enquanto na intranet – como filtros, pesquisas geoespaciais, geração de gráficos e agrupamentos.

Em tempo, gostaria de parabenizar a toda equipe envolvida no GeoSampa e ao prefeito, por uma decisão acertada.

Ainda teremos muitas novidades sobre esta plataforma. Fique ligado!

Django Topology

Olá pessoal!

Aqui na SIGMA sempre estamos desenvolvendo ferramentas úteis para nós e que talvez também sejam úteis para outras pessoas.

Nossa ideia principal, é contribuir um pouco com esse enorme ecossistema Python/Django existente. Como já disseram, estamos sobre os ombros de gigantes.

Bem, desenvolvemos o Django Topology com o objetivo de simplificar a validação de dados geométricos/geográficos que encontramos em nosso dia a dia.

É muito comum, por exemplo, ter de validar a entrada de um polígono e precisamos garantir que ele esteja dentro de outro polígono. Ou garantir que este polígono específico não esteja sobrepondo outro polígono de uma mesma classe.

Para isso desenvolvemos o Django Topology. Através dele você consegue configurar suas validações dentro do banco de dados e executá-las de forma simples.

O fluxo é simples e o pacote já conta com três validações:

  • must be contained – garante que o modelo A deve estar contido no modelo B;
  • must not overlap – garante que o modelo A não pode sobrepor nenhum outro registro em A;
  • must not overlap with – garante que o modelo A não pode sobrepor o modelo B;

O pacote é facilmente extensível e você desenvolver suas próprias validações topológicas.

Um exemplo simples:

        rule = Rule(
            name='regra de validação 1',
            description='A deve estar contido em B',
            message='deve estar contido',
            method='topology.rules.must_be_contained'
        )
        rule.save()
        topology_rule = TopologyRule(
            content_type_a=ContentType.objects.get(app_label='seuapp', model='item'),
            content_type_b=ContentType.objects.get(app_label='seuapp', model='container'),
            geom_field_b='geom',
            rule=rule
        )
        topology_rule.save()

Até aqui, definimos nossa regra topológica, de que A (qualquer instância do modelo Item) deve estar contida em B (Container).

Veja como realizar a validação:

        item_a = Item(geom=unit_polygon(Point(x=0.0, y=0.0, srid=4326)))
        item_a.save()
        container = Container(geom=unit_polygon(Point(x=0.0, y=0.0, srid=4326), size=3))
        container.save()

        errors = topology_rule.validate(item_a)
        len(errors)
>>> 3

No exemplo acima, calculamos os erros diretamente pela regra topológica (TopologyRule) e não foi encontrado nenhum erro.

Os erros gerados pelo TopologyRule não são persistidos no banco de dados, ficando a cargo do desenvolvedor a determinar o melhor momento para tal. As vezes nem será necessário, como por exemplo, em uma validação de formulário Django.

Também desenvolvemos um análogo ao TopologyChecker do QGIS e ele tem o mesmo nome. Sua função é executar todas as validações associadas a um determinado modelo, de uma vez, e persisti-las (ou não).

Veja como usá-lo:

        # definindo as regras
        rule1 = Rule(
            name='A não deve sobrepor A',
            description='A não deve sobrepor A',
            message='sobrepõe',
            method='topology.rules.must_not_overlap'
        )
        rule1.save()
        rule2 = Rule(
            name='A não deve sobrepor B',
            description='A não deve sobrepor B',
            message='sobrepõe',
            method='topology.rules.must_not_overlap_with'
        )
        rule2.save()
        topology_rule1 = TopologyRule(
            content_type_a=ContentType.objects.get(app_label='seuapp', model='item'),
            rule=rule1
        )
        topology_rule1.save()
        topology_rule2 = TopologyRule(
            content_type_a=ContentType.objects.get(app_label='seuapp', model='item'),
            content_type_b=ContentType.objects.get(app_label='seuapp', model='container'),
            geom_field_b='geom',
            rule=rule2
        )
        topology_rule2.save()

        item1 = Item(geom=unit_polygon(Point(x=0.0, y=0.0, srid=4326)))
        item1.save()
        item2 = Item(geom=unit_polygon(Point(x=0.0, y=0.0, srid=4326)))
        item2.save()
        container = Container(geom=unit_polygon(Point(x=0.0, y=0.0, srid=4326), size=2))
        container.save()

        # até aqui, criamos nossas regras e os registros de item e container

        topo_checker = TopologyChecker()

        errors = topo_checker.validate_all(Item)

O TopologyChecker retorna um dicionário, usando como chave o nome da validação executada e uma lista associada, com N erros detectados. No caso acima, o topologychecker encontrou 4 erros:

  • item 1 sobrepõe item 2;
  • item 2 sobrepõe item 1;
  • item 1 sobrepõe Container 1;
  • item 2 sobrepõe COntainer 1;

Estamos usando o Django Topology em produção no Geoadmin um produto que trabalha intensivamente com dados geográficos.

Você pode extender o mesmo com suas próprias validações. Basta criar um método com a seguinte assinatura:

def minha_validacao(rule, feature, **kwargs):
    # sua validacao aqui
    # deve retornar uma lista de TopologyError (sem salvar no banco)
    if feature.geom.intersects(outra_geometria):
        return [TopologyError()]

    return []

Com este método pronto, você só precisa criar uma Rule, apontando o atributo method para o caminmho qualificado da sua função:

rule = Rule(
    name='name'
    method='foo.bar.minha_validacao
)

Quer ajudar? Estamos aí, confere o repositório e bora lá.

Mágicas com UTM

A projeção UTM (Universal Transverse Mercator) é muito utilizada para todos os tipos de cartografia.

Ela nem sempre se aplica a todos os casos e deveria ser menos utilizada em algumas aplicações, mas com toda certeza é bastante comum no Brasil e no mundo.

Uma das características marcantes desta projeção, é que ela não é uma projeção única. São 60 zonas com parâmetros diferentes, para cada local do planeta, dividido a cada 6 graus de longitude.

Vou ensinar algumas mágicas utilizando princípios simples para se descobrir maiores informações, necessárias quando estamos trabalhando com essas zonas.

Zona UTM > Meridiano Central

O meridiano central de uma zona UTM é o local que possui a menor distorção da projeção.

Podemos calculá-lo, seguindo a fórmula:

MC = (6 * Z) - 183

Veja o exemplo:

MC = (22 * 6) - 183
MC = 132 - 183
MC = -51

Um outro exemplo, com a zona 30:

MC = (30 * 6) - 183
MC = 180 - 183
MC = -3

Para encontrar os limites de uma zona UTM, adicione 3 graus para o limite oeste e subtraia 3 graus para o limite leste.

MC = -51
Limite Leste = -51 - 3
Limite Leste = -54
Limite Oeste = -51 + 3
Limite Oeste = -48

Longitude > Meridiano Central

Este cálculo é importante: baseado no valor X (ou longitude), você consegue descobrir qual é o meridiano central da zona daquela coordenada.

# nota a divisão de longitude por 6 deve considerar apenas valores inteiros
MC = (6 * int(longitude/6)) + 3
MC = (6 * (-48/6)) + 3
MC = (6 * -8) + 3
MC = -45

Meridiano Central > Zona UTM

Com este cálculo, você informa o meridiano central e descobre qual zona UTM ele está inserido.

UTMZ = 30 - absoluto(int(MC/6))
UTMZ = 30 - absoluto(int(-45/6))
UTMZ = 30 - absoluto(int(-7.5))
UTMZ = 23

São três continhas fáceis de serem realizadas, que ajudam muito na hora de trabalhar com UTM.