IBM Cloud Docs
ジオハッシュ関数

ジオハッシュ関数

時空間ライブラリーには、ロケーション・データ分析で近接検索 (緯度と経度のエンコードおよび近接地点のグループ化) を行えるようにジオハッシュ関数が含まれています。

ジオハッシュのエンコード

  • 地理的位置を指定した地点オブジェクトを、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_eastget_westget_northget_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)
    

ジオハッシュのカバー範囲

境界ボックスを完全にカバーする一連のジオハッシュを算出するには、以下のようにします。

  1. サンプルのポリゴンを準備します:

    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. 固定ビット深度で、指定した形状のジオハッシュのカバー範囲を算出します。

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

    指定された形状の固定ビット深度でのジオハッシュ・カバレッジを示します。
    図 1. 指定された形状の固定ビット深度でのジオハッシュ・カバレッジ

  3. 固定ビット深度で、指定した形状のバッファーありのジオハッシュのカバー範囲を算出します。

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

    指定された形状の固定ビット深度でのバッファー付きジオハッシュ・カバレッジを示します。
    図 2。 所定の形状の固定ビット深度でのバッファー付きジオハッシュ・カバレッジ

  4. まず固定深度のカバー範囲を算出してから、そのカバー範囲を圧縮して、コンパクトなジオハッシュのカバー範囲を算出します。

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

    指定された形状の固定ビット深度でのコンパクトジオハッシュ・カバレッジを示します。
    図 3. 指定された形状の固定ビット深度でのコンパクトジオハッシュ・カバレッジ