Gostaria de pegar geometrias de um conjunto de dados vetoriais e reduzi-las a um hash. Esse hash seria usado para verificar a integridade desses dados e também para identificar geometrias idênticas.
Existe algum algoritmo apropriado que possa ser usado? Que armadilhas eu poderia encontrar?
Respostas:
Você não pode confiar em códigos de hash para identificação. No caso de uma colisão de hash, você pode obter o mesmo código de hash para objetos diferentes; portanto, você sempre precisará de um método de comparação mais caro que o pós-processamento. Mas é claro, você pode ajustar seu método de hash para reduzir colisões de hash.
Se você quiser simplificar, use o MD5 ou qualquer hash, mas poderá reduzir ainda mais a probabilidade de uma colisão de hash. Se você não possui geometrias traduzidas ou rotacionadas e deseja um código de hash inteiro, seu método pode se parecer com:
Para o método geohash , observe também uma chave espacial ('binário geohash') que é mais eficiente em termos de memória e mais precisa se os limites da área forem menores que os limites do mundo. Você também pode dar uma olhada na minha implementação Java .
Você pode reduzir ainda mais a probabilidade de uma colisão de hash se estiver usando as diferenças dos pontos e calcular algum ponto central :
Para converter, por exemplo, a latitude em um número inteiro, você pode:
Ou para a longitude:
fonte
No software GRASS GIS, usamos o MD5 para verificar se dois mapas são idênticos:
http://svn.osgeo.org/grass/grass-addons/grass7/general/g.compare.md5/g.compare.md5.html
No seu caso, o banco de dados anexado (atributos) também precisa ser verificado.
fonte