googlemaps
Version:
A simple way to query the Google Maps API from Node.js
202 lines (158 loc) • 8.13 kB
Markdown
[](https://travis-ci.org/moshen/node-googlemaps)
# Google Maps API for Node.js
This library implements the following Google Maps APIs, and can be also used by Google Maps for Work users.
* [Maps API Web Services](https://developers.google.com/maps/documentation/webservices/)
* [Google Places API](https://developers.google.com/places/)
* [Google Maps Image API](https://developers.google.com/maps/documentation/imageapis/)
This library is **NOT COMPATIBLE** with tags < `1.0.0`
If you want to migrate from a version older than `1.0.0` check the [WIKI](https://github.com/moshen/node-googlemaps/wiki/Migrate-from-v0.1.20-to-v1.0.x) for instructions.
### Installation
```
npm install googlemaps
```
### What does it cover
[Maps API Web Services](https://developers.google.com/maps/documentation/webservices/):
* [Directions](https://developers.google.com/maps/documentation/directions/)
* [Distance matrix](https://developers.google.com/maps/documentation/distancematrix/)
* [Elevation](https://developers.google.com/maps/documentation/elevation/) - TO BE IMPROVED
* [Geocoding and reverse geocoding](https://developers.google.com/maps/documentation/geocoding)
* [Time zone](https://developers.google.com/maps/documentation/timezone)
[Google Places API](https://developers.google.com/places/) - NOT COMPLETED
* [Place search](https://developers.google.com/places/documentation/search)
* [Place details](https://developers.google.com/places/documentation/details)
* [Place autocomplete](https://developers.google.com/places/web-service/autocomplete)
* [Place text search](https://developers.google.com/places/web-service/search#TextSearchRequests)
[Google Maps Image API](https://developers.google.com/maps/documentation/imageapis/)
* [Static maps](https://developers.google.com/maps/documentation/staticmaps/)
* [Street view](https://developers.google.com/maps/documentation/streetview/) - TO BE IMPROVED
### Usage
```javascript
var publicConfig = {
key: '<YOUR-KEY>',
stagger_time: 1000, // for elevationPath
encode_polylines: false,
secure: true, // use https
proxy: 'http://127.0.0.1:9999' // optional, set a proxy for HTTP requests
};
var gmAPI = new GoogleMapsAPI(publicConfig);
// or in case you are using Google Maps for Work
var enterpriseConfig = {
google_client_id: '<YOUR-CLIENT-ID>', // to use Google Maps for Work
google_private_key: '<YOUR-PRIVATE-KEY>', // to use Google Maps for Work
google_channel: '<YOUR-CHANNEL>' // to use Google Maps for Work application usage tracking
stagger_time: 1000, // for elevationPath
encode_polylines: false,
secure: true, // use https
proxy: 'http://127.0.0.1:9999' // optional, set a proxy for HTTP requests
};
var gmAPI = new GoogleMapsAPI(enterpriseConfig);
// geocode API
var geocodeParams = {
"address": "121, Curtain Road, EC2A 3AD, London UK",
"components": "components=country:GB",
"bounds": "55,-1|54,1",
"language": "en",
"region": "uk"
};
gmAPI.geocode(geocodeParams, function(err, result){
console.log(result);
});
// reverse geocode API
var reverseGeocodeParams = {
"latlng": "51.1245,-0.0523",
"result_type": "postal_code",
"language": "en",
"location_type": "APPROXIMATE"
};
gmAPI.reverseGeocode(reverseGeocodeParams, function(err, result){
console.log(result);
});
```
Check out the [unit tests](./tree/new-major-version/test/unit/) for more APIs examples.
### Static Maps
```javascript
var gmAPI = new GoogleMapsAPI();
var params = {
center: '444 W Main St Lock Haven PA',
zoom: 15,
size: '500x400',
maptype: 'roadmap',
markers: [
{
location: '300 W Main St Lock Haven, PA',
label : 'A',
color : 'green',
shadow : true
},
{
location: '444 W Main St Lock Haven, PA',
icon: 'http://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=cafe%7C996600'
}
],
style: [
{
feature: 'road',
element: 'all',
rules: {
hue: '0x00ff00'
}
}
],
path: [
{
color: '0x0000ff',
weight: '5',
points: [
'41.139817,-77.454439',
'41.138621,-77.451596'
]
}
]
};
gmAPI.staticMap(params); // return static map URL
gmAPI.staticMap(params, function(err, binaryImage) {
// fetch asynchronously the binary image
});
```
This example prints the URL for the Static Map image: "https://maps.googleapis.com/maps/api/staticmap?center=444%20W%20Main%20St%20Lock%20Haven%20PA&zoom=15&size=500x400&maptype=roadmap&markers=color%3Agreen%7Clabel%3AA%7Cshadow%3Atrue%7C300%20W%20Main%20St%20Lock%20Haven%2C%20PA&markers=icon%3Ahttp%3A%2F%2Fchart.apis.google.com%2Fchart%3Fchst%3Dd_map_pin_icon%26chld%3Dcafe%257C996600%7C444%20W%20Main%20St%20Lock%20Haven%2C%20PA&path=weight%3A5%7Ccolor%3A0x0000ff%7Cenc%3A%7BbbzFfyvwMnFwP&style=feature%3Aroad%7Celement%3Aall%7Chue%3A0x00ff00"
By giving gm.staticMap an optional callback, you can retreive the static map PNG data:
You will get a map like:

For custom markers using the `icon` parameter, a little-known `scale` parameter is also available that makes it possible to use high-resolution custom images on devices with retina displays. Set it to 2 and use it together with a `@2x` *http-only* image URL (Google's API does not support custom marker images served over https), such as:
```
{
location: '999 Example Road, Earth',
icon: 'http://example.com/path/to/custom-marker@2x.png',
scale: 2
}
```
Credits to [this answer on SO](http://stackoverflow.com/questions/10336646/how-can-i-use-high-resolution-custom-markers-with-the-scale-parameter-in-google/17130379#17130379).
### Street view
```javascript
var gmAPI = new GoogleMapsAPI();
var params = {
location: '51.507868,-0.087689',
size: '1200x1600',
heading: 108.4,
pitch: 7,
fov: 40
};
var result = gmAPI.streetView(params);
```

### Further examples
Please refer to the code, [tests](http://github.com/moshen/node-googlemaps/tree/master/test/) and the [Google Maps API docs](https://developers.google.com/maps/web-services/) for further usage information.
### Contributions
Criticism/Suggestions/Patches/PullRequests are welcome.
### Original contributors list
[](https://github.com/evnm)
[](https://github.com/duncanm)
[](https://github.com/sugendran)
[](https://github.com/JoshSmith)
[](https://github.com/grobot)
[](https://github.com/regality)
[](https://github.com/spatical)
### v1.0.0 maintener
[](https://github.com/moshen)
[](https://github.com/fabriziomoscon)
Contributions and new issues are welcome!