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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
require 'geocoder/results/base'
module Geocoder::Result
class Yandex < Base
def coordinates
@data['GeoObject']['Point']['pos'].split(' ').reverse.map(&:to_f)
end
def address(format = :full)
@data['GeoObject']['metaDataProperty']['GeocoderMetaData']['text']
end
def city
if state.empty? and address_details and address_details.has_key? 'Locality'
address_details['Locality']['LocalityName']
elsif sub_state.empty? and address_details and address_details.has_key? 'AdministrativeArea' and
address_details['AdministrativeArea'].has_key? 'Locality'
address_details['AdministrativeArea']['Locality']['LocalityName']
elsif not sub_state_city.empty?
sub_state_city
else
""
end
end
def country
if address_details
address_details['CountryName']
else
""
end
end
def country_code
if address_details
address_details['CountryNameCode']
else
""
end
end
def state
if address_details and address_details['AdministrativeArea']
address_details['AdministrativeArea']['AdministrativeAreaName']
else
""
end
end
def sub_state
if !state.empty? and address_details and address_details['AdministrativeArea']['SubAdministrativeArea']
address_details['AdministrativeArea']['SubAdministrativeArea']['SubAdministrativeAreaName']
else
""
end
end
def state_code
""
end
def postal_code
""
end
def premise_name
address_details['Locality']['Premise']['PremiseName']
end
def street
thoroughfare_data && thoroughfare_data['ThoroughfareName']
end
def street_number
thoroughfare_data && thoroughfare_data['Premise'] && thoroughfare_data['Premise']['PremiseNumber']
end
def kind
@data['GeoObject']['metaDataProperty']['GeocoderMetaData']['kind']
end
def precision
@data['GeoObject']['metaDataProperty']['GeocoderMetaData']['precision']
end
def viewport
envelope = @data['GeoObject']['boundedBy']['Envelope'] || fail
east, north = envelope['upperCorner'].split(' ').map(&:to_f)
west, south = envelope['lowerCorner'].split(' ').map(&:to_f)
[south, west, north, east]
end
private # ----------------------------------------------------------------
def thoroughfare_data
locality_data && locality_data['Thoroughfare']
end
def locality_data
dependent_locality && subadmin_locality && admin_locality
end
def admin_locality
address_details && address_details['AdministrativeArea'] &&
address_details['AdministrativeArea']['Locality']
end
def subadmin_locality
address_details && address_details['AdministrativeArea'] &&
address_details['AdministrativeArea']['SubAdministrativeArea'] &&
address_details['AdministrativeArea']['SubAdministrativeArea']['Locality']
end
def dependent_locality
address_details && address_details['AdministrativeArea'] &&
address_details['AdministrativeArea']['SubAdministrativeArea'] &&
address_details['AdministrativeArea']['SubAdministrativeArea']['Locality'] &&
address_details['AdministrativeArea']['SubAdministrativeArea']['Locality']['DependentLocality']
end
def address_details
@data['GeoObject']['metaDataProperty']['GeocoderMetaData']['AddressDetails']['Country']
end
def sub_state_city
if !sub_state.empty? and address_details and address_details['AdministrativeArea']['SubAdministrativeArea'].has_key? 'Locality'
address_details['AdministrativeArea']['SubAdministrativeArea']['Locality']['LocalityName'] || ""
else
""
end
end
end
end
|