/**
* @content 空间计算组件 仅包含简单的角度计算和两点距离计算 已包含在几何类内部的计算有:计算机长度、实地长度、计算机面积、实地面积、几何范围、label点等
* @author 2019-09-25
*/
import { NativeModules } from 'react-native';
let SPC = NativeModules.JSSpaCalculator;
import Dot from './Dot.js';
import CrossData from './CrossData.js';
/**
* @class SpaCalculator
* @description 空间计算
*/
export default class SpaCalculator {
/**
* 计算直线角度(-PI到+PI)
* @memberOf SpaCalculator
* @param {Dot} xy0 点坐标
* @param {Dot} xy1 点坐标
* @return {Promise.<double>}直线角度(-PI到+PI)
*/
static async anglePIOfDot(xy0, xy1) {
try {
return await SPC.anglePIOfDot(xy0._MGDotId, xy1._MGDotId);
} catch (e) {
console.error(e);
}
}
/**
* 计算直线角度(-PI到+PI)
* @memberOf SpaCalculator
* @param {double} x0 x0坐标
* @param {double} y0 y0坐标
* @param {double} x1 x1坐标
* @param {double} y1 y1坐标
* @return {Promise.<double>}直线角度(-PI到+PI)
*/
static async anglePIOfXY(x0, y0, x1, y1) {
try {
return await SPC.anglePIOfXY(x0, y0, x1, y1);
} catch (e) {
console.error(e);
}
}
/**
* 计算直线角度(0到2PI)
* @memberOf SpaCalculator
* @param {Dot} xy0 点坐标
* @param {Dot} xy1 点坐标
* @return {Promise.<double>} 直线角度(0到2PI)
*/
static async angle2PIOfDot(xy0, xy1) {
try {
return await SPC.angle2PIOfDot(xy0._MGDotId, xy1._MGDotId);
} catch (e) {
console.error(e);
}
}
/**
* 计算直线角度(0到2PI)
* @memberOf SpaCalculator
* @param {double} x0 x0坐标
* @param {double} y0 y0坐标
* @param {double} x1 x1坐标
* @param {double} y1 y1坐标
* @return {Promise.<double>} 直线角度(0到2PI)
*/
static async angle2PIOfXY(x0, y0, x1, y1) {
try {
return await SPC.angle2PIOfXY(x0, y0, x1, y1);
} catch (e) {
console.error(e);
}
}
/**
* 计算两点距离
* @memberOf SpaCalculator
* @param {Dot} xy0 点坐标
* @param {Dot} xy1 点坐标
* @return {Promise.<double>} 两点距离
*/
static async distanceOfDot(xy0, xy1) {
try {
return await SPC.distanceOfDot(xy0._MGDotId, xy1._MGDotId);
} catch (e) {
console.error(e);
}
}
/**
* 计算两点距离
* @memberOf SpaCalculator
* @param {double} x0 x0坐标
* @param {double} y0 y0坐标
* @param {double} x1 x1坐标
* @param {double} y1 y1坐标
* @return {Promise.<double>}两点距离
*/
static async distanceOfXY(x0, y0, x1, y1) {
try {
return await SPC.distanceOfXY(x0, y0, x1, y1);
} catch (e) {
console.error(e);
}
}
/**
* 计算两个几何对象间的距离
* **********************************************************************************
* * * 点 * 线 * 区(单圈) * 多线 * 多区 *
* **********************************************************************************
* * 点 * min|max * min * min|max * 不支持 * 不支持 *
* * 线 * min * min|max * 不支持 * 不支持 * 不支持 *
* * 区(单圈) * min|max * 不支持 * min * 不支持 * 不支持 *
* * 多线 * min * min|max * 不支持 * 不支持 * 不支持 *
* * 多区 * min|max * 不支持 * min * 不支持 * 不支持 *
* **********************************************************************************
*
* @param {Geometry} geom1 几何对象1
* @param {Geometry} geom2 几何对象2
* @param {int} type 计算距离方法
* @return {Promise.<double>} 距离长度
*/
static async distanceOfGeometry(geom1, geom2, type) {
try {
return await SPC.distanceOfGeometry(geom1._MGGeometryId, geom2._MGGeometryId, type);
} catch (e) {
console.error(e);
}
}
/**
* 计算两条线的交点
* @memberOf SpaCalculator
* @param {GeoVarLine} line1 线1
* @param {GeoVarLine} line2 线2
* @return {Promise.<Dot[]>} 两条线的交点
*/
static async calLinesInters(line1, line2) {
try {
var objArr = [];
let { LinesIntersArray } = await SPC.calLinesInters(
line1._MGGeoVarLineId,
line2._MGGeoVarLineId
);
for (var i = 0; i < LinesIntersArray.length; i++) {
var dot = new Dot();
dot._MGDotId = LinesIntersArray[i];
objArr.push(dot);
}
return objArr;
} catch (e) {
console.error(e);
}
}
/**
* 找出自相交的交点,自相交检查
* @memberOf SpaCalculator
* @param {Dot[]} pointArry 线坐标
* @return {Promise.List<CrossData>} 交点数组
*/
static async arcSelfCross(pointArry) {
try {
var objArr = [];
let { CrossDataArray } = await SPC.arcSelfCross(pointArry);
for (var i = 0; i < CrossDataArray.length; i++) {
var crossData = new CrossData();
crossData._MGCrossDataId = CrossDataArray[i];
objArr.push(crossData);
}
return objArr;
} catch (e) {
console.error(e);
}
}
}