Expressões Qgis github

170 views
Skip to first unread message

Luciano

unread,
Feb 10, 2020, 10:47:36 AM2/10/20
to qgisbrasil
Alguem sabe onde no github tem o codigo das expressoes do Qgis da calculadora de campo? To precisando editar a função distance, mas nao sei em que local tem no github. Mas se alguem souber como que ela é implementada la, qual o código dela e puder deixar aqui me salvaria muito.

Luciano

unread,
Feb 10, 2020, 10:59:32 AM2/10/20
to qgisbrasil
Estou querendo fazer essa modificacao pra ver se consigo implementar a minima distancia de manhattan entre um ponto e uma linha. Já vi codigos para achar a minima distancia de manhattan entre pontos, mas preciso que seja entre um ponto e uma linha e nao entendo quase nada de python, por isso estou com bastante dificuldade.

Kyle Felipe

unread,
Feb 10, 2020, 11:26:09 AM2/10/20
to qgisbrasil

Kyle Felipe

unread,
Feb 10, 2020, 11:49:23 AM2/10/20
to qgisbrasil


Em segunda-feira, 10 de fevereiro de 2020 12:47:36 UTC-3, Luciano escreveu:

Luciano

unread,
Feb 10, 2020, 12:08:08 PM2/10/20
to qgisbrasil
Olhei la mas nao sei nem por onde comecar pra poder adaptar pra achar a minima distancia de manhattan entre um ponto e uma linha. Isso ta sendo uma grande dor de cabeça pra mim. Na verdade não sei nem se tem uma forma de adaptar o que ja tem, pois nao tenho conhecimento nenhum em python, achei que se eu visse como é pra achar a minima distancia entre um ponto e uma linha da forma q eh calculada originalmente do qgis, talvez conseguiria mudar para o jeito que quero. 

yjmenezes

unread,
Feb 10, 2020, 2:39:01 PM2/10/20
to qgisbrasil
@Luciano,

Pode explodir a linha e transformar em POINT e depois calcular a distancia Manhattan do ponto origem aos pontos da linha explodida.
Tera de implementar a funcao no QGIS, pelo jeito nao existe plugin.
Se tiver acesso a um servidor PostgreSQL+PostGIS, implementa em umas poucas linhas SQL,

Pode dizer qual eh a aplicacao que pretende com a distanciaManhattan ?

[]s
julio

Luciano

unread,
Feb 10, 2020, 2:44:03 PM2/10/20
to qgisbrasil
Então, eu não posso explodir a linha e calcular a distância pra cada ponto dela como vc disse pq a menor distância de manhattan tem q ser entre o ponto e qualquer segmento da linha, não necessariamente um vértice dela. É para fazer uma análise de acurácia posicional com feições lineares por meio de diferentes distâncias.. Aí precisava implementar a mínima distância de manhattan de um ponto pra qualquer segmento da linha

yjmenezes

unread,
Feb 10, 2020, 3:04:26 PM2/10/20
to qgisbrasil
@Luciano.

1- qual sua precisao ?
2- pode segmentar a linha e depois explodir;
exemplo: LINESTRING(1 1, 5 5, 9 9) segmentada em pontos distantes raiz de 2:
#
SELECT st_astext(ST_Segmentize('LINESTRING(1 1, 5 5, 9 9)'::geometry,  sqrt(2)));
#
resulta:
LINESTRING(1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9)

Luciano

unread,
Feb 10, 2020, 3:09:29 PM2/10/20
to qgisbrasil
Tem q ser o mais preciso possível, e na verdade eu não posso segmenta-lá em parte nenhuma, por isso minha dificuldade em saber como obter essa mínima distância de manhattan entre um ponto e um segmento da linha

yjmenezes

unread,
Feb 10, 2020, 3:32:28 PM2/10/20
to qgisbrasil
@Luciano,

Faz um desenho do que voce esta querendo.  Esta dificil de entender seu problema.

Kyle Felipe

unread,
Feb 10, 2020, 3:33:33 PM2/10/20
to qgisbrasil
Então.. para fazer isso, tem de aprender a programar e montar um processo para o qgis
E também estudar como se fazem os cálculos para encontrar o ponto mais próximo em uma linha..
Ou seja, cair matando em geometria (sim a matéria da matemática) e nessa forma vc vai aplicar a fórmula de manhattan...

Kyle Felipe

unread,
Feb 10, 2020, 3:36:38 PM2/10/20
to qgisbrasil
@Luciano, olha esse vídeo que eu encontrei no youtube..
https://www.youtube.com/watch?v=KWYc0IavUP8


Em segunda-feira, 10 de fevereiro de 2020 12:47:36 UTC-3, Luciano escreveu:

Kyle Felipe

