62 lines
1.7 KiB
JavaScript
62 lines
1.7 KiB
JavaScript
(function(){
|
|
|
|
/**
|
|
* Initialise our provider. This function should only be called
|
|
* from within mapstraction code, not exposed as part of the API.
|
|
* @private
|
|
*/
|
|
var init = function() {
|
|
this.invoker.go('init');
|
|
};
|
|
|
|
/**
|
|
* Geocoder instantiates a geocoder with some API choice
|
|
* @name mxn.Geocoder
|
|
* @constructor
|
|
* @param {string} api The API to use
|
|
* @param {Function} callback The function to call when a geocode request returns (function(waypoint))
|
|
* @param {Function} error_callback The optional function to call when a geocode request fails
|
|
* @exports Geocoder as mxn.Geocoder
|
|
*/
|
|
var Geocoder = mxn.Geocoder = function (api, callback, error_callback) {
|
|
this.api = api;
|
|
this.geocoders = {};
|
|
this.callback = callback;
|
|
this.error_callback = error_callback || function(){};
|
|
|
|
// set up our invoker for calling API methods
|
|
this.invoker = new mxn.Invoker(this, 'Geocoder', function(){ return this.api; });
|
|
init.apply(this);
|
|
};
|
|
|
|
mxn.addProxyMethods(Geocoder, [
|
|
'geocode_callback'
|
|
]);
|
|
|
|
/**
|
|
* Geocodes the provided address.
|
|
* @name mxn.Geocoder#geocode
|
|
* @function
|
|
* @param {Object} address Address hash, keys are: street, locality, region, country.
|
|
* @param {number} row_limit to limit returned results, defaults to 1 to support previous Mapstraction 2.0 API definition.
|
|
*/
|
|
Geocoder.prototype.geocode = function(address, row_limit) {
|
|
row_limit = row_limit || 1; //default to 1 result
|
|
this.invoker.go('geocode', [address, row_limit]);
|
|
};
|
|
|
|
/**
|
|
* Change the geocoding API in use
|
|
* @name mxn.Geocoder#swap
|
|
* @param {string} api The API to swap to
|
|
*/
|
|
Geocoder.prototype.swap = function(api) {
|
|
if (this.api == api) { return; }
|
|
|
|
this.api = api;
|
|
if (!this.geocoders.hasOwnProperty(this.api)) {
|
|
init.apply(this);
|
|
}
|
|
};
|
|
|
|
})(); |