@ciniki/iclient-maplibregl
Version:
@supermapgis/iclient-maplibregl 是一套基于 Maplibre GL 的云 GIS 网络客户端开发平台, 支持访问 SuperMap iServer / iEdge / iPortal / iManager / Online 的地图、服务和资源,为用户提供了完整专业的 GIS 能力, 同时提供了优秀的可视化功能。
296 lines (273 loc) • 15.1 kB
JavaScript
/* Copyright© 2000 - 2025 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 maplibregl from 'maplibre-gl';
import {Util} from '../core/Util';
import {ServiceBase} from './ServiceBase';
import { DataFormat } from '@ciniki/iclient-common/REST';
import { NetworkAnalystService as CommonNetworkAnalystService } from '@ciniki/iclient-common/iServer/NetworkAnalystService';
/**
* @class NetworkAnalystService
* @category iServer NetworkAnalyst
* @classdesc 网络分析服务类。提供方法:爆管分析、最近设施分析、选址分区分析、旅行商分析、多旅行商分析、最佳路径分析、
* 服务区分析、上游/下游关键设施查找、耗费矩阵计算、边的耗费权重更新、转向耗费权重更新等。
* @version 11.1.0
* @modulecategory Services
* @extends {ServiceBase}
* @example
* new NetworkAnalystService(url)
* .findPath(params,function(result){
* //doSomething
* })
* @param {string} url - 服务地址。请求网络分析服务,URL 应为:</br>
* http://{服务器地址}:{服务端口号}/iserver/services/{网络分析服务名}/rest/networkanalyst/{网络数据集@数据源}。
* 例如: "http://localhost:8090/iserver/services/test/rest/networkanalyst/WaterNet@FacilityNet"。
* @param {Object} options - 参数。
* @param {string} [options.proxy] - 服务代理地址。
* @param {boolean} [options.withCredentials=false] - 请求是否携带 cookie。
* @param {boolean} [options.crossOrigin] - 是否允许跨域请求。
* @param {Object} [options.headers] - 请求头。
* @usage
*/
export class NetworkAnalystService extends ServiceBase {
constructor(url, options) {
super(url, options);
this._networkAnalystService = new CommonNetworkAnalystService(url, options);
}
/**
* @function NetworkAnalystService.prototype.burstPipelineAnalyst
* @description 爆管分析服务。<br>
* 爆管分析可应用于查找爆管点上游或下游最近的阀门位置(关键设施点),根据管道流向指示,
* 迅速找到上游中需要关闭的最临近且最少数量的阀门。关闭这些阀门后,爆裂管段与它的上游不再连通,从而阻止水的流出,
* 防止灾情加重和资源浪费。爆管分析的结果将给出影响爆管位置上下游的关键设施点和弧段、受爆管位置影响的上下游的普通设施点和弧段,
* 即返回关键结点 ID 数组,普通结点 ID 数组及其上下游弧段 ID 数组。
* @param {BurstPipelineAnalystParameters} params - 爆管分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @returns {Promise} Promise 对象。
*/
burstPipelineAnalyst(params, callback) {
params = this._processParams(params);
return this._networkAnalystService.burstPipelineAnalyst(params, callback);
}
/**
* @function NetworkAnalystService.prototype.computeWeightMatrix
* @description 耗费矩阵分析服务。<br>
* 根据交通网络分析参数中的耗费字段返回一个耗费矩阵。该矩阵是一个二维数组,用来存储任意两点间的资源消耗。
* @param {ComputeWeightMatrixParameters} params - 耗费矩阵分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @returns {Promise} Promise 对象。
*/
computeWeightMatrix(params, callback) {
params = this._processParams(params);
return this._networkAnalystService.computeWeightMatrix(params, callback);
}
/**
* @function NetworkAnalystService.prototype.findClosestFacilities
* @description 最近设施分析服务。<br>
* 指在网络上给定一个事件点和一组设施点,查找从事件点到设施点(或从设施点到事件点)以最小耗费能到达的最佳路径。
* @param {FindClosestFacilitiesParameters} params - 最近设施分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回结果类型。
* @returns {Promise} Promise 对象。
*/
findClosestFacilities(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.findClosestFacilities(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.traceAnalyst
* @description 上游/下游 追踪分析服务。<br>
* 查找给定弧段或节点的上游/下游弧段和结点。
* @version 11.1.1
* @param {TraceAnalystParameters} params - 上游/下游 追踪分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回的结果类型。
* @returns {Promise} Promise 对象。
*/
traceAnalyst(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.traceAnalyst(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.connectedEdgesAnalyst
* @description 连通性分析服务。<br>
* 根据给定的弧段 ID 数组或结点 ID 数组,查找与这些弧段或结点相连通或不连通的弧段,返回弧段 ID 数组或结点 ID 数组。
* @version 11.1.1
* @param {ConnectedEdgesAnalystParameters} params - 连通性分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回的结果类型。
* @returns {Promise} Promise 对象。
*/
connectedEdgesAnalyst(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.connectedEdgesAnalyst(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.streamFacilityAnalyst
* @description 上游/下游 关键设施查找资源服务。<br>
* 查找给定弧段或节点的上游/下游中的关键设施结点,返回关键结点 ID 数组及其下游弧段 ID 数组。
* @param {FacilityAnalystStreamParameters} params - 上游/下游 关键设施查找资源服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回结果类型。
* @returns {Promise} Promise 对象。
*/
streamFacilityAnalyst(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.streamFacilityAnalyst(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.findLocation
* @description 选址分区分析服务。<br>
* 确定一个或多个待建设施的最佳或最优位置,使得设施可以用一种最经济有效的方式为需求方提供服务或者商品。
* 选址分区既有选址过程,也有资源分配过程,也就是将需求点的需求分配到相应的新建设施的服务区中。
* @param {FindLocationParameters} params - 选址分区分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回结果类型。
* @returns {Promise} Promise 对象。
*/
findLocation(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.findLocation(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.findPath
* @description 最佳路径分析服务。<br>
* 在网络数据集中指定一些节点,按照节点的选择顺序,顺序访问这些节点从而求解起止点之间阻抗最小的路经。
* @param {FindPathParameters} params - 最佳路径分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回结果类型。
* @returns {Promise} Promise 对象。
*/
findPath(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.findPath(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.findTSPPaths
* @description 旅行商分析服务。<br>
* 路径分析的一种,它从起点开始(默认为用户指定的第一点)查找能够遍历所有途经点且花费最小的路径。
* @param {FindTSPPathsParameters} params - 旅行商分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回结果类型。
* @returns {Promise} Promise 对象。
*/
findTSPPaths(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.findTSPPaths(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.findMTSPPaths
* @description 多旅行商分析服务。<br>
* 多旅行商分析也称为物流配送,是指在网络数据集中,给定 M 个配送中心点和 N 个配送目的地(M,N 为大于零的整数)。查找经济有效的配送路径,并给出相应的行走路线。
* @param {FindMTSPPathsParameters} params - 多旅行商分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回结果类型。
* @returns {Promise} Promise 对象。
*/
findMTSPPaths(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.findMTSPPaths(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.findServiceAreas
* @description 服务区分析服务。<br>
* 以指定服务站点为中心,在一定服务范围内查找网络上服务站点能够提供服务的区域范围。
* @param {FindServiceAreasParameters} params - 服务区分析服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @param {DataFormat} [resultFormat=DataFormat.GEOJSON] - 返回结果类型。
* @returns {Promise} Promise 对象。
*/
findServiceAreas(params, callback, resultFormat) {
params = this._processParams(params);
return this._networkAnalystService.findServiceAreas(params, callback, resultFormat);
}
/**
* @function NetworkAnalystService.prototype.updateEdgeWeight
* @description 更新边的耗费权重服务。边的耗费权重又称弧段权值。
* @param {UpdateEdgeWeightParameters} params - 更新边的耗费权重服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @returns {Promise} Promise 对象。
*/
updateEdgeWeight(params, callback) {
return this._networkAnalystService.updateEdgeWeight(params, callback);
}
/**
* @function NetworkAnalystService.prototype.updateTurnNodeWeight
* @description 更新转向耗费权重服务。转向耗费权重又称转向结点权值。
* @param {UpdateTurnNodeWeightParameters} params - 更新转向耗费权重服务参数类。
* @param {RequestCallback} [callback] 回调函数,该参数未传时可通过返回的 promise 获取结果。
* @returns {Promise} Promise 对象。
*/
updateTurnNodeWeight(params, callback) {
return this._networkAnalystService.updateTurnNodeWeight(params, callback);
}
/**
* @description 所有 Point 考虑 MapLibreGL.lnglat、MapLibreGL.Point、[]三种形式。
* @param {Object} params - 待转换参数。
* @returns {Object}
* @private
*/
_processParams(params) {
if (!params) {
return {};
}
var me = this;
if (params.centers && Util.isArray(params.centers)) {
params.centers.map(function (point, key) {
params.centers[key] = me._toPointObject(point);
return params.centers[key];
});
}
if (params.nodes && Util.isArray(params.nodes)) {
params.nodes.map(function (point, key) {
params.nodes[key] = me._toPointObject(point);
return params.nodes[key];
});
}
if (params.event) {
params.event = me._toPointObject(params.event);
}
if (params.facilities && Util.isArray(params.facilities)) {
params.facilities.map(function (point, key) {
params.facilities[key] = me._toPointObject(point);
return params.facilities[key];
});
}
if (params.parameter && params.parameter.barrierPoints) {
var barrierPoints = params.parameter.barrierPoints;
if (Util.isArray(barrierPoints)) {
barrierPoints.map(function (point, key) {
params.parameter[key] = me._toPointObject(point);
return params.parameter.barrierPoints[key];
});
} else {
params.parameter.barrierPoints = [(barrierPoints instanceof maplibregl.LngLat) ? {
x: barrierPoints.lng,
y: barrierPoints.lat
} : barrierPoints];
}
}
return params;
}
_toPointObject(point) {
if (Util.isArray(point)) {
return {
x: point[0],
y: point[1]
};
}
if (point instanceof maplibregl.LngLat) {
return {
x: point.lng,
y: point.lat
};
}
return (point instanceof maplibregl.Point) ? {
x: point.x,
y: point.y
} : point;
}
_processFormat(resultFormat) {
return (resultFormat) ? resultFormat : DataFormat.GEOJSON;
}
}