8 votos

Las funciones de hash de datos GIS

Me gustaría tomar geometrías a partir de un vector conjunto de datos y reducir a un hash. Este hash luego se utiliza para verificar la integridad de los datos y también identificar idénticas geometrías.

Hacer cualquier algoritmos adecuados existir, que podría ser utilizado? ¿Qué dificultades podría encontrar?

4voto

Kiran Puntos 320

y también identificar idénticas geometrías.

Usted no puede confiar en hashcodes para su identificación. En el caso de una colisión de hash usted podría conseguir el mismo hashcode para diferentes objetos, por lo que siempre vas a necesitar una más costoso método de comparación post-procesamiento. Pero, por supuesto, usted puede sintonizar su hash método para reducir las colisiones de hash.

Si usted desea hacer es simple de usar MD5 o lo que sea hash, pero podría reducir la probabilidad de que un hash de colisión más. Si no se han traducido o girado geometrías y desea un entero hashcode su método podría parecerse a:

int hash = numberOfPoints * 37;
hash += geometryType * 37;
...
for(point : points) {
     hash = hash XOR geohash(point.lat, point.lon)
}

Para el geohash método también tener una mirada en un espaciales clave ('binario geohash') que es la memoria más eficiente y más precisa si los límites del área son más pequeños que los límites del mundo. Usted también puede echar un vistazo en mi implementación de Java.

Incluso se podría reducir aún más la probabilidad de una colisión de hash si usted está usando las diferencias de los puntos y calcular un punto central:

int hash = numberOfPoints;
hash += 37 * geometryType;
...
hash = hash XOR geohash(someCenterPoint.lat, someCenterPoint.lon);
for(point : points) {
   hash += 37 * latToInteger(previousPoint.lat - point.lat);
   hash += 37 * lonToInteger(previousPoint.lon - point.lon);
}

Para convertir por ejemplo, la latitud en un número entero de que podría hacer:

latAsInt = latitudeFloatValue * (Integer.MAX / 90)

O para la longitud:

lonAsInt = longitudeFloatValue * (Integer.MAX / 180)

3voto

En GRASS GIS software, por lo que el uso de MD5 para comprobar 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, el adjunto DB (atributos) también debe ser revisado.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X