IBM Cloud Docs
Funciones de geohashing

Funciones de geohashing

La biblioteca espacio-temporal incluye funciones de geohashing para la búsqueda de proximidad (codificación de latitud y longitud y agrupación de puntos cercanos) en el análisis de datos de ubicación.

Codificación de hash geográfico

  • Codifique un objeto de punto con una ubicación geográfica en una serie codificada en base 32 de letras o dígitos:
    >>> p = stc.point(37, -74)
    >>> stc.geohash.string_hash_encode(p)
    'dqe6kpdue5btnubpm9npcd0000'
    >>> stc.geohash.string_hash_encode(p, precision=5)
    'dqe6k'
    
  • Codifique un objeto de punto con una ubicación geográfica en un vector de bits:
    >>> p = stc.point(37, -74)
    >>> bv = stc.geohash.number_hash_encode(p)
    >>> bv
    BitVector(01100101100110100110100101010101100110100110100101010101100110100110100101010101100110100110100101010101101100000000000000000000)
    >>> bv.truncate(10)
    >>> bv
    BitVector(0110010110)
    
  • Codifique un par de coordenadas de latitud y longitud directamente en un código geohash:
    >>> stc.geohash.encode(37, -74, precision=5, mode='base32')
    'dqe6k'
    >>> stc.geohash.encode(37, -74, precision=10, mode='bit')
    '0110010110'
    

Descodificación de hash geográfico

  • Descodifique los dígitos geográficos de 32 dígitos o una serie en un objeto de punto con las coordenadas decimales de longitud y latitud:
    >>> stc.geohash.string_hash_decode('dqeh4')
    Point(37.265625, -74.443359375)
    
  • Descodifique los caracteres codificados en base 32 en un objeto de punto.
    >>> p = stc.point(37, -74)
    >>> bv = geohash.number_hash_encode(p)
    >>> geohash.number_hash_decode(bv)
    Point(37.0, -74.0)
    
  • Descodifique una serie de base 32 o binaria en un par de coordenadas de latitud y longitud:
    >>> stc.geohash.decode('dqe6k', mode='base32')
    (36.9580078125, -74.00390625)
    >>> stc.geohash.decode('0110010110', mode='bit')
    (33.75, -78.75)
    

Función de vecinos de hash geográfico

La función de vecinos de geohash devuelve los códigos de geohash de vecindad alrededor de un código especificado.

Vecinos de geohash para un punto

  • Obtenga los vecinos de geohash para la latitud, longitud y bit_depth dadas:

    >>> 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)]
    
  • Obtenga los vecinos de geohash para una latitud, longitud y bit_depth dadas y solo devuelva los resultados que están dentro de una distancia determinada:

    >>>geohash.get_all_neighbors(70, -40, 25, distance_precision=1000)
    [BitVector(0111110000001111110000001),
     BitVector(0111110000001111110000100),
     BitVector(0111110000001111110000011),
     BitVector(0111110000001111110000110)]
    

Funciones de vecinos de hash geográfico

  • expand: devuelve el código de centro y sus vecinos. Se devuelven todos los 9 geohashes para una ubicación.
    >>> stc.geohash.expand('ezs42')
    ['ezefp', 'ezs40', 'ezs41', 'ezefr', 'ezs42', 'ezs43', 'ezefx', 'ezs48', 'ezs49']
    
  • neighbors: devuelve 8 geohashes, excluyendo el propio geohash que se ha dado:
    >>> stc.geohash.neighbors('ezs42')
    ['ezefp', 'ezs40', 'ezs41', 'ezefr', 'ezs43', 'ezefx', 'ezs48', 'ezs49']
    
  • get_east, get_west, get_north, get_south: devuelve el geohash del este, oeste, norte o sur para un geohash determinado:
    >>> stc.geohash.get_east('ezs42')
    'ezs43'
    
  • Codifique un geohash en un BitVector:
    >>> bv = 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)
    

Cobertura de hash geográfico

Para calcular un conjunto de geohashes que cubra totalmente el recuadro delimitador:

  1. Preparar un polígono de ejemplo:

    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. Calcule la cobertura de geohash en una profundidad de bit fija para una geometría determinada:

    cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36)
    

    Muestra la cobertura geohash a una profundidad de bits fija para una geometría determinada.
    Cobertura Geohash con una profundidad de bits fija para una geometría determinada

  3. Calcule la cobertura de geohash almacenada en el almacenamiento intermedio en una profundidad de bit fija para una geometría determinada:

    buffered_cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36, distance=50)
    

    Muestra la cobertura geohash en búfer a una profundidad de bits fija para una geometría determinada.
    Buffered geohash coverage at a fixed bit depth for a given geometry

  4. Calcule una cobertura de geohash compacta calculando primero la cobertura de la profundidad fija y, después, comprimiendo la cobertura:

    raw_cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36)
    compact_cover = stc.geohash.geohash_compression(raw_cover)
    

    Muestra la cobertura geohash compacta a una profundidad de bits fija para una geometría determinada.
    Compact geohash coverage at a fixed bit depth for a given geometry