-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Algortimo para obter a numeração predial #2
Comments
Testes com rodovias SPComo as implementações iniciais terão como foco BR-SP, pode-se eleger algumas amostras de Demanda por merge de linestringsA rodovia SPA 291/055 é das mais fragmentadas, ao passo que trechos vizinhos da SP-055 possuem dimensão razoável. Queries de avaliação: select osm_id, st_length(way,true)
from planet_osm_line where tags->>'ref'='SPA 291/055'
order by 2 desc;
select osm_id, st_length(way,true)
from planet_osm_line where tags->>'ref' like 'SP-055%'
order by 2 desc; O trecho mais longo da estrada SPA 291/055 tem da ordem de 600 metros, de modo que demandaria merge com outros trechos para se adequar à modelagem de streamlines orientadas à numeração predial. Demanda por correção pela sinuosidadeVejamos agora um trecho sinuoso da SP-055, a way 255783073, comparado com um trecho reto, vizinho a ele, a way 178354639. -- SELECT osm_id, m, u, tags
SELECT tolerance, osm_id, m, m_simp, round(1000*m_simp/m)/10 || '%' simp_perc
FROM (
SELECT *, 0.001 tolerance, st_length(way) u, round(st_length(way,true)) m,
round(st_length(ST_Simplify(way,0.001,true),true)) m_simp
FROM planet_osm_line
WHERE osm_id IN(255783073,178354639)
) t;
onde a coluna u é o comprimento medido em unidades geográficas (graus do WSG84), para avaliar o parâmetro de tolerância na função
Há uma rápida convergência do trecho reto, e notável sensibilidade do trecho sinuoso. Esse seria o principal indicativo de demanda por um polinômio de maior grau na way/255783073. Disso podemos inferir recomendação mais gerais:
|
Dado um ponto (
geo
URI) e ovia_id
(identificador da via) onde será projetado (por ST_ClosestPoint), retorna-se a metragem da via para aquele ponto de projeção.A metragem tem como referência o valor de ST_LineLocatePoint, mas não pode ser inferida diretamente disto: a solução do problema requer justamente a convenção de um modelo matemático (polinômio de ajuste) minimamente razoável para manter em cache de cada linha representativa de via.
A obtenção dos dados do polinômio depende da amostragem de numeração predial oficial (ou tabela de dados do odômetro no percurso da estrada), e do grau de sinuosidade da linha (ex. comparação dos ajustes com e sem simplificação de linha).
PS: quanto mais distante do marco zero, maior o peso da amostra na regressão (fit do polinômio) tendo em vista que erros relativos à sinuosidade da linha vão sendo acumuldados.
Convenções
Na modelagem o ideal é ter uma só linestring por via, mas o algoritmo deve comportar também fragmentos de via, ou seja, linestrings que não começam no marco zero. A fragmentação pode eventualmente ser recomendada, como no caso de uma estrada como a Anchieta-SP, que sobe a serra: três polinômios distintos (antes, durante e depois da serra) podem modelar melhor do que ajustando-se um só.
Caso geral da obtenção de ID da via e numeração predial
Complemento do algoritmo requisitado pela issue #1. O caso geral tem solução mais precisa no meio rural, onde a probabilidade de "endereço de esquina" é menor.
Referências e estudos de caso
Caberia uma pesquisa mais detalhada, informalmente o algoritmo de numeração predial e pode ser descrito conforme essa discussão de forum:
The text was updated successfully, but these errors were encountered: