geon 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6577de5248ca2252cc91f3d93b76631c3ad6e367
4
- data.tar.gz: 9763578bb38f6ef4a3b84770280c4339d7051145
3
+ metadata.gz: 1d54d0a320ac8a495594bb14fff9be7e51f0a769
4
+ data.tar.gz: 6c9dffd024c17ca6bdcdebef8652feb28f7009b0
5
5
  SHA512:
6
- metadata.gz: 9eefd92a291f5d668ab66748be6f3394432d5cfef8cf8b9d5fcdcf2fa564a567b598cfd82e83e48d2eb2f22fad68b7f3d9cf21ba285324958a5b4a3c672ea602
7
- data.tar.gz: 335bcf83de9c7fec219e8836822b9f98d04a720d2f24d47c2b2f9eee11aa1fbc3c56d4be6cd6ff41fde67ac3cc2b8834c0311090ea1c93ebc48d723f72d595f9
6
+ metadata.gz: 063d97b648c6dcb978150be90528be3e84d4434dd36e1c8fd861599f1a578d1e8f8e7305171472782bee2d3e383fa0cabc6e64eea264dd5f02ed9a045dfd4dc3
7
+ data.tar.gz: 39e077b6f1f27e561dafef3f72bc0cfe1a2d75b1029674960195e2effee55ef4d5652691b16e47d6859303b47cd5ef801dd1493b5b040d91c6057902330b7900
@@ -1,13 +1,16 @@
1
1
  module Geon
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
4
4
 
5
5
  require 'net/http'
6
6
 
7
+ require 'geon/geo_object'
7
8
  require 'geon/http_loader'
8
9
  require 'geon/invalid_key_error'
9
10
  require 'geon/wikimapia_error'
10
11
  require 'geon/wikimapia_api'
11
12
  require 'geon/wikimapia'
13
+ require 'geon/yandex_api'
14
+ require 'geon/yandex'
12
15
 