unread,
Feb 10, 2020, 3:40:43 PM2/10/20
to qgisbrasil
@Julio, na calculadora do qgis tem uma expresso chamada distance(), essa expressao calcula a distancia entre um ponto e o ponto (q pode estar em um segmento) mais proximo daquele ponto.. ele pega essa menor distancia, o problema e que , o algoritimo do qgis utiliza distancia euclidiana para isso... ele quer fazer o mesmo, s que no lugar da euclidiana, utilizar a distancia de manhattan....
seria interessante ter um processo no qgis onde pudessemos utilizar uma formula diferente de distancia para fazer os calculos... ou ate mesmo pudessemos criar uma que nao tenha na lista para utilizar como calculo de distancia....

Luciano

unread,
Feb 10, 2020, 5:03:56 PM2/10/20
to qgisbrasil
Isso mesmo Kyle, se desse pra modificar o distance do qgis pra distancia de manhattan seria perfeito pra mim e resolveria meu problema.

Manoel Guedes

unread,
Feb 10, 2020, 5:32:37 PM2/10/20
to qgisbrasil
No QGIS existe a opção de criar sua própria "fórmula" e usar ela na calculadora, o problema é escrever...

http://hfcqgis.opendatasicilia.it/it/latest/gr_funzioni/custom/index.html

Luciano

unread,
Feb 10, 2020, 5:53:44 PM2/10/20
to qgisbrasil
Sim, o problema tá exatamente em como será essa fórmula considerando a distância de manhattan de um ponto pro segmento da linha.

Luciano

unread,
Feb 10, 2020, 6:21:14 PM2/10/20
to qgisbrasil
Por acaso alguém sabe como eh a implementação do distance no qgis (calculadora de campo), como eh o código dele já q ele considera a distância euclidiana?

Kyle Felipe

unread,
Feb 12, 2020, 2:03:19 PM2/12/20
to qgisbrasil

yjmenezes

unread,
Feb 12, 2020, 4:43:51 PM2/12/20
to qgisbrasil
@Kyle,

Veja a implementacao PostGIS.
Segmentei em 0.50m, poderia segmentar em 0.01m
Veja que os pontos Euclides e Manhattan nao sao coincidentes, como eu havia dito no Whats.

Pode usar qq DB espacial que tiver para testar.

jmenezes@gnu000:/tmp$ bash dmanhattan.sh  | psql ibge | unix2dos > reporte.txt && zip manhattan reporte.txt dmanhattan.sh

[]s
julio
manhattan.zip

Luciano

unread,
Feb 13, 2020, 7:00:18 AM2/13/20
to qgisbrasil
Um dos meus problemas também, é que essas linhas que eu vou utilizar ela é formada por diversos segmentos e representa partes de estradas, ruas, hidrografia. E me foi passado que eu nao poderia segmentá-la pq se não seria uma avaliacao da acuracia posicional entre feiçoes pontuais, mas a avaliação é com feição linear, então não posso segmentá-la. O distance do qgis ele calcula a menor distancia euclidiana, que pode ser entre 2 pontos, ou ponto e linha, por isso que pensei que se soubesse como é a implementação la, talvez desse pra modificar.

Luciano

unread,
Feb 13, 2020, 7:01:59 AM2/13/20
to qgisbrasil
Se a minha linha fosse reta, talvez daria pra utilizar algum metodo matematico de distancia entre ponto e linha, mas dificilmente ela vai ser uma reta.

yjmenezes

unread,
Feb 13, 2020, 8:05:21 AM2/13/20
to qgisbrasil
@Luciano

1- voce leu, entendeu  e interpretou  a saida PostGIS que gerei ?  Para o Postgis, tanto faz ser uma linestring composto de 2 pontos ou uma linestring sinuosa descrevendo um rio.
Eu estou propondo PostGIS pq creio que consiga  chegar em resultados satisfatorios de forma rapida.
Um segmento A->B, segmentado de 18 metros, em 0.001m  gera cerca de 18000 pontos e processa em 0.6 segundos no PostGIS, para gerar a DistanciaManhattan minima.
Nao creio que seus dados tenha precisao de 1cm, ja que sao rios e ruas.

2-  eh possivel implementar em Python a chamada ao PostGIS dentro do QGIS, se necessario;

3- coloque, para mim, claramente seus objetvos e se possivel, disponibilize um conjunto de dados, pois ate agora nao entendi. E esta "thread" esta entrando em "loop".

[]s
julio

Luciano

unread,
Feb 13, 2020, 8:12:53 AM2/13/20
to qgisbrasil
Vou separar os dados e escrever claramente os objetivos pra ficar mais fácil de entender e mando aqui até hoje a tarde.

Luciano

unread,
Feb 13, 2020, 9:05:32 AM2/13/20
to qgisbrasil
Já consegui montar pra mandar agora. Caso não entenda algo do que escrevi pode me perguntar. Acho que agora assim vai ficar mais fácil pra entender


Em quinta-feira, 13 de fevereiro de 2020 10:05:21 UTC-3, yjmenezes escreveu:
dados.zip

yjmenezes

