A TypeScript library for handling LineString geometric objects with transformation capabilities
一个用于处理 LineString 几何对象的 TypeScript 库,支持创建、克隆、变换和各种几何操作。
- 创建和管理 LineString 对象
- 支持 WKT 格式解析
- 几何变换:平移、缩放、旋转
- 线简化和圆滑处理
- 矩阵变换支持
- 坐标操作
``bash通过 npm 安装
npm install linestring
使用示例
$3
`typescript
import { LineString, create, fromWKT, clone } from 'linestring';// 创建新的 LineString 对象
const line = create();
// 从 WKT 字符串创建
fromWKT(line, "LINESTRING(116.36 39.90, 116.46 39.90, 116.56 39.90)");
// 克隆 LineString 对象
const clonedLine = clone(line);
`$3
`typescript
import { translate, scale, rotate } from 'linestring';// 平移
translate(line, line, 10, 5); // X轴平移10,Y轴平移5
// 缩放
scale(line, line, [2, 2], [0, 0]); // 以原点为中心,X轴和Y轴都放大2倍
// 旋转
rotate(line, line, Math.PI / 4, [0, 0]); // 以原点为中心,旋转45度
`$3
`typescript
import { simplify, smooth } from 'linestring';// 简化线(使用 Douglas-Peucker 算法)
simplify(line, line, 0.01); // 容差值为 0.01
// 圆滑线(使用 Catmull-Rom 样条算法)
smooth(line, line, 0.5, 10); // 张力值 0.5,每个线段插值 10 个点
`$3
`typescript
import { transformMat3 } from 'linestring';// 使用 3x3 矩阵进行变换
const matrix = new Float32Array([
1, 0, 0,
0, 1, 0,
10, 5, 1 // 平移部分
]);
transformMat3(line, line, matrix);
`API 文档
$3
表示一个 LineString 几何对象。
`typescript
class LineString {
type: string; // 对象类型,固定为 "LineString"
coordinates: number[][]; // 坐标数组,每个元素为 [x, y] 格式
}
`$3
#### create()
创建一个新的空 LineString 对象。
#### clone(a: LineString): LineString
克隆一个 LineString 对象。
#### fromWKT(out: LineString, wkt: string): void
从 WKT 格式的字符串创建 LineString 对象。
#### transformMat3(out: LineString, a: LineString, mat3: Float32Array): LineString
使用 3x3 矩阵变换 LineString 对象。
#### translate(out: LineString, a: LineString, dx: number, dy: number = 0): LineString
平移 LineString 对象。
#### scale(out: LineString, a: LineString, scale: number[], origin: number[] = [0, 0]): LineString
缩放 LineString 对象。
#### rotate(out: LineString, a: LineString, rad: number, origin: number[] = [0, 0]): LineString
绕指定点旋转 LineString 对象。
#### simplify(out: LineString, a: LineString, tolerance: number): LineString
使用 Douglas-Peucker 算法简化 LineString 对象。
#### smooth(out: LineString, a: LineString, tension: number = 0.5, numOfSegments: number = 10): LineString
使用 Catmull-Rom 样条算法平滑 LineString 对象。
数据格式
$3
`json
{
"type": "LineString",
"coordinates": [
[116.36, 39.90],
[116.46, 39.90],
[116.56, 39.90]
]
}
`$3
支持解析 LINESTRING 类型的 WKT 格式:
`
LINESTRING(116.36 39.90, 116.46 39.90, 116.56 39.90)
`许可证
MIT
贡献
欢迎提交 Issue 和 Pull Request 来改进这个库。
``