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 :

  1. 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)
    
  2. 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)
    

    Affiche la couverture du géohash avec une précision binaire fixe pour une géométrie donnée.

  3. 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)
    

    Affiche la couverture des géohashs mis en mémoire tampon avec une profondeur de bits fixe pour une géométrie donnée.

  4. 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)
    

    Affiche une couverture compacte du géohash avec une profondeur de bits fixe pour une géométrie donnée.