All Projects → what3words → w3w-swift-wrapper

what3words / w3w-swift-wrapper

Licence: MIT License
Swift library for what3words REST API.

Programming Languages

swift
15916 projects
objective c
16641 projects - #2 most used programming language
ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to w3w-swift-wrapper

Addok
Search engine for address. Only address.
Stars: ✭ 226 (+1155.56%)
Mutual labels:  geocoder
python-omgeo
OMGeocoder - A python geocoding abstraction layer
Stars: ✭ 34 (+88.89%)
Mutual labels:  geocoder
NominatimGeocoderBackend
UnifiedNlp geocoder backend that uses the OSM Nominatim service
Stars: ✭ 49 (+172.22%)
Mutual labels:  geocoder
Qwantmaps
Central repository for Qwant Maps resources
Stars: ✭ 239 (+1227.78%)
Mutual labels:  geocoder
GoogleMapsHelper
An easy to integrate Model Based Google Maps Helper (SVHTTPClient, AFNetworking) That lets you Geo Code , Reverse Geocode, Get Directions , Places Autocomplete.
Stars: ✭ 21 (+16.67%)
Mutual labels:  geocoder
gazetteer
OSM ElasticSearch geocoder and addresses exporter
Stars: ✭ 93 (+416.67%)
Mutual labels:  geocoder
Google Maps
Google Maps Web Services API wrapper for .NET
Stars: ✭ 171 (+850%)
Mutual labels:  geocoder
geocoder
Google Maps geocoding library for Scala
Stars: ✭ 13 (-27.78%)
Mutual labels:  geocoder
pinpoint
🌎 A python script for finding your Mac.
Stars: ✭ 56 (+211.11%)
Mutual labels:  geocoder
opencage
🌐 R package for the OpenCage API -- both forward and reverse geocoding 🌐
Stars: ✭ 82 (+355.56%)
Mutual labels:  geocoder
local-reverse-geocoder
Local reverse geocoder for Node.js based on GeoNames data
Stars: ✭ 155 (+761.11%)
Mutual labels:  geocoder
leaflet-opencage-search
A Leaflet geocoding control that uses the OpenCage geocoding API
Stars: ✭ 18 (+0%)
Mutual labels:  geocoder
PostcodesioR
API wrapper around postcodes.io - free UK postcode lookup and geocoder
Stars: ✭ 36 (+100%)
Mutual labels:  geocoder
Jquery Auto Geocoder
jQuery plug-in to automatically geocode and display a location entered.
Stars: ✭ 227 (+1161.11%)
Mutual labels:  geocoder
HerePy
A library that provides a Python interface to the HERE APIs.
Stars: ✭ 73 (+305.56%)
Mutual labels:  geocoder
Geolocation
Flutter geolocation plugin for Android and iOS.
Stars: ✭ 205 (+1038.89%)
Mutual labels:  geocoder
Osmunda
An offline geocode library for android, powered by SQLite, using osm data. 离线地理编码Android库,基于SQLite,使用开放街道地图数据。
Stars: ✭ 37 (+105.56%)
Mutual labels:  geocoder
Track-Stargazers
Have fun tracking your project's stargazers
Stars: ✭ 38 (+111.11%)
Mutual labels:  geocoder
yelp-camp
A Node.js web application project from the Udemy course - The Web Developer Bootcamp by Colt Steele
Stars: ✭ 36 (+100%)
Mutual labels:  geocoder
GeneGenie.Geocoder
Geocoder for .Net Standard that uses multiple backend geocoder services.
Stars: ✭ 23 (+27.78%)
Mutual labels:  geocoder

what3words

what3words w3w-swift-wrapper

A swift library to use the what3words REST API, and the what3words VoiceAPI.

Overview

The what3words Swift API wrapper gives you programmatic access to

  • convert a 3 word address to coordinates
  • convert coordinates to a 3 word address
  • autosuggest functionality which takes a slightly incorrect 3 word address, and suggests a list of valid 3 word addresses
  • obtain a section of the 3m x 3m what3words grid for a bounding box.
  • determine the currently support 3 word address languages.
  • autosuggest functionality to convert a spoken 3 word address (via voiceAPI) to a list of valid 3 word addresses

TLDR:

You can find a short tutorial here that will show you how to get minimally set up and running.

Objective-C

This package also contains an Objective-C compatible version, What3WordsObjC - see the ObjectiveC project in Examples/ObjectiveC/ObjectiveC.xcodeproj

OS Requirements

