IonGeocoderService.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import Check from './Check.js';
  2. import Credit from './Credit.js';
  3. import defaultValue from './defaultValue.js';
  4. import defined from './defined.js';
  5. import Ion from './Ion.js';
  6. import PeliasGeocoderService from './PeliasGeocoderService.js';
  7. import Resource from './Resource.js';
  8. /**
  9. * Provides geocoding through Cesium ion.
  10. * @alias IonGeocoderService
  11. * @constructor
  12. *
  13. * @param {Object} options Object with the following properties:
  14. * @param {Scene} options.scene The scene
  15. * @param {String} [options.accessToken=Ion.defaultAccessToken] The access token to use.
  16. * @param {String} [options.accessToken=Ion.defaultAccessToken] The access token to use.
  17. * @param {String|Resource} [options.server=Ion.defaultServer] The resource to the Cesium ion API server.
  18. *
  19. * @see Ion
  20. */
  21. function IonGeocoderService(options) {
  22. options = defaultValue(options, defaultValue.EMPTY_OBJECT);
  23. //>>includeStart('debug', pragmas.debug);
  24. Check.typeOf.object('options.scene', options.scene);
  25. //>>includeEnd('debug');
  26. var accessToken = defaultValue(options.accessToken, Ion.defaultAccessToken);
  27. var server = Resource.createIfNeeded(defaultValue(options.server, Ion.defaultServer));
  28. server.appendForwardSlash();
  29. var defaultTokenCredit = Ion.getDefaultTokenCredit(accessToken);
  30. if (defined(defaultTokenCredit)) {
  31. options.scene.frameState.creditDisplay.addDefaultCredit(Credit.clone(defaultTokenCredit));
  32. }
  33. var searchEndpoint = server.getDerivedResource({
  34. url: 'v1/geocode'
  35. });
  36. if (defined(accessToken)) {
  37. searchEndpoint.appendQueryParameters({ access_token: accessToken });
  38. }
  39. this._accessToken = accessToken;
  40. this._server = server;
  41. this._pelias = new PeliasGeocoderService(searchEndpoint);
  42. }
  43. /**
  44. * @function
  45. *
  46. * @param {String} query The query to be sent to the geocoder service
  47. * @param {GeocodeType} [type=GeocodeType.SEARCH] The type of geocode to perform.
  48. * @returns {Promise<GeocoderService~Result[]>}
  49. */
  50. IonGeocoderService.prototype.geocode = function (query, geocodeType) {
  51. return this._pelias.geocode(query, geocodeType);
  52. };
  53. export default IonGeocoderService;