mapricot-api 0.3.0 → 0.5.0

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -8
  3. data/lib/mapricot/api.rb +16 -9
  4. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 738ae3f3ba9a75663dfabf87e3009bb28f583a6b4f8beb9b3ff43fc823e95762
4
- data.tar.gz: e883dc44c7857e96e357bfcce39ecfb98280e3c7a4c2b083a805ff006d2be46f
3
+ metadata.gz: 24849159506d71db67b1e674bf3cf9377f218c78260002730a2f1dab55b713f9
4
+ data.tar.gz: '07499083f22bd04f51f65704bb24e204c0f7767564e84de4f92114c6836aa09e'
5
5
  SHA512:
6
- metadata.gz: 0d71ee623decdd044207a89c64996367c031c740b6e3c7f72d836398c1f2f188c58b69a08456a2a494c9e94db2dea5d2ebc2d5de3d8972359b0399cda682af04
7
- data.tar.gz: 299ffab402dfea95b853569fb4c25c145b525252e2fab8b90bf8c4e9375865b7f416fbda2de6d659c54e18dff3cd3494b5c431f67a998257725ab1122f5aebcc
6
+ metadata.gz: 1b921d6fabb89653dbde12a181390f618e547dada82ea5587108d2e0acc069d8b43e1c427d30d96cf1abe2807933b670462f779aebe4e4499b0b20c23a045b13
7
+ data.tar.gz: e1f406517e97e473fcc7eece8890e609d26c2921523cb88e18c23f72bc84258d553e540b9e9724d883b057722c6137fd79327b04e75fb72b5d331de1e569dc88
data/README.md CHANGED
@@ -28,14 +28,15 @@ Each method returns the API's JSON as a Hash with string keys, with the same fie
28
28
 
29
29
  | Method | Endpoint |
30
30
  | --- | --- |
