IBM Cloud Docs
Geohashing-Funktionen

Geohashing-Funktionen

Die räumlich-zeitliche Bibliothek enthält Geohash-Funktionen für die Umkreissuche (Codierung von Längengrad und Breitengrad und Gruppierung von Punkten in der Nähe) bei der Positionsdatenanalyse.

Geohash-Codierung

  • Codieren Sie ein Punktobjekt mit einer geografischen Position in einer Zeichenfolge aus Buchstaben oder Ziffern in Base32-Codierung:
    >>> p = stc.point(37, -74)
    >>> stc.geohash.string_hash_encode(p)
    'dqe6kpdue5btnubpm9npcd0000'
    >>> stc.geohash.string_hash_encode(p, precision=5)
    'dqe6k'
    
  • Codieren Sie ein Punktobjekt mit einer geografischen Position in einem Bitvektor:
    >>> p = stc.point(37, -74)
    >>> bv = stc.geohash.number_hash_encode(p)
    >>> bv
    BitVector(01100101100110100110100101010101100110100110100101010101100110100110100101010101100110100110100101010101101100000000000000000000)
    >>> bv.truncate(10)
    >>> bv
    BitVector(0110010110)
    
  • Codieren Sie ein Paar aus Koordinaten der Breiten- und Längengrade direkt in einem Geohash:
    >>> stc.geohash.encode(37, -74, precision=5, mode='base32')
    'dqe6k'
    >>> stc.geohash.encode(37, -74, precision=10, mode='bit')
    '0110010110'
    

Geohash-Decodierung

  • Decodieren Sie geografische Daten als Ziffern oder einer Zeichenfolge in Base32-Codierung in ein Punktobjekt mit dezimalen Koordinaten der Breiten- und Längengrade:
    >>> stc.geohash.string_hash_decode('dqeh4')
    Point(37.265625, -74.443359375)
    
  • Decodieren Sie Zeichen in Base32-Codierung in ein Punktobjekt:
    >>> p = stc.point(37, -74)
    >>> bv = geohash.number_hash_encode(p)
    >>> geohash.number_hash_decode(bv)
    Point(37.0, -74.0)
    
  • Decodieren Sie eine Zeichenfolge in Base32-Codierung oder Binärzeichenfolge in ein Paar aus Koordinaten der Breiten- und Längengrade:
    >>> stc.geohash.decode('dqe6k', mode='base32')
    (36.9580078125, -74.00390625)
    >>> stc.geohash.decode('0110010110', mode='bit')
    (33.75, -78.75)
    

Benachbarte Geohash-Codes

Die Funktion für Geohash-Nachbarn gibt die benachbarten Geohash-Codes um einen angegebenen Code herum zurück.

Geohash-Nachbarn für einen Punkt

  • Rufen Sie die Geohash-Nachbarn für die angegeben Werte für Breitengrad, Längengrad und Bittiefe ab:

    >>> 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)]
    
  • Rufen Sie die Geohash-Nachbarn für angegebene Werte für Breitengrad, Längengrad und Bittiefe ab, wobei nur die Ergebnisse innerhalb einer bestimmten Entfernung zurückgegeben werden:

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

Funktionen für benachbarte Geohash-Codes

  • expand: Gibt den Codes des Mittelpunkts und dessen Nachbarn zurück. Alle 9 Geohashs für einen Standort werden zurückgegeben:
    >>> stc.geohash.expand('ezs42')
    ['ezefp', 'ezs40', 'ezs41', 'ezefr', 'ezs42', 'ezs43', 'ezefx', 'ezs48', 'ezs49']
    
  • neighbors: Gibt 8 Geohashs zurück und schließt dabei den angegebenen Geohash aus:
    >>> stc.geohash.neighbors('ezs42')
    ['ezefp', 'ezs40', 'ezs41', 'ezefr', 'ezs43', 'ezefx', 'ezs48', 'ezs49']
    
  • get_east, get_west, get_north, get_south: Gibt den östlichen, westlichen, nördlichen oder südlichen Geohash für einen angegebenen Geohash zurück:
    >>> stc.geohash.get_east('ezs42')
    'ezs43'
    
  • Codieren Sie einen Geohash in einem Bitvektor (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)
    

Geohash-Abdeckung

Gehen Sie wie folgt vor, um eine Gruppe von Geohashs zu berechnen, die die gesamte Manipulationsbox abdeckt:

  1. Erstellen Sie ein Beispielpolygon:

    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. Berechnen Sie die Geohash-Abdeckung mit einer festgelegten Bittiefe für eine angegebene Geometrie:

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

     Zeigt die Geohash-Abdeckung mit einer festen Bittiefe für eine bestimmte Geometrie.
    Geohash-Abdeckung bei einer festen Bittiefe für eine gegebene Geometrie

  3. Berechnen Sie die gepufferte Geohash-Abdeckung mit einer festgelegten Bittiefe für eine angegebene Geometrie:

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

     Zeigt die gepufferte Geohash-Abdeckung mit einer festen Bittiefe für eine bestimmte Geometrie.
    Gepufferte Geohash-Abdeckung mit einer festen Bittiefe für eine gegebene Geometrie

  4. Berechnen Sie eine kompakte Geohash-Abdeckung, indem Sie die Abdeckung zuerst mit festgelegter Tiefe berechnen und sie dann komprimieren:

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

     Zeigt eine kompakte Geohash-Abdeckung mit einer festen Bittiefe für eine bestimmte Geometrie.
    Kompakte Geohash-Abdeckung mit einer festen Bittiefe für eine gegebene Geometrie