A simple way to query the Google Maps API from Node.js
This has become a fairly complete api. Criticism/Suggestions/Patches/PullReq's welcome.
curl http://npmjs.org/install.sh | sh
npm install googlemaps
APIs implemented:
TODO:
- Tests for everything (using vows)
var gm = require('googlemaps');
var util = require('util');
gm.reverseGeocode('41.850033,-87.6500523', function(err, data){
util.puts(JSON.stringify(data));
});
gm.reverseGeocode(gm.checkAndConvertPoint([41.850033, -87.6500523]), function(err, data){
util.puts(JSON.stringify(data));
});
Both examples print: {"status":"OK","results":[{"types":["postal_code"],"formatted_address":"Chicago, IL 60695, USA"...
For the Static Maps API, you can pass in all the required parameters as well as markers, styles, and paths using the formats outlined below.
markers = [
{ 'location': '300 W Main St Lock Haven, PA' },
{ 'location': '444 W Main St Lock Haven, PA',
'color': 'red',
'label': 'A',
'shadow': 'false',
'icon' : 'http://chart.apis.google.com/chart?chst=d_map_pin_icon&chld=cafe%7C996600'
}
]
styles = [
{ 'feature': 'road', 'element': 'all', 'rules':
{ 'hue': '0x00ff00' }
}
]
paths = [
{ 'color': '0x0000ff', 'weight': '5', 'points':
[ '41.139817,-77.454439', '41.138621,-77.451596' ]
}
]
util.puts(gm.staticMap('444 W Main St Lock Haven PA', 15, '500x400', false, false, 'roadmap', markers, styles, paths));
By giving gm.staticMap an optional callback, you can retreive the static map PNG data:
util.puts(gm.staticMap('444 W Main St Lock Haven PA', 15, '500x400', function(err, data){
require('fs').writeFileSync('test_map.png', data, 'binary');
}, false, 'roadmap', markers, styles, paths));
You will get a map like:
To set the configuration you call gm.config(key, value)
or gm.config({key: value, .....})
proxy
- set a proxy for http requests
stagger-time
- defaults to 200ms - stagger async call times when multiple requests are required
encode-polylines
- defaults to true - encodes polylines to the shorter Google format.
google-client-id
- used for setting business specific parameters
google-private-key
- used for setting business specific parameters
Retrieving a JSON blob from google maps can sometimes be a bit messy if you're trying to convert data on the fly. You can use the convert method to change the blob into a goeocode, city, zip, county, state, or country.
gm.geocode('64111', function(err,data){
gm.utils.convert(data, 'state', function(result){
util.puts(JSON.stringify(data));
});
});
All the googlemaps functions follow this scheme: function(required, callback, optional)
All callbacks are expected to follow: function(error, results) Where the error returned is an Error object.
Please refer to the code, tests and the Google Maps API docs for further usage information.