31
- | `client.search(q, focus:, country:, limit:, lang:)` | [`GET /v1/search`](https://mapricot.com/docs/geocoding/#find-an-address) |
32
- | `client.autocomplete(q, focus:, country:, limit:, lang:)` | [`GET /v1/autocomplete`](https://mapricot.com/docs/places/#suggest-as-people-type) |
33
- | `client.reverse(lat, lon, limit:, lang:)` | [`GET /v1/reverse`](https://mapricot.com/docs/geocoding/#find-the-address-at-a-point) |
34
- | `client.nearby(lat, lon, category:, radius:, limit:, lang:)` | [`GET /v1/nearby`](https://mapricot.com/docs/places/#list-places-around-a-point) |
35
- | `client.place(id, lang:)` | [`GET /v1/places/{id}`](https://mapricot.com/docs/places/#look-up-a-saved-place) |
36
- | `client.route(waypoints, mode:, geometries:)` | [`POST /v1/route`](https://mapricot.com/docs/routing/#get-a-route) |
37
- | `client.ip(address)` | [`GET /v1/ip/{ip}`](https://mapricot.com/docs/ip-geolocation/#look-up-an-address) |
38
- | `client.account` | `GET /v1/account`, which checks a key and is never billed |
31
+ | `client.search(q, focus:, country:, limit:, lang:)` | [`GET /geocoding/v1/search`](https://mapricot.com/docs/geocoding/#find-an-address) |
32
+ | `client.autocomplete(q, focus:, country:, limit:, lang:)` | [`GET /geocoding/v1/autocomplete`](https://mapricot.com/docs/geocoding/#suggest-as-people-type) |
33
+ | `client.reverse(lat, lon, limit:, lang:)` | [`GET /geocoding/v1/reverse`](https://mapricot.com/docs/geocoding/#find-the-address-at-a-point) |
34
+ | `client.nearby(lat, lon, category:, radius:, limit:, lang:)` | [`GET /places/v1/nearby`](https://mapricot.com/docs/places/#list-places-around-a-point) |
35
+ | `client.place(id, lang:)` | [`GET /places/v1/{id}`](https://mapricot.com/docs/places/#look-up-a-saved-place) |
36
+ | `client.route(waypoints, mode:, geometries:)` | [`POST /routing/v1/route`](https://mapricot.com/docs/routing/#get-a-route) |
37
+ | `client.isochrone(location, minutes, mode:)` | [`POST /routing/v1/isochrone`](https://mapricot.com/docs/routing/#get-an-isochrone) |
38
+ | `client.ip(address)` | [`GET /ip-geolocation/v1/{ip}`](https://mapricot.com/docs/ip-geolocation/#look-up-an-address) |
39
+ | `client.account` | `GET /account`, which checks a key and is never billed |
39
40
 
40
41
  Every keyword argument is optional. `focus` and each waypoint are `{ lat:, lon: }`. `country` and `category` take an Array or a comma-separated String.
41
42
 
@@ -47,6 +48,13 @@ puts route["routes"][0]["durationSeconds"]
47
48
 
48
49
  A route's path comes as an encoded `polyline` with five decimal places, which polyline decoders assume. Pass `geometries: "geojson"` to get it as a GeoJSON `LineString` in `geometry` instead, which maps draw without decoding, or `geometries: "polyline6"` for six decimal places.
49
50
 
51
+ An isochrone is a GeoJSON `FeatureCollection` with one polygon per time, largest first, so a map that draws them in order shows the smaller ones on top:
52
+
53
+ ```ruby
54
+ area = client.isochrone({ lat: 45.5189, lon: -122.6793 }, [5, 10], mode: "walk")
55
+ puts area["features"].map { |feature| feature["properties"]["minutes"] }.inspect
56
+ ```
57
+
50
58
  If your app shows results, show the credits in each response's `attribution`.
51
59
 
52
60
  ## Errors and retries
data/lib/mapricot/api.rb CHANGED
@@ -6,7 +6,7 @@ require "net/http"
6
6
  # The official client for the Mapricot API: address and place search, reverse geocoding, nearby places, routing,
7
7
  # and IP geolocation. See https://mapricot.com/docs/ruby/.
8
8
  module Mapricot
9
- VERSION = "0.3.0"
9
+ VERSION = "0.5.0"
10
10
 
11
11
  # An error response from the API.
12
12
  class Error < StandardError
@@ -33,44 +33,51 @@ module Mapricot
33
33
 
34
34
  # Find addresses and places matching free text. focus is {lat:, lon:}; country is an Array or a String.
35
35
  def search(q, focus: nil, country: nil, limit: nil, lang: nil)
36
- get("/v1/search", q: q, focus: focus, country: country, limit: limit, lang: lang)
36
+ get("/geocoding/v1/search", q: q, focus: focus, country: country, limit: limit, lang: lang)
37
37
  end
38
38
 
39
39
  # Suggest addresses and places as someone types.
40
40
  def autocomplete(q, focus: nil, country: nil, limit: nil, lang: nil)
41
- get("/v1/autocomplete", q: q, focus: focus, country: country, limit: limit, lang: lang)
41
+ get("/geocoding/v1/autocomplete", q: q, focus: focus, country: country, limit: limit, lang: lang)
42
42
  end
43
43
 
44
44
  # Find the address nearest a coordinate, or the area around it.
45
45
  def reverse(lat, lon, limit: nil, lang: nil)
46
- get("/v1/reverse", lat: lat, lon: lon, limit: limit, lang: lang)
46
+ get("/geocoding/v1/reverse", lat: lat, lon: lon, limit: limit, lang: lang)
47
47
  end
48
48
 
49
49
  # List places around a coordinate, optionally by category, an Array or a String.
50
50
  def nearby(lat, lon, category: nil, radius: nil, limit: nil, lang: nil)
51
- get("/v1/nearby", lat: lat, lon: lon, category: category, radius: radius, limit: limit, lang: lang)
51
+ get("/places/v1/nearby", lat: lat, lon: lon, category: category, radius: radius, limit: limit, lang: lang)
52
52
  end
53
53
 
54
54
  # Look up one place by its Mapricot ID.
55
55
  def place(id, lang: nil)
56
- get("/v1/places/#{escape(id)}", lang: lang)
56
+ get("/places/v1/#{escape(id)}", lang: lang)
57
57
  end
58
58
 
59
59
  # Find a route through 2 to 20 waypoints, each {lat:, lon:}. mode is "drive" (the default), "walk", or "bicycle".
60
60
  # geometries is "polyline" (the default), "polyline6", or "geojson".
61
61
  def route(waypoints, mode: nil, geometries: nil)
62
62
  body = { waypoints: waypoints, mode: mode, geometries: geometries }.compact
63
- request(Net::HTTP::Post, URI("#{@base_url}/v1/route"), JSON.generate(body))
63
+ request(Net::HTTP::Post, URI("#{@base_url}/routing/v1/route"), JSON.generate(body))
64
+ end
65
+
66
+ # The areas reachable from a location, {lat:, lon:}, within 1 to 4 times, each 1 to 60 minutes, as a GeoJSON
67
+ # FeatureCollection with one polygon per time, largest first. mode is as for route.
68
+ def isochrone(location, minutes, mode: nil)
69
+ body = { location: location, minutes: minutes, mode: mode }.compact
70
+ request(Net::HTTP::Post, URI("#{@base_url}/routing/v1/isochrone"), JSON.generate(body))
64
71
  end
65
72
 
66
73
  # Approximate location of a public IP address.
67
74
  def ip(address)
68
- get("/v1/ip/#{escape(address)}")
75
+ get("/ip-geolocation/v1/#{escape(address)}")
69
76
  end
70
77
 
71
78
  # The key's account. Not billed, so it checks a key for free.
72
79
  def account
73
- get("/v1/account")
80
+ get("/account")
74
81
  end
75
82
 
76
83
  private
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mapricot-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mapricot