Je voudrais prendre des géométries à partir d'un jeu de données vectorielles et les réduire à un hachage. Ce hachage serait ensuite utilisé pour vérifier l'intégrité de ces données et également identifier des géométries identiques.
Existe-t-il des algorithmes appropriés qui pourraient être utilisés? Quels pièges pourrais-je rencontrer?
Réponses:
Vous ne pouvez pas vous fier aux codes de hachage pour l'identification. Dans le cas d'une collision de hachage, vous pouvez obtenir le même code de hachage pour différents objets, vous aurez donc toujours besoin d'une méthode de comparaison plus coûteuse que le post-traitement. Mais bien sûr, vous pouvez ajuster votre méthode de hachage afin de réduire les collisions de hachage.
Si vous voulez simplifier, utilisez simplement MD5 ou tout autre hachage, mais vous pouvez réduire davantage la probabilité d'une collision de hachage. Si vous n'avez pas de géométries traduites ou pivotées et que vous voulez un code de hachage entier, votre méthode pourrait ressembler à ceci:
Pour la méthode geohash , jetez également un œil à une clé spatiale («binaire geohash») qui est plus efficace en mémoire et plus précise si les limites de la zone sont plus petites que les limites du monde. Vous pouvez également jeter un œil à mon implémentation Java .
Vous pouvez même réduire davantage la probabilité d'une collision de hachage si vous utilisez les différences des points et calculez un point central :
Pour convertir par exemple la latitude en un entier, vous pouvez faire:
Ou pour la longitude:
la source
Dans le logiciel GRASS GIS, nous utilisons MD5 pour vérifier si deux cartes sont identiques:
http://svn.osgeo.org/grass/grass-addons/grass7/general/g.compare.md5/g.compare.md5.html
Dans votre cas, la base de données (attributs) attachée doit également être vérifiée.
la source