unread,
Feb 13, 2020, 11:57:41 AM2/13/20
to qgisbrasil
@Luciano,

Agora ficou mais claro o seu problema.
Vou ver seus dados e reporto o que pode ser feito no PostGIS.

[]s
julio

Luciano

unread,
Feb 13, 2020, 12:00:42 PM2/13/20
to qgisbrasil
Ok, eu agradeço, mas se tiver como ser em python pra usar na calculadora de campo me ajudaria bastante. Obrigado!

yjmenezes

unread,
Feb 14, 2020, 5:18:29 AM2/14/20
to qgisbrasil
@Luciano,

Joguei seus dados no PostGIS, segue script shell UNIX para curiosos de plantao.

1- existe uma feicao GPS que eh composta de 4 linhas, sendo uma delas em sentido oposto as demais. Feicoes linha GPS 17 e Ikonos 14 linhas,
2- a direcao das vetorizacoes Ikonos vs GPS nao coincide. isso nao eh um problema, mas acho que seria interessante padronizar a vetorizacao, digamos, de montante para jusante.
3- gerei um TXT separado por ";", descarte espacos para carregar no QGIS.  Sao os pontos de inicio da vetorizacao.
4- A distancia Manhattan (soma dos catetos) sera sempre maior ou igual a Euclidiana (hipotenusa), coinsidem se linha horizontal ou vertical.

Neste final de semana, vou reservar um tempinho e gerar as distancias Manhattan via PostGIS.
Eu, por usar UNIX, acabo resolvendo 99% dos problemas na linha de comandos, usando as ferramentas nativas UNIX.
Daria para implementar em Python, eu, preguicoso,  acabo resolvendo via shell script e fecho o problema.

[]s
julio
dmanhattan_rev0.zip

Luciano

unread,
Feb 14, 2020, 5:52:12 AM2/14/20
to qgisbrasil
Ok, vou dar uma olhada depois e fico no aguardo então. Obrigado

yjmenezes

unread,
Feb 16, 2020, 7:39:45 PM2/16/20
to qgisbrasil
@Luciano,


O pixel IKONOS eh de  82cm ?
---
Seguem 3 relatorios considerando fracao de pixel com 41cm, 20cm e 10cm para aproximacao, ( calculo numerico ),  da distancia de Manhattan. dm = abs(xref - xtest) + abs(yref - ytest);
A distancia media entre pontos vetorizados eh da ordem de 7m.

Os tempos de processamento PostGIS para as 14 feicoes:
40cm= 1min 10 seg
20cm= 2min 16 seg
10cm= 4min 41seg

[]s
julio
relatorio_manhattan_3resolucoes.zip

yjmenezes

unread,
Feb 16, 2020, 8:41:05 PM2/16/20
to qgisbrasil
@Luciano,

Veja a consulta no QGIS, onde a diferenca entre AbsDist(Euclide - Manhattan) eh maior que um pixel, 82cm.
A consulta SQL gera uma camada (layer)

[]s
julio
manhattan_gt_82cm_2020-02-16.png

Luciano

unread,
Feb 17, 2020, 7:16:31 AM2/17/20
to qgisbrasil
As imagens ikonos multiespectrais (resolução espacial de 4 metros) e a imagem pancromática
(resolução espacial de 1 metro) foram fusionadas.

Luciano

unread,
Feb 17, 2020, 9:59:30 AM2/17/20
to qgisbrasil
Teria como vc me passar essa implementacao em python? Pq n sei absolutamente nada de python e precisava q fosse nessa linguagem, e não tenho tempo pra poder aprender e fazer a aplicação. Se puder vai me salvar demais, já estou ficando louco com esse negocio


Em domingo, 16 de fevereiro de 2020 22:41:05 UTC-3, yjmenezes escreveu:

yjmenezes

unread,
Feb 27, 2020, 9:02:59 AM2/27/20
to qgisbrasil
@Luciano,

Como ficou, evoluiu em seu trabalho ?

Implementar a solucao 100% em Python seria inadequado ou extremamente trabalhosa. Seu problema eh facilmente solucionado usando Banco de Dados Espacial.
O que voce pode fazer eh a interface em Python, se for o caso, fazendo as chamadas ao gerenciador de DB-espacial.

Luciano

unread,
Feb 28, 2020, 8:26:20 AM2/28/20
to qgisbrasil
Evoluiu não,e concordo com vc que implementar em python daria muito trabalho,já pesquisei tudo que podia e realmente é inviável, e essa interface em python com banco de dados espacial também não sei como fazer isso.

yjmenezes

unread,
Feb 28, 2020, 9:04:28 AM2/28/20
to qgisbrasil
@Luciano,

A conexao DB com Python,  tem um exemplo aqui:


[]s
julio

Luciano

unread,
Feb 28, 2020, 9:07:33 AM2/28/20
to qgisbrasil
Ok, obrigado!
Reply all
Reply to author
Forward
0 new messages