This package works with:

  • macOS version 10.10 or higher
  • iOS version 9 or higher
  • tvOS version 11 or higher
  • watchOS version 2 or higher

Authentication

To use this library you’ll need a what3words API key, which can be signed up for here. If you wish to use the Voice API calls then you must add a Voice API plan to your account.

Examples

There are four examples in this package:

iOS SwiftUI:

An iOS SwiftUI example using autosuggest is in this package at Examples/AutoSuggest/AutoSuggest.xcodeproj

macOS terminal:

A macOS terminal example demonstrating convertToCoordinates is at: Examples/ConvertToCoords/ConvertToCoords.xcodeproj

iOS UIKit Voice API:

An iOS UIKit example using the VoiceAPI is at: Examples/VoiceAPI/VoiceAPI.xcodeproj

iOS UIKit GridLine:

An iOS example using MapKit to show what3words gridlines on a map: Examples/GridLines/GridLines.xcodeproj

Objective-C

An example using Objective-C. Examples/ObjectiveC/ObjectiveC.xcodeproj

Installation

Swift Package Manager

You can install this with Swift Package Manager by adding the URL below to Swift Packages under your project settings:

https://github.com/what3words/w3w-swift-wrapper.git

CocoaPods (iOS 9+, OS X 10.10+)

You can use CocoaPods to install w3w-swift-wrapper by adding it to the target in your Podfile:

pod 'what3words', :git => 'https://github.com/what3words/w3w-swift-wrapper.git'

If you are using CocoaPods use import what3words instead of import W3WSwiftApi in your Swift files.

Note:

If you are using this package's Voice API features on device, you should include Microphone permissions:

Usage

Import

In any swift file you use the what3words API, import the following:

import W3WSwiftApi
import CoreLocation

If you are using CocoaPods use import what3words instead.

Initialise

Use the following code with your API key to initialise the API:

let api = What3WordsV3(apiKey: "YourApiKey")

In the case that you run our Enterprise Suite API Server yourself, you may specify the URL to your own server like so:

let api = What3WordsV3(apiKey: "YourApiKey", apiUrl: "https://api.yourserver.com")

Additionally, if you run the Enterprise Suite API Server there is another optional setup() parameter: customHeaders. Use this if you need to send custom headers to your own server:

let api = What3WordsV3(apiKey: "YourApiKey", apiUrl: "https://api.yourserver.com", customHeaders: ["x-header-1":"value-1", "x-header-2":"value-2"])

Functions

Each call takes a completion block as the last parameter. This allows Swift's trailing closure syntax to be used. The closure's parameters contain the results. If there was a problem with any call, it will be indicated by the error object.

Convert To 3 Word Address

Convert coordinates, expressed as latitude and longitude to a 3 word address. This function takes the latitude and longitude as a CLLocationCoordinate2D object. The values returned from the convertTo3wa method are described in the API documentation.

Code Example:
let coords = CLLocationCoordinate2D(latitude: 51.4243877, longitude: -0.34745)
api.convertTo3wa(coordinates: coords, language: "en") { square, error in
    print(square?.words ?? "")
}

Convert To Coordinates

Convert a 3 word address to a position, expressed as coordinates of latitude and longitude. This function takes the words parameter as a string of 3 words 'table.book.chair'. The values returned from the convertToCoordinates method are described in the API documentation.

Code Example:
api.convertToCoordinates(words: "filled.count.soap") { square, error in
  print(square?.coordinates ?? "")
}

AutoSuggest

Returns a list of 3 word addresses based on user input and other parameters.

This method provides corrections for the following types of input error:

  • typing errors
  • spelling errors
  • misremembered words (e.g. singular vs. plural)
  • words in the wrong order

The autosuggest method determines possible corrections to the supplied 3 word address string based on the probability of the input errors listed above and returns a ranked list of suggestions. This method can also take into consideration the geographic proximity of possible corrections to a given location to further improve the suggestions returned.

  • voice

If you have a VoiceAPI enabled account, you may also call autosuggest with audio data for voice recognition. In order for this to work, you must add a Voice API plan to your account. There is a minimal example of this below, but detailed information can be found here

Input 3 word address

You will only receive results back if the partial 3 word address string you submit contains the first two words and at least the first character of the third word; otherwise an error message will be returned.

To check if your address string meets this criteria, we provide a simple function that employs our regex to help you recognise the three word addresses. It is called isPossible3wa, but please note that it only indicates if the input is three potential words separated by two w3w separators. It WILL NOT tell you if it is a real three word address in world. The following if evaluates to true.

