open_street_map 1.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +0 -1
- data/.ruby-version +1 -0
- data/LICENSE.txt +1 -1
- data/README.md +26 -7
- data/lib/open_street_map/client.rb +14 -7
- data/lib/open_street_map/client/request.rb +40 -0
- data/lib/open_street_map/version.rb +1 -1
- data/open_street_map.gemspec +4 -4
- metadata +13 -13
- data/lib/open_street_map/client/reverse.rb +0 -26
- data/lib/open_street_map/client/search.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f61b519813aa4291018e672ee071d49f8ad671075c6b1b2b4a9839edafe7a9bf
|
4
|
+
data.tar.gz: 86c49fd6b466b9591bba96dd41772ae6a7bdab3b4878a2a63dcd773227f16d63
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 18bb37b6621fdd145f4233d9dd3f6e77c857e3472816626ffeeab8abfb6832f6a905df9f2b1d663604e0d5c480921197911ff8ca87af7c3efe0e887b4b9efd77
|
7
|
+
data.tar.gz: 663e12e827c02e9290d16b852a8dac4fedd9e5ff35390316df2cba915cc345354c0697af777220eed276122e2df1f1e3c66278c38f00b00b20b1a90cba806fdd
|
data/.rubocop.yml
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.5.1
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
# OpenStreetMap
|
2
2
|
|
3
|
-
Integration of OpenStreetMap api from [Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim)
|
3
|
+
Integration of OpenStreetMap api from [Nominatim](https://wiki.openstreetmap.org/wiki/Nominatim)
|
4
|
+
|
5
|
+
## Prerequisites
|
6
|
+
|
7
|
+
This project requires:
|
8
|
+
|
9
|
+
* Ruby >= 2.3.1, but can work with earlier versions
|
10
|
+
* HTTParty >= 0.16
|
4
11
|
|
5
12
|
## Installation
|
6
13
|
|
@@ -31,10 +38,10 @@ Or install it yourself as:
|
|
31
38
|
Request for search objects is #search.
|
32
39
|
|
33
40
|
```ruby
|
34
|
-
client.search(q: '135 pilkington avenue, birmingham', format: 'json', addressdetails: '1')
|
41
|
+
client.search(q: '135 pilkington avenue, birmingham', format: 'json', addressdetails: '1', accept_language: 'ru')
|
35
42
|
```
|
36
43
|
q - query
|
37
|
-
format - one of the [xml|json|jsonv2]
|
44
|
+
format - one of the [xml|json|jsonv2], default - xml
|
38
45
|
viewbox - The preferred area to find search results like <x1>,<y1>,<x2>,<y2>
|
39
46
|
bounded - Restrict the results to only items contained with the viewbox, one of the [0|1]
|
40
47
|
addressdetails - Include a breakdown of the address into elements, one of the [0|1]
|
@@ -42,8 +49,12 @@ Request for search objects is #search.
|
|
42
49
|
limit - Limit the number of returned results, integer
|
43
50
|
extratags - Include additional information in the result if available, one of the [0|1]
|
44
51
|
namedetails - Include a list of alternative names in the results, one of the [0|1]
|
52
|
+
accept_language - Preferred language order for showing search results, default - en
|
53
|
+
email - If you are making large numbers of request please include a valid email address
|
54
|
+
user_agent - User-Agent identifying the application, default - webgents/open_street_map_gem_random
|
55
|
+
hostname - allow overwriting the host name for users who have their own Nominatim installation, default - https://nominatim.openstreetmap.org/
|
45
56
|
|
46
|
-
####
|
57
|
+
#### Responses
|
47
58
|
|
48
59
|
```ruby
|
49
60
|
[
|
@@ -80,17 +91,21 @@ Request for search objects is #search.
|
|
80
91
|
Request for objects by coordinates is #reverse.
|
81
92
|
|
82
93
|
```ruby
|
83
|
-
client.reverse(format: 'json', lat: '52.594417', lon: '39.493115')
|
94
|
+
client.reverse(format: 'json', lat: '52.594417', lon: '39.493115', accept_language: 'ru')
|
84
95
|
```
|
85
|
-
format - one of the [xml|json|jsonv2]
|
96
|
+
format - one of the [xml|json|jsonv2], default - xml
|
86
97
|
zoom - Level of detail required where 0 is country and 18 is house/building, one of the [0-18]
|
87
98
|
addressdetails - Include a breakdown of the address into elements, one of the [0|1]
|
88
99
|
lat - Latitude, required
|
89
100
|
lon - Longitude, required
|
90
101
|
extratags - Include additional information in the result if available, one of the [0|1]
|
91
102
|
namedetails - Include a list of alternative names in the results, one of the [0|1]
|
103
|
+
accept_language - Preferred language order for showing search results, default - en
|
104
|
+
email - If you are making large numbers of request please include a valid email address
|
105
|
+
user_agent - User-Agent identifying the application, default - webgents/open_street_map_gem_random
|
106
|
+
hostname - allow overwriting the host name for users who have their own Nominatim installation, default - https://nominatim.openstreetmap.org/
|
92
107
|
|
93
|
-
####
|
108
|
+
#### Responses
|
94
109
|
|
95
110
|
```ruby
|
96
111
|
{
|
@@ -124,3 +139,7 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/WebGen
|
|
124
139
|
## License
|
125
140
|
|
126
141
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
142
|
+
|
143
|
+
## Disclaimer
|
144
|
+
|
145
|
+
Use this package at your own peril and risk, the author tried to simplify the use of [Nominatim service](https://wiki.openstreetmap.org/wiki/Nominatim) for integration into Ruby on Rails web applications.
|
@@ -1,16 +1,23 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
require_relative 'client/reverse'
|
4
|
-
require_relative 'client/search'
|
1
|
+
require 'httparty'
|
2
|
+
require_relative 'client/request'
|
5
3
|
|
6
4
|
module OpenStreetMap
|
7
5
|
# Client requests
|
8
6
|
class Client
|
9
|
-
include
|
10
|
-
include OpenStreetMap::Client::
|
7
|
+
include HTTParty
|
8
|
+
include OpenStreetMap::Client::Request
|
11
9
|
|
12
10
|
BASE_URI = 'https://nominatim.openstreetmap.org/'.freeze
|
11
|
+
DEFAULT_USER_AGENT = "webgents/open_street_map_gem_#{SecureRandom.urlsafe_base64}".freeze
|
13
12
|
|
14
|
-
|
13
|
+
# Search objects by query
|
14
|
+
def search(args = {})
|
15
|
+
call('search', args)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Reverse geocoding generates an address from a latitude and longitude
|
19
|
+
def reverse(args = {})
|
20
|
+
call('reverse', args)
|
21
|
+
end
|
15
22
|
end
|
16
23
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module OpenStreetMap
|
2
|
+
class Client
|
3
|
+
# methods for request
|
4
|
+
module Request
|
5
|
+
private
|
6
|
+
|
7
|
+
# make request to API
|
8
|
+
def call(type, args)
|
9
|
+
url = hostname(args[:hostname]) + type
|
10
|
+
headers = { 'User-Agent' => user_agent(args[:user_agent]) }
|
11
|
+
self.class.get(url, query: generate_body(type, args), headers: headers).parsed_response
|
12
|
+
end
|
13
|
+
|
14
|
+
# generate body from args
|
15
|
+
def generate_body(type, args)
|
16
|
+
args['accept-language'.to_sym] = args[:accept_language] if args.key?(:accept_language)
|
17
|
+
args.select { |key, _| valid_args(type).include?(key) }
|
18
|
+
end
|
19
|
+
|
20
|
+
# get list of permitted args
|
21
|
+
def valid_args(type)
|
22
|
+
case type
|
23
|
+
when 'search' then %i[q format addressdetails extratags namedetails viewbox bounded exclude_place_ids limit accept-language email]
|
24
|
+
when 'reverse' then %i[format lat lon zoom addressdetails extratags namedetails accept-language email]
|
25
|
+
else []
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# select hostname for request
|
30
|
+
def hostname(value)
|
31
|
+
value || BASE_URI
|
32
|
+
end
|
33
|
+
|
34
|
+
# select user_agent for request
|
35
|
+
def user_agent(value)
|
36
|
+
value || DEFAULT_USER_AGENT
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
data/open_street_map.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.email = ['kortirso@gmail.com']
|
10
10
|
|
11
11
|
spec.summary = 'OpenStrretMap API'
|
12
|
-
spec.description = 'Integration with
|
12
|
+
spec.description = 'Integration with OpenStreetMap API'
|
13
13
|
spec.homepage = 'https://github.com/WebGents/open_street_map'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
@@ -20,11 +20,11 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ['lib']
|
22
22
|
|
23
|
-
spec.required_ruby_version = '>= 2.5.
|
23
|
+
spec.required_ruby_version = '>= 2.5.1'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
26
|
-
spec.add_development_dependency 'rake', '~>
|
26
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
27
27
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
28
28
|
spec.add_development_dependency 'rubocop', '~> 0.57.2'
|
29
|
-
spec.add_dependency '
|
29
|
+
spec.add_dependency 'httparty', '~> 0.17'
|
30
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: open_street_map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JungleCoders
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-06-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '13.0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '13.0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -68,20 +68,20 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 0.57.2
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: httparty
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
|
-
- -
|
74
|
+
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: '0.17'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
|
-
- -
|
81
|
+
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
84
|
-
description: Integration with
|
83
|
+
version: '0.17'
|
84
|
+
description: Integration with OpenStreetMap API
|
85
85
|
email:
|
86
86
|
- kortirso@gmail.com
|
87
87
|
executables: []
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- ".gitignore"
|
92
92
|
- ".rspec"
|
93
93
|
- ".rubocop.yml"
|
94
|
+
- ".ruby-version"
|
94
95
|
- ".travis.yml"
|
95
96
|
- CODE_OF_CONDUCT.md
|
96
97
|
- Gemfile
|
@@ -101,8 +102,7 @@ files:
|
|
101
102
|
- bin/setup
|
102
103
|
- lib/open_street_map.rb
|
103
104
|
- lib/open_street_map/client.rb
|
104
|
-
- lib/open_street_map/client/
|
105
|
-
- lib/open_street_map/client/search.rb
|
105
|
+
- lib/open_street_map/client/request.rb
|
106
106
|
- lib/open_street_map/version.rb
|
107
107
|
- open_street_map.gemspec
|
108
108
|
homepage: https://github.com/WebGents/open_street_map
|
@@ -117,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
117
117
|
requirements:
|
118
118
|
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: 2.5.
|
120
|
+
version: 2.5.1
|
121
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - ">="
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module OpenStreetMap
|
2
|
-
class Client
|
3
|
-
# Reverse geocoding generates an address from a latitude and longitude
|
4
|
-
module Reverse
|
5
|
-
def reverse(args = {})
|
6
|
-
response = RestClient.get("#{BASE_URI}reverse?#{reverse_args_to_url(args)}")
|
7
|
-
args[:format] == 'xml' ? response.body : JSON.parse(response.body)
|
8
|
-
rescue
|
9
|
-
{ 'errors' => 'Bad request' }
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def reverse_args_to_url(args, result = [])
|
15
|
-
valid_reverse_args(args).each do |key, value|
|
16
|
-
result << "#{key}=#{value}"
|
17
|
-
end
|
18
|
-
result.join('&')
|
19
|
-
end
|
20
|
-
|
21
|
-
def valid_reverse_args(args)
|
22
|
-
args.slice(:format, :lat, :lon, :zoom, :addressdetails, :extratags, :namedetails)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module OpenStreetMap
|
2
|
-
class Client
|
3
|
-
# Search objects by query
|
4
|
-
module Search
|
5
|
-
def search(args = {})
|
6
|
-
response = RestClient.get("#{BASE_URI}search?#{search_arg(args[:q])}&#{search_args_to_url(args)}")
|
7
|
-
args[:format] == 'xml' ? response.body : JSON.parse(response.body)
|
8
|
-
rescue
|
9
|
-
{ 'errors' => 'Bad request' }
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def search_arg(arg)
|
15
|
-
"q=#{arg.gsub(/\s+/, '+')}"
|
16
|
-
end
|
17
|
-
|
18
|
-
def search_args_to_url(args, result = [])
|
19
|
-
valid_search_args(args).each do |key, value|
|
20
|
-
result << "#{key}=#{value}"
|
21
|
-
end
|
22
|
-
result.join('&')
|
23
|
-
end
|
24
|
-
|
25
|
-
def valid_search_args(args)
|
26
|
-
args.slice(:format, :addressdetails, :extratags, :namedetails, :viewbox, :bounded, :exclude_place_ids, :limit)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|