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:
-
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)
-
Berechnen Sie die Geohash-Abdeckung mit einer festgelegten Bittiefe für eine angegebene Geometrie:
cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36)
Geohash-Abdeckung bei einer festen Bittiefe für eine gegebene Geometrie -
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)
Gepufferte Geohash-Abdeckung mit einer festen Bittiefe für eine gegebene Geometrie -
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)
Kompakte Geohash-Abdeckung mit einer festen Bittiefe für eine gegebene Geometrie