if api.isPossible3wa(text: "xxx.xxx.x") {
  print("Input is in the form of a three word address")
} else {
  print("Input is NOT in the form of a three word address")
}

Or if you prefer, you can simply use our regex. Example code can be found in our regex documentation.

Clipping

We provide various clip policies to allow you to filter by a geographic area. We recommend that you use the clipping to give a more targeted set of results to your user. You can clip by country, or by geographical box, circle or polygon. Do this via the W3WOptions and pass it into the autosuggest call (see example below).

Focus

If you know your user’s current location, we also strongly recommend that you use focus to return results which are likely more relevant. Do this via the W3WOptions and pass it into the autosuggest call (see example below)

The values returned from the autosuggest method are described in the what3words REST API documentation.

Usage

The first parameter is the partial three words, or voice data. The second optional parameter is the options for the autosuggest function. The last parameter is the completion block.

Example One

api.autosuggest(text: "filled.count.soa") { (suggestions, error) in
  for suggestion in suggestions ?? [] {
    print("\(suggestion.words ?? "") is near \(suggestion.nearestPlace ?? "")")
  }
}

Example Two

Focus on one particular place using a single option:

let coords = CLLocationCoordinate2D(latitude: 51.4243877, longitude: -0.34745)
api.autosuggest(text: "flottons.annulons.garço", options: W3WOption.focus(coords)) { (suggestions, error) in
  print(suggestions ?? "")
}

Example Three

Focus on (51.4243877,-0.34745), and clip to the UK using the multiple options object:

let coords = CLLocationCoordinate2D(latitude: 51.4243877, longitude: -0.34745)
let options = W3WOptions().focus(coords).clipToCountry("GB")
api.autosuggest(text: "flottons.annulons.garço", options: options) { (suggestions, error) in
  print(suggestions ?? "")
}

VoiceAPI Example

The what3words Voice API allows a user to say three words into any application or service, with it returning a configurable list of what3words address suggestions, all through a single API call.

In order for this to work, you must add a Voice API plan to your account.

This example instantiates a W3WMicrophone which provides an audio stream to autosuggest(audio:) which begins recording when autosuggest is called. For information on W3WMicrophone and customizing your own W3WAudioStream for autosuggest(audio:) see the VoiceAPI README.

// make a microphone
let microphone = W3WMicrophone()

// call autosuggest
api.autosuggest(audio: microphone, language: "en") { suggestions, error in
  for suggestion in suggestions ?? [] {
    print(suggestion.words ?? "no suggestions")
  }
}

Also, W3WMicrophone has a callback closure W3WMicrophone.volumeUpdate: (Double) -> () that provides amplitude information useful for animating user feedback. See the the Voice API example, and more information is avialable in the VoiceAPI README.

Available Languages

This function returns the currently supported languages for text based autosuggest(text:) calls. It will return the two letter code (ISO 639), and the name of the language both in that language and in English.

The values returned from the convertTo3wa method are described in the what3words REST API documentation

Code Example

api.availableLanguages() { (languages, error) in
  for language in languages ?? [] {
    print(language.code, language.name, language.nativeName)
  }
}

For the available Voice API languages call api.availableVoiceLanguages(completion:) which works exactly the same way.

Grid Section

Returns a section of the 3m x 3m what3words grid for a given area. The requested box must not exceed 4km from corner to corner, or a BadBoundingBoxTooBig error will be returned. Latitudes must be >= -90 and <= 90, but longitudes are allowed to wrap around 180. To specify a bounding-box that crosses the anti-meridian, use longitude greater than 180. Example value: 50.0, 179.995, 50.01, 180.0005.

The values returned from the gridSection function are described in the what3words REST API documentation

Code Example

let southWest = CLLocationCoordinate2D(latitude: 52.208867, longitude: 0.117540)
let northEast = CLLocationCoordinate2D(latitude: 52.207988, longitude: 0.116126)

api.gridSection(southWest: southWest, northEast: northEast) { (lines, error) in
  print("Line count: ", lines?.count ?? "zero")
}

Handling Errors

All functions call the completion block with error as the second parameter. All Swift what3words error types are of enum type and conform to CustomStringConvertible, so they can be used with String(describing: error):

Code Example

api.convertTo3wa(coordinates: CLLocationCoordinate2D(latitude: 51.4243877, longitude: -0.34745)) { square, error in
  if let e = error {
    print(String(describing: e))
  } else {
    print(square?.words ?? "")
  }
}

Api call errors are of type W3WError enum and the voice autosuggest call returns a W3WVoiceError enum.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].