/* Copyright© 2000 - 2026 SuperMap Software Co.Ltd. All rights reserved.* This program are made available under the terms of the Apache License, Version 2.0* which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/import { scaleToResolution, getZoomByResolution } from '../util/MapCalculateUtil';/*** @private* @class InitMapServiceBase* @category iServer Map* @classdesc 初始化地图信息服务类。* @example* var initMapServiceBase = new InitMapServiceBase(url, MapService);** @param {string} url - 服务地址。如:http://localhost:8090/iserver/services/map-world/rest/maps/World+Map 。* @param {MapService} MapService - 地图信息服务类。* @param {Object} options - 参数。* @param {string} [options.proxy] - 服务代理地址。* @param {boolean} [options.withCredentials] - 请求是否携带凭据。默认情况下,仅同源请求包含凭据。* @param {boolean} [options.crossOrigin] - 是否允许跨域请求。* @param {Object} [options.headers] - 请求头。* @usage*/export class InitMapServiceBase {constructor(MapService, url, options) {this.MapService = MapService;this.url = url;this.options = options;this.CLASS_NAME = 'SuperMap.InitMapServiceBase';}/*** @function createMapService* @description 初始化地图服务。* @returns {MapService}*/createMapService() {const MapService = this.MapService;const url = this.url;const options = this.options;return new MapService(url, {proxy: options.proxy,withCredentials: options.withCredentials,crossOrigin: options.crossOrigin,headers: options.headers,projection: options.projection});}/*** @function getMapInfo* @description 获取地图信息。* @returns {Promise}*/getMapInfo(callback) {const mapService = this.createMapService();if(callback){return new Promise((resolve, reject) => {mapService.getMapInfo((res) => {callback(res, resolve, reject);});});}return mapService.getMapInfo();}getTilesets() {return this.createMapService().getTilesets();}/*** @function getWKT* @description 获取坐标投影的 WKT。* @returns {Promise}*/getWKT() {return new Promise((resolve, reject) => {const mapService = this.createMapService();mapService.getWKT((res) => {try {const wkt = res.result.data;resolve(wkt);} catch (error) {reject(error);}});});}}/*** @function isPlaneProjection* @description 是否是平面坐标系。* @param {string} type - 投影坐标系类型。* @returns {boolean}*/export function isPlaneProjection(type) {return type === 'PCS_NON_EARTH';}/*** @function getEpsgCode* @description 获取 EPSG Code。* @param {Object} prjCoordSys* @returns {string}*/export function getEpsgCode(prjCoordSys) {const { type, epsgCode } = prjCoordSys;if (type == 'PCS_NON_EARTH') {// 平面投影return '';}return 'EPSG:' + epsgCode;}/*** @private* @function getTileFormat* @description 获取瓦片格式。* @returns {string} 瓦片格式*/export function getTileFormat(tileset) {if (tileset.tileFormat) {const format = tileset.tileFormat.toLowerCase();if (['jpg_png', 'default', 'png8'].includes(format)) {return 'png';}return format;}return 'png';}/*** @private* @function getTileset* @description 获取 tilseset* @returns {Object}*/export function getTileset(tilesets = [], targets) {const imageTilesets = Array.isArray(tilesets) && tilesets.filter((i) => {return i.metaData.tileType === targets.tileType || 'Image' && getEpsgCode(i.metaData.prjCoordSys) === getEpsgCode(targets.prjCoordSys);});return imageTilesets && imageTilesets[0] && imageTilesets[0].metaData;}/*** @private* @function extentToResolutions* @description mapboxgl maplibregl 获取地图resolutions。* @returns {Array} resolutions*/export function extentToResolutions(bounds, maxZoom = 22, tileSize = 512) {var resolutions = [];var left = bounds.left;var right = bounds.right;if (Array.isArray(bounds)) {left = bounds[0];right = bounds[2];}const maxReolution = Math.abs(left - right) / tileSize;for (let i = 0; i < maxZoom; i++) {resolutions.push(maxReolution / Math.pow(2, i));}return resolutions.sort(function (a, b) {return b - a;});}/*** @private* @function getZoom* @description mapboxgl maplibregl 获取地图zoom。* @param {Object} resetServiceInfo - rest 地图服务信息。* @param {string} resetServiceInfo.scale - scale* @param {Object} resetServiceInfo.dpi - dpi* @param {Object} resetServiceInfo.coordUnit- coordUnit。* @param {Object} extent - extent。* @returns {number} zoom*/export function getZoom({ scale, dpi, coordUnit }, extent) {const resolutions = extentToResolutions(extent);return getZoomByResolution(scaleToResolution(scale, dpi, coordUnit), resolutions);}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。