ジオハッシュ関数
時空間ライブラリーには、ロケーション・データ分析で近接検索 (緯度と経度のエンコードおよび近接地点のグループ化) を行えるようにジオハッシュ関数が含まれています。
ジオハッシュのエンコード
- 地理的位置を指定した地点オブジェクトを、base-32 エンコードの文字または数字の文字列にエンコードします。
>>> p = stc.point(37, -74) >>> stc.geohash.string_hash_encode(p) 'dqe6kpdue5btnubpm9npcd0000' >>> stc.geohash.string_hash_encode(p, precision=5) 'dqe6k'
- 地理的位置を指定した地点オブジェクトを、BitVector にエンコードします。
>>> p = stc.point(37, -74) >>> bv = stc.geohash.number_hash_encode(p) >>> bv BitVector(01100101100110100110100101010101100110100110100101010101100110100110100101010101100110100110100101010101101100000000000000000000) >>> bv.truncate(10) >>> bv BitVector(0110010110)
- 緯度と経度の座標のペアを直接ジオハッシュにエンコードします。
>>> stc.geohash.encode(37, -74, precision=5, mode='base32') 'dqe6k' >>> stc.geohash.encode(37, -74, precision=10, mode='bit') '0110010110'
ジオハッシュのデコード
- base 32 の地理的な数字または文字列を、10 進数の経度または緯度の座標の地点オブジェクトにデコードします。
>>> stc.geohash.string_hash_decode('dqeh4') Point(37.265625, -74.443359375)
- base-32 エンコードの文字を地点オブジェクトにデコードします。
>>> p = stc.point(37, -74) >>> bv = geohash.number_hash_encode(p) >>> geohash.number_hash_decode(bv) Point(37.0, -74.0)
- base-32 またはバイナリーの文字列を緯度と経度の座標のペアにデコードします。
>>> stc.geohash.decode('dqe6k', mode='base32') (36.9580078125, -74.00390625) >>> stc.geohash.decode('0110010110', mode='bit') (33.75, -78.75)
近接ジオハッシュ
近接ジオハッシュ関数は、指定されたコードの近くに位置する近接ジオハッシュ・コードを戻します。
ある地点の近接ジオハッシュ
-
指定した緯度、経度、およびビット深度の近接ジオハッシュを取得します。
>>> 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)]
-
指定した緯度、経度、およびビット深度の近接ジオハッシュを取得し、指定した距離範囲内の結果のみを戻します。
>>>geohash.get_all_neighbors(70, -40, 25, distance_precision=1000) [BitVector(0111110000001111110000001), BitVector(0111110000001111110000100), BitVector(0111110000001111110000011), BitVector(0111110000001111110000110)]
近接ジオハッシュ関数
expand
: 中心のコードとその近接コードを戻します。 1 つのロケーションの 9 つのジオハッシュがすべて戻されます。>>> stc.geohash.expand('ezs42') ['ezefp', 'ezs40', 'ezs41', 'ezefr', 'ezs42', 'ezs43', 'ezefx', 'ezs48', 'ezs49']
neighbors
: 指定されたジオハッシュを除く 8 つのジオハッシュを戻します。>>> stc.geohash.neighbors('ezs42') ['ezefp', 'ezs40', 'ezs41', 'ezefr', 'ezs43', 'ezefx', 'ezs48', 'ezs49']
get_east
、get_west
、get_north
、get_south
: 指定されたジオハッシュの東西南北のジオハッシュを戻します。>>> stc.geohash.get_east('ezs42') 'ezs43'
- ジオハッシュを
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)
ジオハッシュのカバー範囲
境界ボックスを完全にカバーする一連のジオハッシュを算出するには、以下のようにします。
-
サンプルのポリゴンを準備します:
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)
-
固定ビット深度で、指定した形状のジオハッシュのカバー範囲を算出します。
cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36)
図 1. 指定された形状の固定ビット深度でのジオハッシュ・カバレッジ -
固定ビット深度で、指定した形状のバッファーありのジオハッシュのカバー範囲を算出します。
buffered_cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36, distance=50)
図 2。 所定の形状の固定ビット深度でのバッファー付きジオハッシュ・カバレッジ -
まず固定深度のカバー範囲を算出してから、そのカバー範囲を圧縮して、コンパクトなジオハッシュのカバー範囲を算出します。
raw_cover = stc.geohash.geohash_cover_at_bit_depth(poly, 36) compact_cover = stc.geohash.geohash_compression(raw_cover)
図 3. 指定された形状の固定ビット深度でのコンパクトジオハッシュ・カバレッジ