/
BingMapsGeocoderService.js
100 lines (89 loc) · 2.37 KB
/
BingMapsGeocoderService.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import Check from "./Check.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";
var 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
*/
function BingMapsGeocoderService(options) {
options = defaultValue(options, defaultValue.EMPTY_OBJECT);
var key = options.key;
//>>includeStart('debug', pragmas.debug);
if (!defined(key)) {
throw new DeveloperError("options.key is required.");
}
//>>includeEnd('debug');
this._key = key;
this._resource = new Resource({
url: url,
queryParameters: {
key: key,
},
});
}
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;
},
},
});
/**
* @function
*
* @param {String} query The query to be sent to the geocoder service
* @returns {Promise<GeocoderService.Result[]>}
*/
BingMapsGeocoderService.prototype.geocode = function (query) {
//>>includeStart('debug', pragmas.debug);
Check.typeOf.string("query", query);
//>>includeEnd('debug');
var resource = this._resource.getDerivedResource({
queryParameters: {
query: query,
},
});
return resource.fetchJsonp("jsonp").then(function (result) {
if (result.resourceSets.length === 0) {
return [];
}
var results = result.resourceSets[0].resources;
return results.map(function (resource) {
var bbox = resource.bbox;
var south = bbox[0];
var west = bbox[1];
var north = bbox[2];
var east = bbox[3];
return {
displayName: resource.name,
destination: Rectangle.fromDegrees(west, south, east, north),
};
});
});
};
export default BingMapsGeocoderService;