import Check from './Check.js'; import Credit from './Credit.js'; import defaultValue from './defaultValue.js'; import defined from './defined.js'; import Ion from './Ion.js'; import PeliasGeocoderService from './PeliasGeocoderService.js'; import Resource from './Resource.js'; /** * Provides geocoding through Cesium ion. * @alias IonGeocoderService * @constructor * * @param {Object} options Object with the following properties: * @param {Scene} options.scene The scene * @param {String} [options.accessToken=Ion.defaultAccessToken] The access token to use. * @param {String} [options.accessToken=Ion.defaultAccessToken] The access token to use. * @param {String|Resource} [options.server=Ion.defaultServer] The resource to the Cesium ion API server. * * @see Ion */ function IonGeocoderService(options) { options = defaultValue(options, defaultValue.EMPTY_OBJECT); //>>includeStart('debug', pragmas.debug); Check.typeOf.object('options.scene', options.scene); //>>includeEnd('debug'); var accessToken = defaultValue(options.accessToken, Ion.defaultAccessToken); var server = Resource.createIfNeeded(defaultValue(options.server, Ion.defaultServer)); server.appendForwardSlash(); var defaultTokenCredit = Ion.getDefaultTokenCredit(accessToken); if (defined(defaultTokenCredit)) { options.scene.frameState.creditDisplay.addDefaultCredit(Credit.clone(defaultTokenCredit)); } var searchEndpoint = server.getDerivedResource({ url: 'v1/geocode' }); if (defined(accessToken)) { searchEndpoint.appendQueryParameters({ access_token: accessToken }); } this._accessToken = accessToken; this._server = server; this._pelias = new PeliasGeocoderService(searchEndpoint); } /** * @function * * @param {String} query The query to be sent to the geocoder service * @param {GeocodeType} [type=GeocodeType.SEARCH] The type of geocode to perform. * @returns {Promise} */ IonGeocoderService.prototype.geocode = function (query, geocodeType) { return this._pelias.geocode(query, geocodeType); }; export default IonGeocoderService;