Skip to content
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

Algoritmo de localização da via mais próxima de um ponto #1

Open
ppKrauss opened this issue Apr 27, 2019 · 0 comments
Open

Algoritmo de localização da via mais próxima de um ponto #1

ppKrauss opened this issue Apr 27, 2019 · 0 comments

Comments

@ppKrauss
Copy link
Contributor

O problema estritamente geométrico é conhecido no jargão GIS como "K nearest neighbours" (KNN), e encontra-se bem apresentado em postgis.net/workshops/knn (archive).

Basta fazermos alguns testes com os dados que temos em mãos, ajustar parâmetros e então eleger o algoritmo mais adequado. Sugere-se criar antes um conjunto de "testes canônicos" para cada grupo (ex. vias rurais do estado de São Paulo), que ficam sendo tanto o referencial para ajustes e seleção de algoritmos, como um primeiro conjunto de testes de regressão a ser usado durante o desenvolvimento da solução final.

Após experiência com dois ou mais grandes grupos (ex. vias rurais e urbanas) pode-se avaliar se é necessária a parametrização (ajustes diferentes para grupos diferentes) ou não.

A solução do problema pode ser expressa como função PostGIS na Lib complementar, que retorna JSON com ID da via mais provável e score de proximidade:
CREATE FUNCTION lib.point_via_knn(point geometry, type text DEFAULT NULL, city_id bigint DEFAULT NULL) RETURNS JSONb. Pode-se forçar o contexto do ponto (apenas vias de uma cidade ou ajustes para zona rural) caso o algoritmo seja sensível a algum parâmetro.

Variante com restrição sobre o nome da via

Em geral o problema de encontrar a linha mais próxima de um ponto surge no contexto de se consolidar um ponto de endereçameto: as tags addr:street e addr:housenumber são fornecidas junto com o ponto num exemplo típico do OSM. Fora do OSM, numa consulta livre (nome de rua dado com mais liberdade e imprecisão), pode-se supor que addr:street é composto apenas de palavras-chave e addr:housenumber nulo. Devemos supor portanto que o único input adicional (ao problema KNN) é o nome de rua dado por palavras-chave.

... Pendente resolução como extensão do KNN, por exemplo fixando-se um score para o casamento de palavras-chave e ajustando o score conforme grau de confiabilidade da informação de ambos os lados (linhas do OSM podem estar registradas com nomes errados).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant