Me gustaría tomar geometrías de un conjunto de datos vectoriales y reducirlas a un hash. Este hash se usaría para verificar la integridad de esos datos y también para identificar geometrías idénticas.
¿Existe algún algoritmo apropiado que pueda usarse? ¿Qué dificultades puedo encontrar?
Respuestas:
No puede confiar en los códigos hash para su identificación. En el caso de una colisión hash , podría obtener el mismo código hash para diferentes objetos, por lo que siempre necesitará un método de comparación más costoso como el procesamiento posterior. Pero, por supuesto, podría ajustar su método de hash para reducir las colisiones de hash.
Si desea simplificarlo, simplemente use MD5 o cualquier hash, pero podría reducir más la probabilidad de una colisión de hash. Si no tiene geometrías traducidas o rotadas y desea un código hash entero, su método podría verse así:
Para el método geohash también eche un vistazo a una clave espacial ('geohash binario') que es más eficiente en memoria y más precisa si los límites del área son más pequeños que los límites mundiales. También puedes echar un vistazo a mi implementación de Java .
Incluso podría reducir aún más la probabilidad de una colisión de hash si usa las diferencias de los puntos y calcula algún punto central :
Para convertir, por ejemplo, la latitud en un entero, puede hacer:
O por la longitud:
fuente
En el software GRASS GIS, usamos MD5 para verificar si dos mapas son idénticos:
http://svn.osgeo.org/grass/grass-addons/grass7/general/g.compare.md5/g.compare.md5.html
En su caso, también se debe verificar la base de datos adjunta (atributos).
fuente