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:
-
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)
-
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)
Cobertura Geohash con una profundidad de bits fija para una geometría determinada -
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)
Buffered geohash coverage at a fixed bit depth for a given geometry -
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)
Compact geohash coverage at a fixed bit depth for a given geometry