Saya ingin mengambil geometri dari dataset vektor dan menguranginya menjadi hash. Hash ini kemudian akan digunakan untuk memverifikasi integritas data itu dan juga mengidentifikasi geometri yang identik.
Apakah ada algoritma yang sesuai yang dapat digunakan? Perangkap apa yang bisa saya temui?
Jawaban:
Anda tidak dapat mengandalkan kode hash untuk identifikasi. Dalam kasus tabrakan hash, Anda bisa mendapatkan kode hash yang sama untuk objek yang berbeda, sehingga Anda akan selalu memerlukan metode perbandingan yang lebih mahal seperti pasca pemrosesan. Tapi tentu saja, Anda bisa menyetel metode hashing Anda untuk mengurangi tabrakan hash.
Jika Anda ingin membuatnya sederhana cukup gunakan MD5 atau apa pun hash, tetapi Anda bisa mengurangi kemungkinan tabrakan hash lebih. Jika Anda belum menerjemahkan atau memutar geometri dan Anda menginginkan kode hash integer, metode Anda akan terlihat seperti:
Untuk metode geohash juga melihat kunci spasial ('binary geohash') yang lebih hemat memori dan lebih tepat jika batas wilayah lebih kecil daripada batas dunia. Anda juga dapat melihat implementasi Java saya .
Anda bahkan dapat mengurangi kemungkinan tabrakan hash lebih lanjut jika Anda menggunakan perbedaan poin dan menghitung beberapa titik pusat :
Untuk mengonversi mis lintang menjadi integer yang dapat Anda lakukan:
Atau untuk garis bujur:
sumber
Dalam perangkat lunak GRASS GIS, kami menggunakan MD5 untuk memeriksa apakah dua peta identik:
http://svn.osgeo.org/grass/grass-addons/grass7/general/g.compare.md5/g.compare.md5.html
Dalam kasus Anda, DB terlampir (atribut) juga perlu diperiksa.
sumber