[Talk-br] Problema de Prédios em Overlapping (Importação PMPA)

Sérgio V. svolk2 em hotmail.com
Segunda Maio 16 00:06:44 UTC 2016


Obrigado a todos pelas ajudas.

Qualquer outra questão, por favor avisem.


Acho que está OK agora, esquematizada a questão dos overlappings em 2D. Resolveu usando layer=* (p/ casos de compartilhando ways) ou multipolígono (p/ casos de um dentro sem compartilhar ways ou 2 outer grudados no mesmo nível) . Uma vez que para a maioria destes de importação, se não houveracesso a mais informações, não tem como fazer 3D ( building:levels=*, building:part=*, etc).


Não penso em colocar agora os prédios que seja possível para 3D (bulding:levels, etc), depende muita coisa de survey, muitos possivelmente não dá pra ver em imagens atuais. Muitos prédios talvez possa com o Mapillary. Mas deixar pra outros se divertirem.

A estrutura básica 2D com as formas já fica assim montada, sem overlapping. Também ajuda para outros que quiserem adicionar POIs e mais dados, encontrando os prédios certos. Quem quiser, adiciona as tags 3D e altera.

Alguns fiz em 3D, para ver se dava certo.  Bem conhecidos como a casa de Cultura, ou que dá para ver na imagem (como a Galeria Malcon; pra isto serve a distorção lateral de imagens, pra contar número de andares). Testei as tags para 3D e tá validando tudo OK no 2D. Ainda tou vendo se fica OK no 3D.

O validador só acusa ainda 1 única coisa: "relation type unknown" (mas na verdade tá certo com o type=building).


Sigo preparando a importação de prédios para os outros bairros, com o esquema resolvido para casos de overlappings com layer (acho que uns 5% do total, com o que tenho visto).

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Paralelamente, pensei numa coisa, se seria possível desenvolver um script (programa externo ou plugin para JOSM) para:


-Resolução de overlapping com criação automática de layers, com 2 objetivos:

a)-resolver problema de polígonos de building sobrepostos na mesma área (mesmo terreno), adicionando layer nos sobrepostos;

b)-com isto ao mesmo tempo fica esquematizada uma estrutura básica para adicionar relação 3D (futuramente só procurando os polígonos com tags layer=* + building=* por building:part=* building:levels=*).


Acham que seria útil? Não entendo muito de linguagens de programação, e menos ainda das dos últimos 25 anos para cá.


Acho que poderia ser "mais ou menos" assim uma lógica (a testar) para resolver overlapping para 2D:

-analisa uma massa de polígonos;

-encontra e retorna os que estão em overlapping (os grudados em um lado não acusa, não dá problema);

-destes, encontra e retorna a maior área (o "outline", a base, ou projeção total das demais áreas);

-das demais áreas que estão sobre o outline, analisa:

-se estão dentro, então cria multipolígono;

-analisa as áreas destes multipolígonos e dos demais polígonos sobrepostos ao outline, então cria "layer=anterior+1" (limite=5) para os sucessivamente menores que o outline, a base (supondo comum que se há volumes sobrepostos, os de menor área estão sucessivamente mais acima -  a verificar se vale para todos os casos). O maior que não tem outra subdivisão grudada é sempre o outline. Se tiver outro apenas grudado, é outro prédio, podendo ser no mesmo terreno. Mas não analisa junto, não é problema de overlapping.

Não resolve todos os casos. Se tiver mais de 5 layers (só vi o da Galeria MAlcon), teria que separar para usar building:levels.


(acho que não serviria para criar building:levels automático, pois tem que avaliar o número de pavimentos com imagem, survey ou dados externos)


Se fosse para preparar para 3D (mas o script não pode adivinhar os building:levels, teria que fornecer), acho que poderia ser "mais ou menos assim" a lógica:

-encontra e retorna os que estão em overlapping (os grudados em um lado não acusa, não dá problema);
-cria com estes relação type=building
-para a área maior, adiciona:
role=outline
building=*
-para as demais áreas sucessivamente menores, adiciona:
role=part
building:part=*
building:levels=*
building:min_level=*
heigth=*
min_height=*
(NOTA: o building=* do outline não é usado para o 3D se tiver outros com building:part=*; para fazer a base, tem que repetir a do outline como "part", sem nós duplicados, e adicionar as tags semelhantes às demais, sem building:min_level=*, para que se torne a primeira)
Acho que seria mais ou menos assim.


- - - - - - - - - - - - - - - -

Sérgio / user:smaprs
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.openstreetmap.org/pipermail/talk-br/attachments/20160516/550af5c6/attachment.html>


Mais detalhes sobre a lista de discussão Talk-br