An open API service indexing awesome lists of open source software.

https://github.com/nozzlegear/nominatim-browser

A Nominatim client that can be used from the browser.
https://github.com/nozzlegear/nominatim-browser

Last synced: 6 months ago
JSON representation

A Nominatim client that can be used from the browser.

Awesome Lists containing this project

README

          

# nominatim-browser

A browser-usable client for [Open Street Map's **Nominatim** service](http://wiki.openstreetmap.org/wiki/Nominatim). It can be used to lookup the latitude and longitude coordinates for an address and
to lookup the address for a pair of latitude and longitude coordinates.

### Goals

While there are plenty of Nominatim clients available on NPM, none of them are currently built for use in the browser. Instead, they rely on Node's `http` module, or other Node-only http frameworks. On top of that,
none of those clients offer TypeScript definitions.

The goal of `nominatim-browser` is to fill both of those holes by providing a Nominatim client that can be used from the browser with TypeScript definitions.

## Installing

You can install this package from [NPM](https://npmjs.com/package/nominatim-browser) or with [Yarn](https://github.com/yarnpkg/yarn):

```bash
npm install nominatim-browser --save

# Or via Yarn
yarn add nominatim-browser
```

## Usage

Import the lib:

```js
// With ES6-style imports
import * as Nominatim from "nominatim-browser";

// With node-style requires:
var Nominatim = require("nominatim-browser";
```

If you can't use `require` or ES6-imports, this package also provides a webpacked version (dist/nominatim-browser.webpacked.js) which bundles all of the necessary dependencies.
Once loaded, the bundled script will make all `nominatim-browser` functions available under the `Nominatim` variable.

```html

//Nominatim is now available
console.log("Nominatim is", Nominatim);

```

### Nominatim.geocode(request: GeocodeRequest): Promise\

Looks up the latitude and longitude data for a given address, returning an array of `NominatimResponse` objects found for the address.

(Please [review the TypeScript definition file](https://github.com/nozzlegear/nominatim-browser/blob/master/dist/nominatim-browser.d.ts) for full documentation on `GeocodeRequest`, `NominatimResponse` and all other object types.)

```ts
Nominatim.geocode({
city: "Minneapolis",
state: "MN",
country: "US",
addressdetails: true
})
.then((results: NominatimResponse[]) =>
{
var result = results[0];

console.log(result.lat); // '44.9772995'
console.log(result.lon); // '-93.2654691'
console.log(result.display_name); // 'Minneapolis, Hennepin County, Minnesota, United States of America'

// result.address is only returned when 'addressdetails: true' is sent in the geocode request
console.log(result.address.city); // 'Minneapolis'
console.log(result.address.county); // 'Hennepin County'
console.log(result.address.state); // 'Minnesota'
console.log(result.address.country); // 'United States of America'

})
.catch((error) =>
{
console.error(error);
});
```

### Nominatim.reverseGeocode(request: ReverseGeocodeRequest): Promise\

Looks up the address data for a pair of latitude and longitude coordinates.

```ts
Nominatim.reverseGeocode({
lat: "44.9772995",
lon: "-93.2654691",
addressdetails: true
})
.then((result : NominatimResponse) =>
{
console.log(result.display_name); // 'Minneapolis City Hall, South 4th Street, St Anthony West, Phillips, Minneapolis, Hennepin County, Minnesota, 55415, United States of America'

// result.address is only returned when 'addressdetails: true' is sent in the request
console.log(result.address.city); // 'Minneapolis'
console.log(result.address.county); // 'Hennepin County'
console.log(result.address.state); // 'Minnesota'
console.log(result.address.country); // 'United States of America'
})
.catch((error) =>
{
console.error(error);
});
```

### Nominatim.lookupAddress(request: LookupRequest): Promise\

Looks up the address for multiple Open Street Maps objects like node, way or relation.

```ts
Nominatim.lookupAddress({
osm_ids: "R136712,R146656" //A list of OSM ids separated by comma
})
.then((results: NominatimResponse[]) =>
{
// First result will be the R136712 (Minneapolis) id.
var result = results[0];

console.log(result.display_name); // 'Minneapolis, Hennepin County, Minnesota, United States of America'
console.log(result.address.city); // 'Minneapolis'
console.log(result.address.county); // 'Hennepin County'
console.log(result.address.state); // 'Minnesota'
console.log(result.address.country); // 'United States of America'
})
.catch((error) =>
{
console.error(error);
});
```

## Specifying a custom server URL

All three functions (`.geocode`, `.reverseGeocode` and `.lookupAddress`) take a second, optional parameter that lets you customize the Nominatim server URL:

```ts
const address = {
city: "Minneapolis",
state: "MN",
country: "US",
addressdetails: true
};
const customUrl = "https://example.com";

Nominatim.geocode(address, customUrl).then((results: NominatimResponse[]) =>
{
console.log(results);
})
.catch((error) =>
{
console.error(error);
});
```

## Types

Please [review the TypeScript definition file](https://github.com/nozzlegear/nominatim-browser/blob/master/dist/nominatim-browser.d.ts) for full documentation on `GeocodeRequest`, `NominatimResponse` and all other object types.

## Contributing to nominatim-browser

In order to build `nominatim-browser`, ensure that you have [git](http://git-scm.com/downloads), [Node.js](https://nodejs.org), [NPM](https://npmjs.com) and [gulp-cli](https://npmjs.com/package/gulp-cli) installed.

Clone a copy of the master `nominatim-browser` git repo:

```bash
git clone https://github.com/nozzlegear/nominatim-browser.git
```

Change to the `nominatim-browser` directory:

```bash
cd nominatim-browser
```

Install the necessary NPM packages:

```bash
npm install
```

Run `gulp` to build the TypeScript lib and test files:

```bash
gulp
```

Run tests via NPM's `test` command:

```bash
npm run test
```

While I really appreciate any contribution, please make sure that they have test coverage, and that all tests are written in TypeScript with [Mocha](http://mochajs.org/) and [Chai](http://chaijs.com/).

When you're ready to contribute, [make a pull request](https://github.com/nozzlegear/nominatim-browser/pull/new/master)!

## License

MIT © [Joshua Harms](https://nozzlegear.com)