File: photon.rb

package info (click to toggle)
ruby-geocoder 1.8.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 900 kB
  • sloc: ruby: 8,419; makefile: 3
file content (119 lines) | stat: -rw-r--r-- 2,044 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
require 'geocoder/results/base'

module Geocoder::Result
  class Photon < Base
    def name
      properties['name']
    end

    def address(_format = :full)
      parts = []
      parts << name if name
      parts << street_address if street_address
      parts << city
      parts << state if state
      parts << postal_code
      parts << country

      parts.join(', ')
    end

    def street_address
      return unless street
      return street unless house_number

      "#{house_number} #{street}"
    end

    def house_number
      properties['housenumber']
    end

    def street
      properties['street']
    end

    def postal_code
      properties['postcode']
    end

    def city
      properties['city']
    end

    def state
      properties['state']
    end

    def state_code
      ''
    end

    def country
      properties['country']
    end

    def country_code
      ''
    end

    def coordinates
      return unless geometry
      return unless geometry[:coordinates]

      geometry[:coordinates].reverse
    end

    def geometry
      return unless data['geometry']

      symbol_hash data['geometry']
    end

    def bounds
      properties['extent']
    end

    # Type of the result (OSM object type), one of:
    #
    #   :node
    #   :way
    #   :relation
    #
    def type
      {
        'N' => :node,
        'W' => :way,
        'R' => :relation
      }[properties['osm_type']]
    end

    def osm_id
      properties['osm_id']
    end

    # See: https://wiki.openstreetmap.org/wiki/Tags
    def osm_tag
      return unless properties['osm_key']
      return properties['osm_key'] unless properties['osm_value']

      "#{properties['osm_key']}=#{properties['osm_value']}"
    end

    private

    def properties
      @properties ||= data['properties'] || {}
    end

    def symbol_hash(orig_hash)
      {}.tap do |result|
        orig_hash.each_key do |key|
          next unless orig_hash[key]

          result[key.to_sym] = orig_hash[key]
        end
      end
    end
  end
end