open_street_map 1.0 → 1.2.1
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 +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
|