Fonctions de géohashing
La bibliothèque spatio-temporelle comprend des fonctions de géohashing permettant d'effectuer des recherches de proximité (codage de la latitude et de la longitude et regroupement des points voisins) dans le cadre de l'analyse des données de localisation.
Codage Geohash
Convertir un objet Point contenant une coordonnée géographique en une chaîne de caractères ou de chiffres au format « base-32 » :
>>> p = stc.point(37, -74) >>> stc.geohash.string_hash_encode(p) 'dqe6kpdue5btnubpm9npcd0000' >>> stc.geohash.string_hash_encode(p, precision=5) 'dqe6k'Convertir un objet Point contenant une coordonnée géographique en un objet de type « BitVector: »
>>> p = stc.point(37, -74) >>> bv = stc.geohash.number_hash_encode(p) >>> bv BitVector(01100101100110100110100101010101100110100110100101010101100110100110100101010101100110100110100101010101101100000000000000000000) >>> bv.truncate(10) >>> bv BitVector(0110010110)Convertissez directement une paire de coordonnées de latitude et de longitude en un géohash :
>>> stc.geohash.encode(37, -74, precision=5, mode='base32') 'dqe6k' >>> stc.geohash.encode(37, -74, precision=10, mode='bit') '0110010110'
Décodage Geohash
Convertir une base 32 géographique à 32 chiffres ou une chaîne de caractères en un objet Point contenant les coordonnées de longitude ou de latitude sous forme décimale :
>>> stc.geohash.string_hash_decode('dqeh4') Point(37.265625, -74.443359375)Décoder les caractères encodés en format « base-32 » en un objet Point :
>>> p = stc.point(37, -74) >>> bv = stc.geohash.number_hash_encode(p) >>> stc.geohash.number_hash_decode(bv) Point(37.0, -74.0)Convertir une chaîne de caractères au format « base-32 » ou binaire en une paire de coordonnées de latitude et de longitude :
>>> stc.geohash.decode('dqe6k', mode='base32') (36.9580078125, -74.00390625) >>> stc.geohash.decode('0110010110', mode='bit') (33.75, -78.75)
Voisins de géohash
La fonction « geohash neighbors » renvoie les codes geohash voisins d'un code donné.
Voisins Geohash d'un point
Récupérer les points voisins du géohash pour la latitude, la longitude et la profondeur de bits indiquées :
>>> stc.geohash.get_all_neighbors(70, -40, 25) [BitVector(0111110000001111100101010), BitVector(0111110000001111100101011), BitVector(0111110000001111100101110), BitVector(0111110000001111110000000), BitVector(0111110000001111110000001), BitVector(0111110000001111110000100), BitVector(0111110000001111110000010), BitVector(0111110000001111110000011), BitVector(0111110000001111110000110)]Récupère les points voisins d'un géohash pour une latitude, une longitude et une profondeur de bits données, et ne renvoie que les résultats situés à une distance donnée :
>>>stc.geohash.get_all_neighbors(70, -40, 25, distance_precision=1000) [BitVector(0111110000001111110000001), BitVector(0111110000001111110000100), BitVector(0111110000001111110000011), BitVector(0111110000001111110000110)]
Fonctions de voisinage Geohash
expand: Renvoie le code central et ses codes voisins. Les 9 géohashes d'un lieu sont renvoyés :>>> stc.geohash.expand('ezs42') ['ezefp', 'ezs40', 'ezs41', 'ezefr', 'ezs42', 'ezs43', 'ezefx', 'ezs48', 'ezs49']neighbors: Renvoie 8 géohashes, à l'exclusion du géohash indiqué :>>> stc.geohash.neighbors('ezs42') ['ezefp', 'ezs40', 'ezs41', 'ezefr', 'ezs43', 'ezefx', 'ezs48', 'ezs49']get_east,get_west,get_north,get_south: Renvoie les coordonnées géographiques est, ouest, nord ou sud d'un géohash donné :>>> stc.geohash.get_east('ezs42') 'ezs43'Convertir un géohash en
BitVector:>>> bv = stc.geohash.number_hash_encode(p) >>> bv.truncate(25) >>> stc.geohash.expand(bv) [BitVector(0110010110011010011000101), BitVector(0110010110011010011010000), BitVector(0110010110011010011010001), BitVector(0110010110011010011000111), BitVector(0110010110011010011010010), BitVector(0110010110011010011010011), BitVector(0110010110011010011001101), BitVector(0110010110011010011011000), BitVector(0110010110011010011011001)] >>> stc.geohash.neighbors(bv) [BitVector(0110010110011010011000101), BitVector(0110010110011010011010000), BitVector(0110010110011010011010001), BitVector(0110010110011010011000111), BitVector(0110010110011010011010011), BitVector(0110010110011010011001101), BitVector(0110010110011010011011000), BitVector(0110010110011010011011001)] >>> stc.geohash.get_north(bv) BitVector(0110010110011010011011000)
Couverture Geohash
Pour calculer un ensemble de géohashes qui couvre entièrement le rectangle de délimitation :
Préparez un polygone d'exemple :
test_wkt = 'POLYGON((-73.76223024988917 41.04173285255264,-73.7749331917837 41.04121496082817,-73.78197130823878 41.02748934524744,-73.76476225519923 41.023733725449326,-73.75218805933741 41.031633228865495,-73.7558787789419 41.03752486433286,-73.76223024988917 41.04173285255264))' poly = wkt_reader.read(test_wkt)Calculer la couverture du géohash avec une profondeur de bits fixe pour une géométrie donnée :
cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36)
Calculer la couverture du géohash mis en mémoire tampon avec une profondeur de bits fixe pour une géométrie donnée :
buffered_cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36, distance=50)
Calculez une couverture de géohash compacte en calculant d'abord la couverture à profondeur fixe, puis en compressant cette couverture :
raw_cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36) compact_cover = stc.geohash.geohash_compression(raw_cover)