Pelo que sei, no QGIS não se consegue fazer pesquisas cruzando mais que 2
layers/tabelas (plugin Spatial Query).
Tinha-me ocorrido que uma forma de ultrapassar isto seria, no PostGis,
colocar todas as tabelas que tenho numa só.
Não sei se isto que indico será uma boa prática e até se será possível...
Alguns problemas que imagino poderão existir:
- tabela com centenas de colunas
- vários campos geométricos na mesma tabela
- no QGIS não sei se é possível estabelecer relação 1 para n tendo apenas
uma tabela.
Era precisamente o que te iria sugerir. Usar o Postgis para fazer as consultas necessárias e depois mostrar o resultado no qgis.
Nenhuma das coisas que dissestes me parecem limitativas. Só tens de estruturar que colunas queres obter e que geometria pretendes representar no QGIS.
Podes juntar na mesma consulta várias tabelas e condições. O exemplo que deste anteriormente seria transcrito da seguinte forma:
SELECT f.*
FROM predios as f, freguesia as g, poligonos_nip as p
WHERE St_touches(f.geom,g.geom) and St_touches(f.geom,p.geom)
Que devolve todas os registos de prédios que tocam nas geometrias das tabela poligonos_nip e freguesia. (Nota que neste caso, deves provavelmente querer antes usar o ST_Intersec)
Era precisamente o que te iria sugerir. Usar o Postgis para fazer as
consultas necessárias e depois mostrar o resultado no qgis.
Nenhuma das coisas que dissestes me parecem limitativas. Só tens de
estruturar que colunas queres obter e que geometria pretendes representar
no QGIS.
Podes juntar na mesma consulta várias tabelas e condições. O exemplo que
deste anteriormente seria transcrito da seguinte forma:
SELECT f.*
FROM predios as f, freguesia as g, poligonos_nip as p
WHERE St_touches(f.geom,g.geom) and St_touches(f.geom,p.geom)
Que devolve todas os registos de prédios que tocam nas geometrias das
tabela poligonos_nip e freguesia. (Nota que neste caso, deves
provavelmente
querer antes usar o ST_Intersec)
Cumprimentos,
Alexandre Neto
2015-02-24 10:00 GMT+00:00 Pedro <
pedro.ferro@
>:
Voltando a isto para ver se estarei a pensar bem.
Pelo que sei, no QGIS não se consegue fazer pesquisas cruzando mais que 2
layers/tabelas (plugin Spatial Query).
Tinha-me ocorrido que uma forma de ultrapassar isto seria, no PostGis,
colocar todas as tabelas que tenho numa só.
Não sei se isto que indico será uma boa prática e até se será possível...
Alguns problemas que imagino poderão existir:
- tabela com centenas de colunas
- vários campos geométricos na mesma tabela
- no QGIS não sei se é possível estabelecer relação 1 para n tendo apenas
uma tabela.
Agradeço a vossa opinião.
abraço,
Pedro
Obrigado Alexandre.
O que eu gostava mesmo era fazer isso (queries/ pesquisas entre vários
layers) dentro do QGIS.
Ou seja, dar ao utilizador final (neste caso não serei eu) a possibilidade
de questionar e cruzar todos os dados de todas as tabelas.
Vou então tentar unir tabelas numa só, ver como corre e depois reporto o
resultado final.
Nesse caso repara que o utilizador final pode sempre usar o plugin spatial query por fases.
Primeiro selecciona todos os prédios que tocam na camada freguesia, depois, sem fechar a janela e deixando seleccionados os elementos na camada prédios correr a mesma operação com a camada das freguesias, e assim sucessivamente.
Era precisamente o que te iria sugerir. Usar o Postgis para fazer as
consultas necessárias e depois mostrar o resultado no qgis.
Nenhuma das coisas que dissestes me parecem limitativas. Só tens de
estruturar que colunas queres obter e que geometria pretendes representar
no QGIS.
Podes juntar na mesma consulta várias tabelas e condições. O exemplo que
deste anteriormente seria transcrito da seguinte forma:
SELECT f.*
FROM predios as f, freguesia as g, poligonos_nip as p
WHERE St_touches(f.geom,g.geom) and St_touches(f.geom,p.geom)
Que devolve todas os registos de prédios que tocam nas geometrias das
tabela poligonos_nip e freguesia. (Nota que neste caso, deves
provavelmente
querer antes usar o ST_Intersec)
Cumprimentos,
Alexandre Neto
2015-02-24 10:00 GMT+00:00 Pedro <
pedro.ferro@
>:
Voltando a isto para ver se estarei a pensar bem.
Pelo que sei, no QGIS não se consegue fazer pesquisas cruzando mais que 2
layers/tabelas (plugin Spatial Query).
Tinha-me ocorrido que uma forma de ultrapassar isto seria, no PostGis,
colocar todas as tabelas que tenho numa só.
Não sei se isto que indico será uma boa prática e até se será possível…
Alguns problemas que imagino poderão existir:
tabela com centenas de colunas
vários campos geométricos na mesma tabela
no QGIS não sei se é possível estabelecer relação 1 para n tendo apenas
uma tabela.
Agradeço a vossa opinião.
abraço,
Pedro
Obrigado Alexandre.
O que eu gostava mesmo era fazer isso (queries/ pesquisas entre vários
layers) dentro do QGIS.
Ou seja, dar ao utilizador final (neste caso não serei eu) a possibilidade
de questionar e cruzar todos os dados de todas as tabelas.
Vou então tentar unir tabelas numa só, ver como corre e depois reporto o
resultado final.
Creio que existe um plugin Postgis query que penso permitir elaborar esse tipo de consultas.
Só vendo mais logo o nome.
Nelson
Enviado do meu iPhone
No dia 24/02/2015, às 15:07, Pedro <pedro.ferro@gmail.com> escreveu:
Alexandre Neto wrote
Bom dia Pedro,
Era precisamente o que te iria sugerir. Usar o Postgis para fazer as
consultas necessárias e depois mostrar o resultado no qgis.
Nenhuma das coisas que dissestes me parecem limitativas. Só tens de
estruturar que colunas queres obter e que geometria pretendes representar
no QGIS.
Podes juntar na mesma consulta várias tabelas e condições. O exemplo que
deste anteriormente seria transcrito da seguinte forma:
SELECT f.*
FROM predios as f, freguesia as g, poligonos_nip as p
WHERE St_touches(f.geom,g.geom) and St_touches(f.geom,p.geom)
Que devolve todas os registos de prédios que tocam nas geometrias das
tabela poligonos_nip e freguesia. (Nota que neste caso, deves
provavelmente
querer antes usar o ST_Intersec)
Cumprimentos,
Alexandre Neto
2015-02-24 10:00 GMT+00:00 Pedro <
pedro.ferro@
>:
Voltando a isto para ver se estarei a pensar bem.
Pelo que sei, no QGIS não se consegue fazer pesquisas cruzando mais que 2
layers/tabelas (plugin Spatial Query).
Tinha-me ocorrido que uma forma de ultrapassar isto seria, no PostGis,
colocar todas as tabelas que tenho numa só.
Não sei se isto que indico será uma boa prática e até se será possível...
Alguns problemas que imagino poderão existir:
- tabela com centenas de colunas
- vários campos geométricos na mesma tabela
- no QGIS não sei se é possível estabelecer relação 1 para n tendo apenas
uma tabela.
Agradeço a vossa opinião.
abraço,
Pedro
Obrigado Alexandre.
O que eu gostava mesmo era fazer isso (queries/ pesquisas entre vários
layers) dentro do QGIS.
Ou seja, dar ao utilizador final (neste caso não serei eu) a possibilidade
de questionar e cruzar todos os dados de todas as tabelas.
Vou então tentar unir tabelas numa só, ver como corre e depois reporto o
resultado final.
Estou a tentar juntar as tabelas mas não está a funcionar como imaginei.
Vou tentar descrever o problema e a solução que adoptei.
Tenho 2 tabelas:
- Clientes(17000 registos de um concelho, 15 colunas alfanuméricas mais 1
geom)
- Concelhos (308 registos, 55 colunas alfanuméricas mais 1 geom)
Criei uma tabela nova (juntando as 2 anteriores pelo campo comum DICO).
Para fazer isto utilizei a função Cross Join entre as talelas 'Clientes' e
'Concelhos' e fiquei realmente com uma tabela nova (tabela Total) com o
sumatório daquelas colunas (cerca de 70).
Coloquei o srid dos 2 campos geométricos com o 4326
O que eu "acho" que aconteceu na tabela Total (a nova),foi que para cada um
dos 17000 registos que estavam originalmente na tabela Clientes
foram acrescentados os registos da tabela Concelhos.
Digo "acho" porque quando eu tento abrir a tabela Total ele fica a processar
indefinidamente e manda-me o pc abaixo.
No QGIS já consegui carregar a tabela Total mas os zooms são lentíssimosssss
Imagino que tenha a ver com as colunas de geometria.
Se tiverem sugestões quanto abordagem que adoptei ou alguma solução para o
problema, agradeço (obviamente).
Não me parece q devas fazer isso. Simplesmente carrega as tabelas individualmente para o PostGIS. Desde q elas estejam na mm base de dados, tu consegues fazer queries SQL entre todas as tabelas, da forma como o Alexandre de indicou.
Estou a tentar juntar as tabelas mas não está a funcionar como imaginei.
Vou tentar descrever o problema e a solução que adoptei.
Tenho 2 tabelas:
Clientes(17000 registos de um concelho, 15 colunas alfanuméricas mais 1
geom)
Concelhos (308 registos, 55 colunas alfanuméricas mais 1 geom)
Criei uma tabela nova (juntando as 2 anteriores pelo campo comum DICO).
Para fazer isto utilizei a função Cross Join entre as talelas ‘Clientes’ e
‘Concelhos’ e fiquei realmente com uma tabela nova (tabela Total) com o
sumatório daquelas colunas (cerca de 70).
Coloquei o srid dos 2 campos geométricos com o 4326
O que eu “acho” que aconteceu na tabela Total (a nova),foi que para cada um
dos 17000 registos que estavam originalmente na tabela Clientes
foram acrescentados os registos da tabela Concelhos.
Digo “acho” porque quando eu tento abrir a tabela Total ele fica a processar
indefinidamente e manda-me o pc abaixo.
No QGIS já consegui carregar a tabela Total mas os zooms são lentíssimosssss
Imagino que tenha a ver com as colunas de geometria.
Se tiverem sugestões quanto abordagem que adoptei ou alguma solução para o
problema, agradeço (obviamente).
Não me parece q devas fazer isso. Simplesmente carrega as tabelas
individualmente para o PostGIS. Desde q elas estejam na mm base de dados,
tu consegues fazer queries SQL entre todas as tabelas, da forma como o
Alexandre de indicou.
Abraço,
Pedro Venâncio
Em 25/02/2015 18:11, "Pedro" <
pedro.ferro@
> escreveu:
Estou a tentar juntar as tabelas mas não está a funcionar como imaginei.
Vou tentar descrever o problema e a solução que adoptei.
Tenho 2 tabelas:
- Clientes(17000 registos de um concelho, 15 colunas alfanuméricas mais
1
geom)
- Concelhos (308 registos, 55 colunas alfanuméricas mais 1 geom)
Criei uma tabela nova (juntando as 2 anteriores pelo campo comum DICO).
Para fazer isto utilizei a função Cross Join entre as talelas 'Clientes'
e
'Concelhos' e fiquei realmente com uma tabela nova (tabela Total) com o
sumatório daquelas colunas (cerca de 70).
Coloquei o srid dos 2 campos geométricos com o 4326
O que eu "acho" que aconteceu na tabela Total (a nova),foi que para cada
um
dos 17000 registos que estavam originalmente na tabela Clientes
foram acrescentados os registos da tabela Concelhos.
Digo "acho" porque quando eu tento abrir a tabela Total ele fica a
processar
indefinidamente e manda-me o pc abaixo.
No QGIS já consegui carregar a tabela Total mas os zooms são
lentíssimosssss
Imagino que tenha a ver com as colunas de geometria.
Se tiverem sugestões quanto abordagem que adoptei ou alguma solução para
o
problema, agradeço (obviamente).
abraço,
Pedro
Eu já fiz umas queries que transformei em vistas e carreguei no QGIS.
Mas o meu problema é que eu pretendo dar aos utilizadores finais (não serei
eu, não terão acesso ao postgis, não têm grandes conhecimentos do
funcionamento de SIG e BD, e que só irão mexer no QGIS) liberdade e
capacidade para fazerem as mais variadas pesquisas que entenderem.
As diferentes tabelas que tenho devem ter para aí umas 300 variáveis
(colunas) e queria que eles pudessem cruzar toda essa informação
"livremente".
Daí a ideia de colocar tudo na mesma tabela no Postgis e depois no QGIS
utilizavam o Filtro Avançado da Tabela de Atributos para fazerem as
pesquisas mas fica pesadíssimo ( e ainda só tenho 2 tabelas juntas)
Imagino que "o peso" esteja relacionado com os diferentes campos geom.
Talvez eliminando alguns campos geométricos... não sei bem...tenho que
pensar e investigar melhor
Deve haver alguma forma de fazer isto de uma forma mais "limpa" do que
aquela que estou a fazer.
Pois, criares essa mega tabela vai contra a essência das bases de dados relacionais. Repara que se tiveres 300 clientes num concelho, vais repetir 300 vezes todos os seus atributos, incluindo as suas geometrias.
Ainda assim, se o quisesses fazer, não faz sentido usares o CROSS JOIN, uma vez que o que faz é criar todas as combinações possíveis entre os registos. O que precisas seria qualquer coisa deste tipo:
FROM tabela a JOIN tabela b ON (a.cod = b.cod)
Em relação aos campos a disponibilizar e as geometrias, tens a certeza que precisas de todos eles?
Entretanto, dado que pretendes que os utilizadores façam as pesquisas de uma forma cómoda e cruzando todas as variáveis que entenderem, só vejo uma solução viável, que é a construção de um plugin python com um interface simples de selecção de variáveis, que por trás construa o SQL necessário para efectuar a consulta e o código necessário para adicionar o resultado ao QGIS.
Não me parece q devas fazer isso. Simplesmente carrega as tabelas individualmente para o PostGIS. Desde q elas estejam na mm base de dados, tu consegues fazer queries SQL entre todas as tabelas, da forma como o Alexandre de indicou.
Estou a tentar juntar as tabelas mas não está a funcionar como imaginei.
Vou tentar descrever o problema e a solução que adoptei.
Tenho 2 tabelas:
Clientes(17000 registos de um concelho, 15 colunas alfanuméricas mais 1
geom)
Concelhos (308 registos, 55 colunas alfanuméricas mais 1 geom)
Criei uma tabela nova (juntando as 2 anteriores pelo campo comum DICO).
Para fazer isto utilizei a função Cross Join entre as talelas ‘Clientes’ e
‘Concelhos’ e fiquei realmente com uma tabela nova (tabela Total) com o
sumatório daquelas colunas (cerca de 70).
Coloquei o srid dos 2 campos geométricos com o 4326
O que eu “acho” que aconteceu na tabela Total (a nova),foi que para cada um
dos 17000 registos que estavam originalmente na tabela Clientes
foram acrescentados os registos da tabela Concelhos.
Digo “acho” porque quando eu tento abrir a tabela Total ele fica a processar
indefinidamente e manda-me o pc abaixo.
No QGIS já consegui carregar a tabela Total mas os zooms são lentíssimosssss
Imagino que tenha a ver com as colunas de geometria.
Se tiverem sugestões quanto abordagem que adoptei ou alguma solução para o
problema, agradeço (obviamente).
Neste meu caso estou adicionar a geometria de um concelho a cada um dos
17000 registos que tenho na tabela Clientes.....
Para já vou limpar e deixar apenas um registo com os limites do concelho
para ver como se comporta
E ver essa sugestão do JOIN em vez do Cross Join, para ver os resultados são
os que pretendo.
Provavelmente não foi a solução mais "bonita" mas funcionou.. limpei na
tabela Clientes a coluna geom_concelhos com os limites do concelho, excepto
um registo (para ficar com um limite).