| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | import Cartesian3 from "./Cartesian3.js";import Check from "./Check.js";/** * Geocodes queries containing longitude and latitude coordinates and an optional height. * Query format: `longitude latitude (height)` with longitude/latitude in degrees and height in meters. * * @alias CartographicGeocoderService * @constructor */function CartographicGeocoderService() {}/** * @function * * @param {String} query The query to be sent to the geocoder service * @returns {Promise<GeocoderService.Result[]>} */CartographicGeocoderService.prototype.geocode = function (query) {  //>>includeStart('debug', pragmas.debug);  Check.typeOf.string("query", query);  //>>includeEnd('debug');  const splitQuery = query.match(/[^\s,\n]+/g);  if (splitQuery.length === 2 || splitQuery.length === 3) {    let longitude = +splitQuery[0];    let latitude = +splitQuery[1];    const height = splitQuery.length === 3 ? +splitQuery[2] : 300.0;    if (isNaN(longitude) && isNaN(latitude)) {      const coordTest = /^(\d+.?\d*)([nsew])/i;      for (let i = 0; i < splitQuery.length; ++i) {        const splitCoord = splitQuery[i].match(coordTest);        if (coordTest.test(splitQuery[i]) && splitCoord.length === 3) {          if (/^[ns]/i.test(splitCoord[2])) {            latitude = /^[n]/i.test(splitCoord[2])              ? +splitCoord[1]              : -splitCoord[1];          } else if (/^[ew]/i.test(splitCoord[2])) {            longitude = /^[e]/i.test(splitCoord[2])              ? +splitCoord[1]              : -splitCoord[1];          }        }      }    }    if (!isNaN(longitude) && !isNaN(latitude) && !isNaN(height)) {      const result = {        displayName: query,        destination: Cartesian3.fromDegrees(longitude, latitude, height),      };      return Promise.resolve([result]);    }  }  return Promise.resolve([]);};export default CartographicGeocoderService;
 |