[Portugal] QGIS ou PostGIS - pontos sobrepostos

Pedro pedro.ferro gmail.com
Sexta-Feira, 1 de Novembro de 2013 - 10:56:13 PDT


Jorge Gustavo Rocha wrote
> Olá Pedro,
> 
> Em 31-10-2013 16:06, Pedro escreveu:
>> Olá,
>>
>> Vou ter numa tabela de uma BD PostGIS um conjunto relativamente grande de
>> dados (pontos e e poligonos) que vão todos cair na mesma coordenada (em
>> princípio será no centroide dos concelhos).
>> Imagino que serão na ordem das centenas de pontos e polígonos.
>>
>> O objectivo depois será corrigir a posição de cada um deles
>> individualmente,
>> colocando-os na coordenada correcta.
>>
>> Não sei bem se é possível fazer o que pretendo ou qual será a abordagem
>> correcta.
>> Se o devo/posso fazer a nível do QGIS ou se devo/posso fazer no PostGIS.
>> Assim pergunto-vos:
>>
>> - No QGIS, conhecem alguma forma de seleccionar todos esses pontos e
>> dispersá-los por forma a que deixem de estar sobrepostos ?
>>
> 
> Parece-me que o mais fácil é recorreres a uma script PostgreSQL.
> 
> Fazes um agregate de todos os pontos que têm as mesmas coordenadas, e 
> contas a acorrência de repetições. Depois fazes um ciclo para esse 
> número de repetições, fazendo um update em que somas um delta a cada 
> ponto (em x e em y). O delta pode ser random()*100, e provavelmente 
> todos os pontos passam a ficar em posições distintas, dentro de uma bbox 
> de 100x100m.
> 
> Sugestão: Começa por fazer um siples update à tabela, com o delta que 
> vem do random()*100. Pode ser que só com uma única instrução consigas o 
> que queres.
> 
> Se calculares um delta a partir de uma fórmula (por exemplo, da 
> espiral), ficar com uma distribuição de pontos eventualmente mais 
> legível. Fiz um teste, que não sistematizei. Usei o raio a variar de 1 
> em 1m e o ângulo a variar de .1 em .1 radianos.
> rs = 1:1:100;
> thetas = .1:.1:10;
> xs = x + rs .* cos(thetas);
> ys = y + rs .* sin(thetas);
> Anexo o resultado de 100 pontos dispersos em forma de espiral.
> 
> É melhor usares coordenadas métricas em que 1 é 1 metro :-) Se usares 
> coordeandas geográficas, cuidado com as unidades a fazer as contas.
> 
>> - No PostGIS estou a imaginar, poderia ter alguma função que adicione a
>> todos os pontos, por exemplo, 1/2 metro em relação ao ponto anterior ? Se
>> sim sabem qual a documentação que devo investigar?
>>
> 
> http://www.postgresql.org/docs/9.3/static/plpgsql.html
> 
>> Obrigado,
>> Pedro
>>
> 
> Dá-lhe!
> 
> Abraço,
> 
> Jorge

Olá Jorge,

Não consegui fazer algo tão elaborado como o que apresentaste mas ainda
assim, a partir do teu exemplo, consegui dispersar os pontos, de forma
aleatória, por uma área relativamente pequena,

Fiz assim:

update teste_pontos 
set coordlong = coordlong + (random()/1000), 
	coordlat = coordlat + (random()/1000)
where tipo = 2;

mais uma vez obrigado pela ajuda

Pedro



--
View this message in context: http://osgeo-org.1560.x6.nabble.com/QGIS-ou-PostGIS-pontos-sobrepostos-tp5086866p5087019.html
Sent from the OSGeo Portuguese Local Chapter mailing list archive at Nabble.com.


More information about the Portugal mailing list