123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import Cartesian3 from './Cartesian3.js';
- import Check from './Check.js';
- import defined from './defined.js';
- import defineProperties from './defineProperties.js';
- import GeocodeType from './GeocodeType.js';
- import Rectangle from './Rectangle.js';
- import Resource from './Resource.js';
- /**
- * Provides geocoding via a {@link https://pelias.io/|Pelias} server.
- * @alias PeliasGeocoderService
- * @constructor
- *
- * @param {Resource|String} url The endpoint to the Pelias server.
- *
- * @example
- * // Configure a Viewer to use the Pelias server hosted by https://geocode.earth/
- * var viewer = new Cesium.Viewer('cesiumContainer', {
- * geocoder: new Cesium.PeliasGeocoderService(new Cesium.Resource({
- * url: 'https://api.geocode.earth/v1/',
- * queryParameters: {
- * api_key: '<Your geocode.earth API key>'
- * }
- * }))
- * });
- */
- function PeliasGeocoderService(url) {
- //>>includeStart('debug', pragmas.debug);
- Check.defined('url', url);
- //>>includeEnd('debug');
- this._url = Resource.createIfNeeded(url);
- this._url.appendForwardSlash();
- }
- defineProperties(PeliasGeocoderService.prototype, {
- /**
- * The Resource used to access the Pelias endpoint.
- * @type {Resource}
- * @memberof PeliasGeocoderService.prototype
- * @readonly
- */
- url: {
- get: function () {
- return this._url;
- }
- }
- });
- /**
- * @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<GeocoderService~Result[]>}
- */
- PeliasGeocoderService.prototype.geocode = function(query, type) {
- //>>includeStart('debug', pragmas.debug);
- Check.typeOf.string('query', query);
- //>>includeEnd('debug');
- var resource = this._url.getDerivedResource({
- url: type === GeocodeType.AUTOCOMPLETE ? 'autocomplete' : 'search',
- queryParameters: {
- text: query
- }
- });
- return resource.fetchJson()
- .then(function (results) {
- return results.features.map(function (resultObject) {
- var destination;
- var bboxDegrees = resultObject.bbox;
- if (defined(bboxDegrees)) {
- destination = Rectangle.fromDegrees(bboxDegrees[0], bboxDegrees[1], bboxDegrees[2], bboxDegrees[3]);
- } else {
- var lon = resultObject.geometry.coordinates[0];
- var lat = resultObject.geometry.coordinates[1];
- destination = Cartesian3.fromDegrees(lon, lat);
- }
- return {
- displayName: resultObject.properties.label,
- destination: destination
- };
- });
- });
- };
- export default PeliasGeocoderService;
|