JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 14
  • Score
    100M100P100Q82191F
  • License MIT

A TypeScript library for handling LineString geometric objects with transformation capabilities

Package Exports

  • linestring
  • linestring/dist/index.js
  • linestring/dist/index.mjs

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (linestring) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

LineString

A TypeScript library for handling LineString geometric objects, supporting creation, cloning, transformation, and various geometric operations.

Features

  • Create and manage LineString objects
  • Support for WKT format parsing
  • Geometric transformations: translation, scaling, rotation
  • Line simplification and smoothing
  • Matrix transformation support
  • Coordinate operations

Installation

# Install via npm
npm install linestring

# Or install via yarn
yarn add linestring

Usage Examples

Basic Usage

import { LineString, create, fromWKT, clone } from 'linestring';

// Create a new LineString object
const line = create();

// Create from WKT string
fromWKT(line, "LINESTRING(116.36 39.90, 116.46 39.90, 116.56 39.90)");

// Clone a LineString object
const clonedLine = clone(line);

Geometric Transformations

import { translate, scale, rotate } from 'linestring';

// Translation
translate(line, line, 10, 5); // Translate 10 units on X-axis, 5 units on Y-axis

// Scaling
scale(line, line, [2, 2], [0, 0]); // Scale by 2x on both axes with origin as center

// Rotation
rotate(line, line, Math.PI / 4, [0, 0]); // Rotate 45 degrees around the origin

Line Processing

import { simplify, smooth } from 'linestring';

// Simplify line (using Douglas-Peucker algorithm)
simplify(line, line, 0.01); // Tolerance value of 0.01

// Smooth line (using Catmull-Rom spline algorithm)
smooth(line, line, 0.5, 10); // Tension value 0.5, 10 interpolation points per segment

Matrix Transformation

import { transformMat3 } from 'linestring';

// Transform using a 3x3 matrix
const matrix = new Float32Array([
  1, 0, 0,
  0, 1, 0,
  10, 5, 1  // Translation part
]);

transformMat3(line, line, matrix);

API Documentation

LineString Class

Represents a LineString geometric object.

class LineString {
  type: string;           // Object type, fixed as "LineString"
  coordinates: number[][]; // Coordinate array, each element in [x, y] format
}

Function List

create()

Creates a new empty LineString object.

clone(a: LineString): LineString

Clones a LineString object.

fromWKT(out: LineString, wkt: string): void

Creates a LineString object from a WKT format string.

transformMat3(out: LineString, a: LineString, mat3: Float32Array): LineString

Transforms a LineString object using a 3x3 matrix.

translate(out: LineString, a: LineString, dx: number, dy: number = 0): LineString

Translates a LineString object.

scale(out: LineString, a: LineString, scale: number[], origin: number[] = [0, 0]): LineString

Scales a LineString object.

rotate(out: LineString, a: LineString, rad: number, origin: number[] = [0, 0]): LineString

Rotates a LineString object around a specified point.

simplify(out: LineString, a: LineString, tolerance: number): LineString

Simplifies a LineString object using the Douglas-Peucker algorithm.

smooth(out: LineString, a: LineString, tension: number = 0.5, numOfSegments: number = 10): LineString

Smooths a LineString object using the Catmull-Rom spline algorithm.

Data Format

LineString Structure

{
  "type": "LineString",
  "coordinates": [
    [116.36, 39.90],
    [116.46, 39.90],
    [116.56, 39.90]
  ]
}

WKT Format Support

Supports parsing LINESTRING type WKT format:

LINESTRING(116.36 39.90, 116.46 39.90, 116.56 39.90)

License

MIT

Contributing

Welcome to submit Issues and Pull Requests to improve this library. ```