import BaseServer from '../BaseServer'
import { Zondy } from '../../base'
import { FetchMethod } from '../../base/enum'
import { defaultValue, isNull } from '../../util'
/**
* 地理几何服务
* @class GeometryServer
* @moduleEx ServiceModule
* @extends BaseServer
* @param {Object} options 构造参数
* @param {String} [options.url = 无] 服务基地址
* @example
* // ES5引入方式
* const { GeometryServer } = Zondy.Service
* // ES6引入方式
* import { GeometryServer } from "@mapgis/webclient-common"
* const geometryServer = new GeometryServer({
* url: 'http://localhost:8089/igs/rest/services/system/GeometryServer',
* requestInterceptor: {
* before: function (config) {
* return config;
* },
* failure: function (error) {
* console.log("请求发送失败(拦截器):", error)
* }
* },
* responseInterceptor: {
* success: function (result) {
* console.log("请求成功拦截响应")
* return result;
* },
* failure: function (result) {
* console.log("请求失败拦截响应")
* return result;
* }
* }
* });
*/
class GeometryServer extends BaseServer {
constructor(options) {
super(options)
}
/**
* 计算面积和周长
* @param options 查询参数
* @param {Polygon} [options.polygons] 要计算的多边形,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { Polygon } = Zondy.Geometry
* // ES6引入方式
* import { Polygon } from "@mapgis/webclient-common"
* geometryServer.calculateAreasAndLengths({
* polygons: new Polygon({
* spatialReference: "EPSG:4326",
* coordinates: [
* [
* [108.9587, 34.2206],
* [112.9607, 31.2196],
* [110.9598, 30.2181],
* [110.9587, 32.2191],
* [108.9587, 34.2206]
* ]
* ]
* }),
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.calculateAreasAndLengths({
* polygons: new Polygon({
* spatialReference: "EPSG:4326",
* coordinates: [
* [
* [108.9587, 34.2206],
* [112.9607, 31.2196],
* [110.9598, 30.2181],
* [110.9587, 32.2191],
* [108.9587, 34.2206]
* ]
* ]
* })
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
calculateAreasAndLengths(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
polygons: {
type: 'Polygon',
required: true,
process: 'igsGeometryServer'
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/areasAndLengths?f=json`
}
)
}
/**
* 计算面积
* @param options 查询参数
* @param {Polygon} [options.polygon] 要计算的多边形,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @param {ProjectInfo} [options.projectInfo] 投影参考信息,projectInfo或projectInfoBySrsID二选一
* @param {ProjectInfoBySrsID} [options.projectInfoBySrsID] 源投影参考系ID,projectInfo或projectInfoBySrsID二选一
* */
calculateArea(options) {
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
polygon: {
type: 'Polygon',
required: true,
alias: 'Dots',
process: 'igsDots'
},
projectInfo: {
type: 'Object',
alias: 'ProjectInfo',
required: true,
oneOf: ['projectInfoBySrsID']
},
projectInfoBySrsID: {
type: 'Object',
alias: 'ProjectInfoBySrsID',
required: true,
oneOf: ['projectInfo']
}
}
// 设置请求头,一定要是text/plain;charset=UTF-8
options.headers = {
'Content-Type': 'text/plain;charset=UTF-8'
}
// 使用post请求
options.method = FetchMethod.post
// post参数为Object形式
options.useObject = true
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/calArea?f=json`
}
)
}
/**
* 计算长度
* @param options 查询参数
* @param {LineString} [options.lineString] 要计算的线,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @param {ProjectInfo} [options.projectInfo] 投影参考信息,projectInfo或projectInfoBySrsID二选一
* @param {ProjectInfoBySrsID} [options.projectInfoBySrsID] 源投影参考系ID,projectInfo或projectInfoBySrsID二选一
* */
calculateLength(options) {
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
lineString: {
type: 'LineString',
required: true,
alias: 'Dots',
process: 'igsDots'
},
projectInfo: {
type: 'Object',
alias: 'ProjectInfo',
required: true,
oneOf: ['projectInfoBySrsID']
},
projectInfoBySrsID: {
type: 'Object',
alias: 'ProjectInfoBySrsID',
required: true,
oneOf: ['projectInfo']
}
}
// 设置请求头,一定要是text/plain;charset=UTF-8
options.headers = {
'Content-Type': 'text/plain;charset=UTF-8'
}
// 使用post请求
options.method = FetchMethod.post
// post参数为Object形式
options.useObject = true
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/callength?f=json`
}
)
}
/**
* 对矩形范围坐标点进行投影转换
* @param options 查询参数
* @param {String} [options.gdbsvrName] 数据源名称,必填
* @param {String} [options.gdbName] 地理数据库名称,必填
* @param {String} [options.srefID] 源投影参考系ID,必填
* @param {String} [options.desfID] 目的投影参考系ID,必填
* @param {Extent} [options.extent] 矩形范围,必填
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @param {String} [options.userName] 地理数据源/地理数据库账户名
* @param {String} [options.password] 地理数据源/地理数据库密码
* */
projectInExtent(options) {
// 设置PATH PARAMETERS校验
const checkPathOpts = {
gdbsvrName: {
type: 'String'
},
gdbName: {
type: 'String'
},
srefID: {
type: 'String'
},
desfID: {
type: 'String'
}
}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
extent: {
type: 'Extent',
alias: 'rang',
required: true,
process: 'igsRange$'
},
userName: {
type: 'String'
},
password: {
type: 'String'
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url, options) {
return `${url}/${options.gdbsvrName}/${options.gdbName}/${options.srefID}/${options.desfID}?f=json`
}
)
}
/**
* 缓冲分析
* @param options 查询参数
* @param {Polygon} [options.polygon] 要计算的多边形
* @param {Number} [options.distance] 缓冲半径
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { Polygon } = Zondy.Geometry
* const { FetchMethod } = Zondy.Enum
* // ES6引入方式
* import { Polygon, FetchMethod } from "@mapgis/webclient-common"
* geometryServer.bufferAnalyse({
* geometries: new Polygon({
* spatialReference: "EPSG:4326",
* coordinates: [
* [
* [108.9587, 34.2206],
* [112.9607, 31.2196],
* [110.9598, 30.2181],
* [110.9587, 32.2191],
* [108.9587, 34.2206]
* ]
* ]
* }),
* method: FetchMethod.post,
* distance: 1,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.bufferAnalyse({
* geometries: new Polygon({
* spatialReference: "EPSG:4326",
* coordinates: [
* [
* [108.9587, 34.2206],
* [112.9607, 31.2196],
* [110.9598, 30.2181],
* [110.9587, 32.2191],
* [108.9587, 34.2206]
* ]
* ]
* }),
* distance: 100,
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
bufferAnalyse(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
geometries: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
distance: {
type: 'Number',
required: true
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/buffer?f=json`
}
)
}
/**
* 求差计算
* @param options 查询参数
* @param {Geometry} [options.geometry1] 要计算的多边形1,必填
* @param {Geometry} [options.geometry2] 要计算的多边形2,必填
* @param {Number} [options.tolerance] 容差,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { Polygon } = Zondy.Geometry
* // ES6引入方式
* import { Polygon } from "@mapgis/webclient-common"
* geometryServer.calculateDifference({
* geometry1: new Polygon({
* coordinates: [
* [
* [105.0, 0.0],
* [164.0, 0.0],
* [164.0, 10.0],
* [105.0, 10.0],
* [105.0, 0.0]
* ]
* ]
* }),
* geometry2: new Polygon({
* coordinates: [
* [
* [110.0, 5.0],
* [170.0, 5.0],
* [170.0, 20.0],
* [110.0, 20.0],
* [110.0, 5.0]
* ]
* ]
* }),
* tolerance: 1,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.calculateDifference({
* geometry1: new Polygon({
* coordinates: [
* [
* [105.0, 0.0],
* [164.0, 0.0],
* [164.0, 10.0],
* [105.0, 10.0],
* [105.0, 0.0]
* ]
* ]
* }),
* geometry2: new Polygon({
* coordinates: [
* [
* [110.0, 5.0],
* [170.0, 5.0],
* [170.0, 20.0],
* [110.0, 20.0],
* [110.0, 5.0]
* ]
* ]
* }),
* tolerance: 1
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
calculateDifference(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
geometry1: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
geometry2: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
tolerance: {
type: 'Number',
required: true
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/difference?f=json`
}
)
}
/**
* 求距离
* @param options 查询参数
* @param {Geometry} [options.geometry1] 要计算的多边形1,必填
* @param {Geometry} [options.geometry2] 要计算的多边形2,必填
* @param {Geometry} [options.srs] 参考系,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { Point,LineString } = Zondy.Geometry
* const { FetchMethod } = Zondy.Enum
* // ES6引入方式
* import { Point,LineString,FetchMethod } from "@mapgis/webclient-common"
* geometryServer.calculateDistance({
* geometry1: new Zondy.Geometry.Point({
* coordinates: [
* 105.380859375, 31.57853542647338
* ]
* }),
* geometry2: new LineString({
* coordinates: [[-117,34],[-116,34],[-117,33]]
* }),
* srs: "EPSG:4326",
* method: FetchMethod.post,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.calculateDistance({
* geometry1: new Point({
* coordinates: [
* 105.380859375, 31.57853542647338
* ]
* }),
* geometry2: new LineString({
* coordinates: [[-117,34],[-116,34],[-117,33]]
* }),
* srs: "EPSG:4326"
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
calculateDistance(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
geometry1: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
geometry2: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
srs: {
type: 'String',
required: true
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/distance?f=json`
}
)
}
/**
* 求交计算
* @param options 查询参数
* @param {Geometry} [options.geometry1] 要计算的多边形1,必填
* @param {Geometry} [options.geometry2] 要计算的多边形2,必填
* @param {Number} [options.tolerance] 容差,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // ES5引入方式
* const { Polygon } = Zondy.Geometry
* const { Polygon,FetchMethod } = Zondy.Enum
* // ES6引入方式
* import { Polygon,FetchMethod } from "@mapgis/webclient-common"
* geometryServer.calculateIntersect({
* geometry1: new Polygon({
* coordinates: [[ [105.0, 0.0],[164.0, 0.0],[164.0, 10.0],[105.0, 10.0],[105.0, 0.0] ]]
* }),
* geometry2: new Polygon({
* coordinates: [[ [110.0, 5.0],[170.0, 5.0],[170.0, 20.0],[110.0, 20.0],[110.0, 5.0] ]]
* }),
* tolerance: 1,
* method: FetchMethod.post,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.calculateIntersect({
* geometry1: new Polygon({
* coordinates: [[ [105.0, 0.0],[164.0, 0.0],[164.0, 10.0],[105.0, 10.0],[105.0, 0.0] ]]
* }),
* geometry2: new Polygon({
* coordinates: [[ [110.0, 5.0],[170.0, 5.0],[170.0, 20.0],[110.0, 20.0],[110.0, 5.0] ]]
* }),
* tolerance: 1
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
calculateIntersect(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
geometry1: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
geometry2: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
tolerance: {
type: 'Number',
required: true
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/intersect?f=json`
}
)
}
/**
* 求label点
* @param options 查询参数
* @param {Polygon} [options.polygons] 要计算的多边形,单区或多区几何,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { Polygon } = Zondy.Geometry
* const { Polygon,FetchMethod } = Zondy.Enum
* // ES6引入方式
* import { Polygon,FetchMethod } from "@mapgis/webclient-common"
* geometryServer.calculateLabelPoints({
* polygons: new Polygon({
* coordinates: [[ [100.0, 0.0],[101.0, 0.0],[101.0, 1.0],[100.0, 1.0],[100.0, 0.0] ]]
* }),
* method: FetchMethod.post,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.calculateLabelPoints({
* polygons: new Polygon({
* coordinates: [[ [100.0, 0.0],[101.0, 0.0],[101.0, 1.0],[100.0, 1.0],[100.0, 0.0] ]]
* })
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
calculateLabelPoints(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
polygons: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/labelPoints?f=json`
}
)
}
/**
* 求长度
* @param options 查询参数
* @param {LineString | MultiLineString} [options.lineString] 要计算的线,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { LineString } = Zondy.Geometry
* const { FetchMethod } = Zondy.Enum
* // ES6引入方式
* import { LineString,FetchMethod } from "@mapgis/webclient-common"
* geometryServer.calculateLengths({
* polylines: new LineString({
* spatialReference: 'EPSG:4326',
* coordinates: [[-117,34],[-116,34],[-117,33]]
* }),
* method: FetchMethod.post,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.calculateLengths({
* polylines: new LineString({
* spatialReference: 'EPSG:4326',
* coordinates: [[-117,34],[-116,34],[-117,33]]
* }),
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
calculateLengths(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
polylines: {
type: 'LineString | MultiLineString',
required: true,
process: 'igsGeometryServer'
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/lengths?f=json`
}
)
}
/**
* 几何投影
* @param options 查询参数
* @param {Geometry} [options.geometries] 要计算的投影几何对象,必填
* @param {String} [options.inSrs] 原始参考系,必填
* @param {String} [options.outSrs] 目标参考系,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { LineString } = Zondy.Geometry
* const { FetchMethod } = Zondy.Enum
* // ES6引入方式
* import { Polygon,FetchMethod } from "@mapgis/webclient-common"
* geometryServer.geometryProject({
* geometries: new LineString({
* coordinates: [[-117,34],[-116,34],[-117,33]]
* }),
* inSrs: 'EPSG:4326',
* outSrs: 'EPSG:3857',
* method: FetchMethod.post,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.geometryProject({
* geometries: new LineString({
* coordinates: [[-117,34],[-116,34],[-117,33]]
* }),
* inSrs: 'EPSG:4326',
* outSrs: 'EPSG:3857'
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
geometryProject(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
geometries: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
inSrs: {
type: 'String',
required: true
},
outSrs: {
type: 'String',
required: true
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/project?f=json`
}
)
}
/**
* 计算拓扑关系
* @param options 查询参数
* @param {Geometry} [options.geometry1] 要计算的多边形1,必填
* @param {Geometry} [options.geometry2] 要计算的多边形2,必填
* @param {Number} [options.tolerance] 容差,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { LineString,Polygon } = Zondy.Geometry
* const { FetchMethod } = Zondy.Enum
* // ES6引入方式
* import { LineString,Polygon,FetchMethod } from "@mapgis/webclient-common"
* geometryServer.calculateTopologyRelation({
* geometry1: new LineString({
* coordinates: [ [117,0],[117,44] ]
* }),
* geometry2: new Polygon({
* coordinates: [[ [110.0, 5.0],[170.0, 5.0],[170.0, 20.0],[110.0, 20.0],[110.0, 5.0] ]]
* }),
* tolerance: 1,
* method: FetchMethod.post,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* //promise方式
* geometryServer.calculateTopologyRelation({
* geometry1: new LineString({
* coordinates: [ [117,0],[117,44] ]
* }),
* geometry2: new Polygon({
* coordinates: [[ [110.0, 5.0],[170.0, 5.0],[170.0, 20.0],[110.0, 20.0],[110.0, 5.0] ]]
* }),
* tolerance: 1
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
calculateTopologyRelation(options) {
options = defaultValue(options, {})
// 使用post请求
options.method = defaultValue(options.method, FetchMethod.post)
let checkPathOpts
let checkQueryOpts
if (this.url.indexOf('/igs/rest/mrgs/geomservice') > -1) {
// 设置PATH PARAMETERS校验
checkPathOpts = {}
// 设置QUERY PARAMETERS校验
checkQueryOpts = {
distance: {
type: 'Number',
alias: 'NearDis',
default: 0.01
},
point: {
type: 'Point',
alias: 'Pnt',
process: 'toOldIGSGeometry'
},
lingString: {
type: 'LineString',
alias: 'Line',
process: 'toOldIGSGeometry'
},
polygon: {
type: 'Polygon',
alias: 'Reg',
process: 'toOldIGSGeometry'
},
topologyPolygon: {
type: 'Polygon',
alias: 'RelativeObj',
process: 'toOldIGSGeometry'
}
}
// 设置请求头,一定要是text/plain;charset=UTF-8
options.headers = {
'Content-Type': 'text/plain;charset=UTF-8'
}
// 使用post请求
options.method = FetchMethod.post
// post参数为Object形式
options.useObject = true
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/topanalysis?f=json`
}
)
} else {
// 设置PATH PARAMETERS校验
checkPathOpts = {}
// 设置QUERY PARAMETERS校验
checkQueryOpts = {
geometry1: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
geometry2: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
tolerance: {
type: 'Number',
required: true
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/relation?f=json`
}
)
}
}
/**
* 计算光滑曲线,igs1.0服务
* @param options 查询参数
* @param {Number} [options.type] 插值方式,0为二次样条、1为三次样条、2为三次Beizer样条、3为三次B样条,必填
* @param {LineString} [options.lineString] 要计算的线几何,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @param {Number} [options.tolerance] step
* */
smoothLineString(options) {
options = defaultValue(options, {})
if (isNull(options.type) || isNull(options.lineString)) {
return
}
options.step = defaultValue(options.step, 1)
// 设置请求头,一定要是text/plain;charset=UTF-8
options.headers = {
'Content-Type': 'text/plain;charset=UTF-8'
}
// 使用post请求
options.method = FetchMethod.post
options.data = JSON.stringify(options.lineString.toDots())
// 调用基类的查询信息方法
return this._postRequest(
`${this.url}/smooth?f=json&type=${options.type}&step=${options.step}`,
options
)
}
/**
* 求并
* @param options 查询参数
* @param {Geometry} [options.geometry1] 要计算的多边形1,必填
* @param {Geometry} [options.geometry2] 要计算的多边形2,必填
* @param {Number} [options.tolerance] 容差,必填
* @param {Function} [options.success] 查询成功回调函数,若使用Promise方式则不必填写
* @param {Function} [options.failure] 查询失败回调函数,若使用Promise方式则不必填写
* @example
* // 回调方式
* // ES5引入方式
* const { Polygon } = Zondy.Geometry
* const { FetchMethod } = Zondy.Enum
* // ES6引入方式
* import { Polygon,FetchMethod } from "@mapgis/webclient-common"
* geometryServer.calculateUnion({
* geometry1: new Polygon({
* coordinates: [[ [105.0, 0.0],[164.0, 0.0],[164.0, 10.0],[105.0, 10.0],[105.0, 0.0] ]]
* }),
* geometry2: new Polygon({
* coordinates: [[ [110.0, 5.0],[170.0, 5.0],[170.0, 20.0],[110.0, 20.0],[110.0, 5.0] ]]
* }),
* tolerance: 1,
* method: FetchMethod.post,
* success: function (result) {
* console.log('请求成功:', result);
* },
* failure: function (result) {
* console.log('请求失败:', result);
* }
* });
* // promise方式
* geometryServer.calculateUnion({
* geometry1: new Polygon({
* coordinates: [[ [105.0, 0.0],[164.0, 0.0],[164.0, 10.0],[105.0, 10.0],[105.0, 0.0] ]]
* }),
* geometry2: new Polygon({
* coordinates: [[ [110.0, 5.0],[170.0, 5.0],[170.0, 20.0],[110.0, 20.0],[110.0, 5.0] ]]
* }),
* tolerance: 1,
* }).then(function (result) {
* console.log('请求成功:', result);
* }).catch(function (result) {
* console.log('请求失败:', result);
* })
*/
calculateUnion(options) {
// 设置PATH PARAMETERS校验
const checkPathOpts = {}
// 设置QUERY PARAMETERS校验
const checkQueryOpts = {
geometry1: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
geometry2: {
type: 'Geometry',
required: true,
process: 'igsGeometryServerNoSRS'
},
tolerance: {
type: 'Number',
required: true
}
}
// 调用基类的查询信息方法
return this._queryByParameters(
options,
checkPathOpts,
checkQueryOpts,
// 拼装返回基地址
function (url) {
return `${url}/union?f=json`
}
)
}
}
Zondy.Service.GeometryServer = GeometryServer
export default GeometryServer