O GeoHash é um excelente método para codificar a latitude e longitude de um ponto em uma string. É conciso, devido ao uso de números + letras, e a precisão pode ser ajustada adicionando caracteres no final.
Estou procurando um método equivalente para codificar polígonos, não pontos. Vi duas maneiras de fazer isso:
- faça geohash todos os pontos de polígono, concatene-os e comprima a sequência resultante usando algoritmos clássicos de compactação de texto.
- referencie todas as geohashes incluídas no polígono. É o método RecursivePrefixTree - consulte http://www.opensourceconnections.com/2014/04/11/indexing-polygons-in-lucene-with-accuracy/ .
Eu gostaria que o código pudesse ser manipulado por humanos, ie. copiado manualmente, não apenas pelas máquinas como um índice.
Edit: veja também a discussão (em francês) em http://seenthis.net/messages/269838 .
polygon
latitude-longitude
compression
geohash
Sylvain Lesage
fonte
fonte
Respostas:
Dê uma olhada no Georaptor . Cria um conjunto compactado de geohashes, ou seja, uma combinação de geohashes em diferentes níveis.
fonte
A implementação mais robusta está na biblioteca de geometria s2, com sua implementação Polygon Cover. Usa S2CellIds, uma melhoria no GeoHashes, como sua unidade.
fonte
Com o lançamento recente do Google do Open Location Code , houve um bom questionamento sobre o Geohash. Felizmente, não vi nada sobre polígonos Geohash.
Como você está procurando várias implementações para soluções do tipo Geohash, veja a comparação do Google de vários algoritmos e soluções em https://github.com/google/open-location-code/blob/master/docs/comparison.adoc
É claramente um ponto, mas pode ajudá-lo na sua "missão" do polígono Geohash.
fonte
Uma implementação muito simples seria executar o BFS preenchendo o polígono com as geohashes. Em seguida, você pode dividir recursivamente as arestas em maior precisão.
Aqui está um exemplo BFS de exemplo
fonte
A função PostGIS ST_GeoHash retorna um GeoHash com base no tipo de geometria de entrada. Obviamente, qualquer geometria diferente de um Ponto resultaria em menor precisão.
fonte