xtorcga
Version:
Xtor Compute Geometry Algorithm Libary 计算几何算法库
113 lines (94 loc) • 3.32 kB
text/typescript
import { PI_TWO, toRadians } from "../../src/math/Math";
import { Cartographic } from "./Cartographic";
/**
* A two dimensional region specified as longitude and latitude coordinates.
*
* @alias Rectangle
* @constructor
*
* @param {Number} [west=0.0] The westernmost longitude, in radians, in the range [-Pi, Pi].
* @param {Number} [south=0.0] The southernmost latitude, in radians, in the range [-Pi/2, Pi/2].
* @param {Number} [east=0.0] The easternmost longitude, in radians, in the range [-Pi, Pi].
* @param {Number} [north=0.0] The northernmost latitude, in radians, in the range [-Pi/2, Pi/2].
*
* @see Packable
*/
export class Rectangle {
constructor(public west: number = 0.0, public south: number = 0.0, public east: number = 0.0, public north: number = 0.0) {
}
/**
* 计算宽度 单位弧度
*/
static computeWidth = function (rectangle: Rectangle) {
var east = rectangle.east;
var west = rectangle.west;
if (east < west) {
east += PI_TWO;
}
return east - west;
};
/**
* 计算高度弧度
*/
static computeHeight = function (rectangle: Rectangle) {
return rectangle.north - rectangle.south;
};
static fromDegrees(west: number = 0.0, south: number = 0.0, east: number = 0.0, north: number = 0.0, result?: Rectangle) {
west = toRadians(west);
south = toRadians(south);
east = toRadians(east);
north = toRadians(north);
if (!result) {
return new Rectangle(west, south, east, north);
}
result.west = west;
result.south = south;
result.east = east;
result.north = north;
return result;
};
static fromRadians(west: number = 0.0, south: number = 0.0, east: number = 0.0, north: number = 0.0, result?: Rectangle) {
if (!result) {
return new Rectangle(west, south, east, north);
}
result.west = west;
result.south = south;
result.east = east;
result.north = north;
return result;
};
get width() {
return Rectangle.computeWidth(this);
}
get height() {
return Rectangle.computeHeight(this);
}
/**
* Computes the northeast corner of a rectangle.
*
* @param {Rectangle} rectangle The rectangle for which to find the corner
* @param {Cartographic} [result] The object onto which to store the result.
* @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.
*/
northeast(result?: Cartographic) {
if (!result) {
return new Cartographic(this.east, this.north);
}
result.longitude = this.east;
result.latitude = this.north;
result.height = 0.0;
return result;
};
/**
* Computes the southeast corner of a rectangle.
*/
southeast(result?: Cartographic) {
if (!result) {
return new Cartographic(this.east, this.south);
}
result.longitude = this.east;
result.latitude = this.south;
result.height = 0.0;
return result;
};
}