Class: PbfReverseGeocoder::SimplePbfParser

Inherits:
Object
  • Object
show all
Defined in:
lib/pbf_reverse_geocoder/simple_pbf_parser.rb

Constant Summary collapse

WIRE_TYPE_VARINT =

Protocol Buffersのワイヤタイプ

0
WIRE_TYPE_64BIT =
1
WIRE_TYPE_LENGTH_DELIMITED =
2
WIRE_TYPE_32BIT =
5

Class Method Summary collapse

Class Method Details

.parse(data) ⇒ Hash

PBFバイナリをパースしてMVTタイルデータを返す

Parameters:

  • data (String)

    バイナリデータ

Returns:

  • (Hash)

    パースされたタイルデータ



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/pbf_reverse_geocoder/simple_pbf_parser.rb', line 19

def self.parse(data)
  buffer = data.bytes
  pos = 0
  tile = { layers: [] }

  while pos < buffer.length
    field_key, pos = read_varint(buffer, pos)
    field_number = field_key >> 3
    wire_type = field_key & 0x7

    case wire_type
    when WIRE_TYPE_LENGTH_DELIMITED
      length, pos = read_varint(buffer, pos)
      value_bytes = buffer[pos, length]
      pos += length

      # Field 3: layers
      if field_number == 3
        layer = parse_layer(value_bytes)
        tile[:layers] << layer if layer
      end
    else
      # その他のフィールドはスキップ
      pos = skip_field(buffer, pos, wire_type)
    end
  end

  tile
end