import Check from "./Check.js"; import Credit from "./Credit.js"; import defaultValue from "./defaultValue.js"; import Rectangle from "./Rectangle.js"; import Resource from "./Resource.js"; import defined from "./defined.js"; import DeveloperError from "./DeveloperError.js"; const url = "https://dev.virtualearth.net/REST/v1/Locations"; /** * Provides geocoding through Bing Maps. * @alias BingMapsGeocoderService * @constructor * * @param {object} options Object with the following properties: * @param {string} options.key A key to use with the Bing Maps geocoding service * @param {string} [options.culture] A Bing Maps {@link https://docs.microsoft.com/en-us/bingmaps/rest-services/common-parameters-and-types/supported-culture-codes|Culture Code} to return results in a specific culture and language. */ function BingMapsGeocoderService(options) { options = defaultValue(options, defaultValue.EMPTY_OBJECT); const key = options.key; //>>includeStart('debug', pragmas.debug); if (!defined(key)) { throw new DeveloperError("options.key is required."); } //>>includeEnd('debug'); this._key = key; const queryParameters = { key: key, }; if (defined(options.culture)) { queryParameters.culture = options.culture; } this._resource = new Resource({ url: url, queryParameters: queryParameters, }); this._credit = new Credit( ``, false ); } Object.defineProperties(BingMapsGeocoderService.prototype, { /** * The URL endpoint for the Bing geocoder service * @type {string} * @memberof BingMapsGeocoderService.prototype * @readonly */ url: { get: function () { return url; }, }, /** * The key for the Bing geocoder service * @type {string} * @memberof BingMapsGeocoderService.prototype * @readonly */ key: { get: function () { return this._key; }, }, /** * Gets the credit to display after a geocode is performed. Typically this is used to credit * the geocoder service. * @memberof BingMapsGeocoderService.prototype * @type {Credit|undefined} * @readonly */ credit: { get: function () { return this._credit; }, }, }); /** * @function * * @param {string} query The query to be sent to the geocoder service * @returns {Promise} */ BingMapsGeocoderService.prototype.geocode = async function (query) { //>>includeStart('debug', pragmas.debug); Check.typeOf.string("query", query); //>>includeEnd('debug'); const resource = this._resource.getDerivedResource({ queryParameters: { query: query, }, }); return resource.fetchJsonp("jsonp").then(function (result) { if (result.resourceSets.length === 0) { return []; } const results = result.resourceSets[0].resources; return results.map(function (resource) { const bbox = resource.bbox; const south = bbox[0]; const west = bbox[1]; const north = bbox[2]; const east = bbox[3]; return { displayName: resource.name, destination: Rectangle.fromDegrees(west, south, east, north), }; }); }); }; export default BingMapsGeocoderService;