13
16
 
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+
3
+ module Geon
4
+ class GeoObject < ::BasicObject
5
+
6
+ attr_accessor :coord, :type, :address, :detail
7
+
8
+ def initialize
9
+ @coord = [0, 0]
10
+ @type = :house
11
+ @address = ''
12
+ @detail = {}
13
+ end
14
+
15
+ def longitude
16
+ @coord[1]
17
+ end
18
+
19
+ def latitude
20
+ @coord[0]
21
+ end
22
+
23
+ def to_hash
24
+ {coord: @coord, type: @type, address: @address, detail: @detail}
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,40 @@
1
+ module Geon
2
+ class Yandex
3
+ HOST = 'geocode-maps.yandex.ru'
4
+
5
+ def initialize(args = {})
6
+ loader = args[:loader] ? args[:loader] : HttpLoader.new(HOST)
7
+ @api = YandexApi.new(loader)
8
+ end
9
+
10
+ def forward(lat, long)
11
+ raw = @api.geocode({lat: lat, long: long})
12
+ geo_object = raw_geo_object raw
13
+ result = GeoObject.new
14
+
15
+ result.address = geo_object['metaDataProperty']['GeocoderMetaData']['text']
16
+ raw_coord = geo_object['Point']['pos'].split
17
+ result.coord = [raw_coord[1].to_f, raw_coord[0].to_f]
18
+
19
+ result
20
+ end
21
+
22
+ def reverse(query)
23
+ raw = @api.geocode({query: query})
24
+ geo_object = raw_geo_object raw
25
+ result = GeoObject.new
26
+
27
+ result.address = geo_object['metaDataProperty']['GeocoderMetaData']['text']
28
+ raw_coord = geo_object['Point']['pos'].split
29
+ result.coord = [raw_coord[1].to_f, raw_coord[0].to_f]
30
+
31
+ raw
32
+ end
33
+
34
+ private
35
+
36
+ def raw_geo_object(response)
37
+ response['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,36 @@
1
+ module Geon
2
+ class YandexApi
3
+ PATH = '/1.x/'
4
+
5
+ # @param [Geon::HttpLoader] downloader
6
+ # @param [Hash] param
7
+ def initialize(downloader, param = {})
8
+ @downloader = downloader
9
+
10
+ @general_param = {
11
+ results: 1,
12
+ format: 'json',
13
+ kind: 'house',
14
+ }.merge(param)
15
+
16
+ end
17
+
18
+ def geocode(args = {})
19
+ param = @general_param
20
+ if args[:lat] and args[:long]
21
+ param[:geocode] = "#{args[:long]},#{args[:lat]}"
22
+ end
23
+
24
+ if args[:query]
25
+ param[:geocode] = args[:query]
26
+ end
27
+
28
+ response = @downloader.get PATH , param
29
+ result = JSON.parse(CGI::unescape response)
30
+
31
+ result
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,22 @@
1
+ {"response": {
2
+ "GeoObjectCollection": {
3
+ "metaDataProperty": {
4
+ "GeocoderResponseMetaData": {
5
+ "request": "55.757962,37.611006",
6
+ "found": "0",
7
+ "results": "1",
8
+ "boundedBy": {
9
+ "Envelope": {
10
+ "lowerCorner": "55.755465 37.608506",
11
+ "upperCorner": "55.760460 37.613508"
12
+ }
13
+ },
14
+ "Point": {
15
+ "pos": "55.757962 37.611006"
16
+ },
17
+ "kind": "house"
18
+ }
19
+ },
20
+ "featureMember": []
21
+ }
22
+ }}
@@ -0,0 +1 @@
1
+ {"response":{"GeoObjectCollection":{"metaDataProperty":{"GeocoderResponseMetaData":{"request":"Москва, Тверская улица, дом 7","found":"5","results":"1"}},"featureMember":[{"GeoObject":{"metaDataProperty":{"GeocoderMetaData":{"kind":"house","text":"Россия, Москва, Тверская улица, 7","precision":"exact","AddressDetails":{"Country":{"AddressLine":"Москва, Тверская улица, 7","CountryNameCode":"RU","CountryName":"Россия","Locality":{"LocalityName":"Москва","Thoroughfare":{"ThoroughfareName":"Тверская улица","Premise":{"PremiseNumber":"7"}}}}}}},"description":"Москва, Россия","name":"Тверская улица, 7","boundedBy":{"Envelope":{"lowerCorner":"37.608958 55.756807","upperCorner":"37.613054 55.759117"}},"Point":{"pos":"37.611006 55.757962"}}}]}}}
@@ -0,0 +1,15 @@
1
+ describe Geon::Yandex, 'Yandex real geocode' do
2
+
3
+ it 'Разбор json ответа с одним результатом' do
4
+
5
+ yandex = Geon::Yandex.new
6
+
7
+ result = yandex.forward(55.757962, 37.611006)
8
+
9
+ expected = Geon::GeoObject.new
10
+ expected.address = 'Россия, Москва, Тверская улица, 7'
11
+ expected.coord = [55.757962, 37.611006] #long, lat
12
+
13
+ expected.to_hash.should eq result.to_hash
14
+ end
15
+ end
@@ -0,0 +1,19 @@
1
+
2
+ describe Geon::Yandex, 'Yandex geocode' do
3
+
4
+ it 'simple request' do
5
+
6
+ loader = double("Geon::HttpLoader")
7
+ loader.stub(:get) { sample('yandex/yandex_geocode1.json') }
8
+
9
+ yandex = Geon::Yandex.new({loader: loader})
10
+
11
+ result = yandex.forward(55.757962, 37.611006)
12
+
13
+ expected = Geon::GeoObject.new
14
+ expected.address = 'Россия, Москва, Тверская улица, 7'
15
+ expected.coord = [55.757962, 37.611006] #long, lat
16
+
17
+ expected.to_hash.should eq result.to_hash
18
+ end
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Suslov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-13 00:00:00.000000000 Z
11
+ date: 2013-07-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Geo data provider
14
14
  email:
@@ -21,11 +21,14 @@ files:
21
21
  - Gemfile
22
22
  - geon.gemspec
23
23
  - lib/geon.rb
24
+ - lib/geon/geo_object.rb
24
25
  - lib/geon/http_loader.rb
25
26
  - lib/geon/invalid_key_error.rb
26
27
  - lib/geon/wikimapia.rb
27
28
  - lib/geon/wikimapia_api.rb
28
29
  - lib/geon/wikimapia_error.rb
30
+ - lib/geon/yandex.rb
31
+ - lib/geon/yandex_api.rb
29
32
  - spec/helper.rb
30
33
  - spec/samples/wikimapia/error__wrong_key.json
31
34
  - spec/samples/wikimapia/place.getbyarea__good.json
@@ -33,9 +36,13 @@ files:
33
36
  - spec/samples/wikimapia/place.getbyid__good.xml
34
37
  - spec/samples/wikimapia/place.getnearest__good.json
35
38
  - spec/samples/wikimapia/place.getnearest__good.xml
39
+ - spec/samples/yandex/empty.json
40
+ - spec/samples/yandex/yandex_geocode1.json
36
41
  - spec/wikimapia_api_spec.rb
37
42
  - spec/wikimapia_real_spec.rb
38
43
  - spec/wikimapia_spec.rb
44
+ - spec/yandex_real_spec.rb
45
+ - spec/yandex_spec.rb
39
46
  homepage: https://github.com/AlmazKo/geon
40
47
  licenses:
41
48
  - MIT
@@ -64,3 +71,5 @@ test_files:
64
71
  - spec/wikimapia_api_spec.rb
65
72
  - spec/wikimapia_real_spec.rb
66
73
  - spec/wikimapia_spec.rb
74
+ - spec/yandex_real_spec.rb
75
+ - spec/yandex_spec.rb