0% found this document useful (0 votes)
20 views7 pages

Terraformer D Ts

This document describes the Terraformer module, which provides classes and methods for working with GeoJSON data and geometries. The module exports classes that correspond to GeoJSON types like Point, LineString, Polygon, etc. and allow converting between GeoJSON objects and Terraformer Primitive classes. The Primitives provide additional convenience methods for spatial operations. It also includes a Circle class for representing circular geometries and namespace Tools for working with geographic coordinates.

Uploaded by

programh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views7 pages

Terraformer D Ts

This document describes the Terraformer module, which provides classes and methods for working with GeoJSON data and geometries. The module exports classes that correspond to GeoJSON types like Point, LineString, Polygon, etc. and allow converting between GeoJSON objects and Terraformer Primitive classes. The Primitives provide additional convenience methods for spatial operations. It also includes a Circle class for representing circular geometries and namespace Tools for working with geographic coordinates.

Uploaded by

programh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

/**

* Terraformer module
* @example
* import * as Terraformer from "terraformer";
*/

// Note: Terraformer module exports namespace so it can be augmented by


// terraformer-wkt-parser and potentially others
export as namespace Terraformer;

// Export Terraformer for AMD require


export = Terraformer;

declare namespace Terraformer {


export interface Envelope {
x: number;
y: number;
w: number;
h: number;
}
export type BBox = number[]; // [number, number, number, number]

export type Coordinate = GeoJSON.Position;


export type Coordinates = GeoJSON.Position[];

/**
* Terraformer Primitives are JavaScript objects that map directly to their
GeoJSON couterparts.
* Converting a GeoJSON object into a Terraformer Primitive will allow you use
convenience methods like
* point.within(polygon).
*
* Every Primitive inherits from the Terraformer.Primitive base class, thus all
other Primitives share the
* Terraformer.Primitive methods.
*
* There is a Primitive for every type of GeoJSON object, plus a Circle
Primitive which represents a circle as a
* polygon.
*/
export class Primitive<T extends GeoJSON.GeoJsonObject> implements
GeoJSON.GeoJsonObject {
public type: string;
/**
* You create a new Terraformer.Primitive object by passing it a valid
GeoJSON Object. This will return a
* Terraformer.Primitive with the same type as your GeoJSON object.
* @param geojson GeoJSON Primitive
*/
constructor(geojson: T);
/**
* Converts this GeoJSON object’s coordinates to the web mercator spatial
reference.
*/
public toMercator(): this;
/**
* Converts this GeoJSON object’s coordinates to geographic coordinates.
*/
public toGeographic(): this;
/**
* Returns an object with x, y, w and h suitable for passing to most
indexes.
*/
public envelope(): Envelope;
// /**
// * Returns the GeoJSON Bounding Box for this primitive.
// */
// bbox(): number[]; // Terraformer docs have this function, but conflicts
with GeoJSON typescript definitions for
// // optional bbox property.
/**
* Returns the convex hull of this primitive as a Polygon. Will return null
if the convex hull cannot be calculated
* or a valid Polygon cannot be created.
*/
public convexHull(): GeoJSON.Polygon | null;
/**
* Returns true if the passed GeoJSON Geometry object is completely
contained inside this primitive.
* @param geometry The geometry that potentially is inside of this one.
* @returns Returns true if the passed GeoJSON Geometry object is completely
contained inside this primitive.
*/
public contains(geometry: GeoJSON.GeometryObject): boolean;
/**
* Returns true if the passed GeoJSON Geometry object is completely within
this primitive.
* @param geometry GeoJSON geometry
*/
public within(geometry: GeoJSON.GeometryObject): boolean;
/**
* Returns true if the passed GeoJSON Geometry intersects this primitive.
* @param geometry GeoJSON geometry
*/
public intersects(geometry: GeoJSON.GeometryObject): boolean;
}

export class Point extends Primitive<GeoJSON.Point> implements GeoJSON.Point {


public type: "Point";
public coordinates: GeoJSON.Position;
constructor(p: GeoJSON.Point);
constructor(x: number, y: number);
constructor(xy: GeoJSON.Position);
}

export class MultiPoint extends Primitive<GeoJSON.MultiPoint> implements


GeoJSON.MultiPoint {
public type: "MultiPoint";
public coordinates: GeoJSON.Position[];
public forEach: (point: Point, index: number, coordinates: Coordinates) =>
null;
constructor(geojsonMP: GeoJSON.MultiPoint);
constructor(coordinates: Coordinates);
public get(index: number): Point;
public addPoint(coordinate: Coordinate): this;
public insertPoint(coordinate: Coordinate, index: number): this;
public removePoint(index: number): this;
public removePoint(coordinate: Coordinate): this;
}

export class LineString extends Primitive<GeoJSON.LineString> implements


GeoJSON.LineString {
public type: "LineString";
public coordinates: GeoJSON.Position[];
constructor(geoJson: GeoJSON.LineString);
constructor(coordinates: Coordinates);
public addVertex(coordinate: Coordinate): this;
public insertVertex(coordinate: Coordinate, index: number): this;
public removeVertex(index: number): this;
}

export class MultiLineString extends Primitive<GeoJSON.MultiLineString>


implements GeoJSON.MultiLineString {
public type: "MultiLineString";
public coordinates: Coordinate[][];
public forEach: (linestring: LineString, index: number, coordinates:
Coordinates) => null;
constructor(geoJson: GeoJSON.MultiLineString);
constructor(coordinates: Coordinates[]);
public get(index: number): LineString
}

export class Polygon extends Primitive<GeoJSON.Polygon> implements


GeoJSON.Polygon {
public type: "Polygon";
public coordinates: Coordinate[][];
constructor(geoJson: GeoJSON.Polygon);
constructor(coordinates: Coordinates[])
public addVertex(coordinate: Coordinate): this;
public insertVertex(coordinate: Coordinate, index: number): this;
public removeVertex(index: number): this;
public close(): this;
public hasHoles(): boolean;
public holes(): Polygon[]
}

export class MultiPolygon extends Primitive<GeoJSON.MultiPolygon> implements


GeoJSON.MultiPolygon {
public type: "MultiPolygon";
public coordinates: Coordinates[][];
public forEach: (polygon: Polygon, index: number, coordinates: Coordinates)
=> null;
constructor(geoJson: GeoJSON.Polygon);
constructor(geoJson: GeoJSON.MultiPolygon);
// // Valid, according to http://terraformer.io/core/#constructor-6
// constructor(geoJson:{
// type: "MultiPolygon",
// coordinates: number[][][]
// });
constructor(coordinates: Coordinates[]);
constructor(coordinates: Coordinates[][]);
public get(index: number): Polygon
}

export class Feature<T extends GeoJSON.GeometryObject> implements


GeoJSON.Feature<T> {
public type: "Feature";
public geometry: T;
public properties: any;
constructor(geometry: T);
constructor(geoJson: GeoJSON.Feature<T>);
}

export class FeatureCollection<T extends GeoJSON.GeometryObject> implements


GeoJSON.FeatureCollection<T> {
public type: "FeatureCollection";
public features: Array<GeoJSON.Feature<T>>;
public forEach: (feature: Feature<T>, index: number, coordinates:
Coordinates) => null;
constructor(geoJson: GeoJSON.FeatureCollection<T>);
constructor(features: Array<GeoJSON.Feature<T>>);
public get(index: number): Feature<T>
}

export class GeometryCollection implements GeoJSON.GeometryCollection {


public type: "GeometryCollection";
public geometries: GeoJSON.GeometryObject[];
public forEach: (geometry: GeoJSON.GeometryObject, index: number,
coordinates: Coordinates) => null;
constructor(geoJson: GeoJSON.GeometryCollection);
constructor(geoJson: GeoJSON.FeatureCollection<GeoJSON.GeometryObject>);
constructor(features: GeoJSON.GeometryObject[]);
public get(index: number): Primitive<GeoJSON.GeometryObject>
}

/**
* The GeoJSON spec does not provide a way to visualize circles.
* Terraformer.Circle is actual a GeoJSON Feature object that contains a Polygon
representing a circle with a certain number of sides.
* @example
* circle = new Terraformer.Circle([-122.27, 45.65], 500, 64);
*
* circle.contains(point);
*/
export class Circle extends Primitive<GeoJSON.Feature<GeoJSON.Polygon>>
implements GeoJSON.Feature<GeoJSON.Polygon> {
public type: "Feature";
public geometry: GeoJSON.Polygon;
public properties: any;
public steps: (steps?: number) => number;
/**
* Returns the radius circle. If the radius parameter is passed the circle
will be recalculated witht he new radius before returning.
*/
public radius: (radius?: number) => number;
/**
* Returns the center of the circle. If the center parameter is passed the
circle will be recalculated with the new center before returning.
*/
public center: (center?: Coordinate) => Coordinates;
/**
* Terraformer.Circle is created with a center, radius, and steps.
* @param [center=null] Required A GeoJSON Coordinate in [x,y] format.
* @param [radius=250] The radius of the circle in meters.
* @param [steps=32] How many steps will be used to create the polygon that
represents the circle.
*/
constructor(center: Coordinate, radius?: number, steps?: number);
/**
* Recalculates the circle
*/
public recalculate(): this;
/**
* Returns the number of steps to produce the polygon representing the
circle. If the steps parameter is passed the circle will be recalculated witht he
new step count before returning.
*/
}

/**
* Terraformer also has numerous helper methods for working with GeoJSON and
geographic data.
* These tools work with a mix of lower level GeoJSON constructs like
Coordinates,
* Coordinate Arrays and GeoJSON objects and Terraformer Primitives
*/
export class Tools {
// Spatial Reference Conversions
/**
* Converts this GeoJSON object’s coordinates to the web mercator spatial
reference. This is an in-place modification of the passed object.
* @param geojson GeoJSON object
*/
public static toMercator(geojson: GeoJSON.GeoJsonObject):
GeoJSON.GeoJsonObject;
/**
* Converts this GeoJSON object’s coordinates to geographic coordinates.
This is an in-place modification of the passed object.
* @param geojson GeoJSON object
*/
public static toGeographic(geojson: GeoJSON.GeoJsonObject):
GeoJSON.GeoJsonObject;
/**
* Runs the passed function against every Coordinate in the geojson object.
Your function will be passed a Coordinate and will be expected to return a
Coordinate.
* @param geojson GeoJSON object
* @param converter Function to convert one coordinate to a different
coordinate.
*/
public static applyConverter(geojson: GeoJSON.GeoJsonObject, converter:
(coordinate: Coordinate) => Coordinate): GeoJSON.GeoJsonObject;
/**
* Converts the passed Coordinate to web mercator spatial reference.
* @param coordinate Coordinate
*/
public static positionToMercator(coordinate: Coordinate): Coordinate;
/**
* Converts the passed Coordinate to geographic coordinates.
* @param coordinate Coordinate to convert
*/
public static positionToGeographic(coordinate: Coordinate): Coordinate;

// Calculations
/**
* Returns a GeoJSON bounding box for the passed geoJSON.
* @param geojson
*/
public static calculateBounds(geojson: GeoJSON.GeoJsonObject): BBox;
/**
* Returns an object with x, y, w, h. Suitable for passing to most indexes.
* @param geojson
*/
public static calculateEnvelope(geojson: GeoJSON.GeoJsonObject): Envelope;
/**
* Returns an array of coordinates representing the convex hull the the
passed geoJSON.
* @param geojson
*/
public static convexHull(geojson: Coordinates): Coordinates;

// Comparisons

/**
* Accepts an array of coordinates and a coordinate and returns true if the
point falls within the coordinate array.
* @param coordinates Array of coordinates
* @param coordinate Coordinate that will be searched for in the array.
*/
public static coordinatesContainPoint(coordinates: Coordinates[],
coordinate: Coordinate): Boolean;
/**
* Accepts the geometry of a polygon and a coordinate and returns true if
the point falls within the polygon.
* @param polygon
* @param coordinate
*/
public static polygonContainsPoint(polygon: GeoJSON.Polygon, coordinate:
Coordinate): Boolean;
/**
* Accepts the geometry of a polygon and a coordinate and returns true if
the point falls within the polygon.
* @param polygon
* @param coordinate
*/
public static polygonContainsPoint(polygon: GeoJSON.Position[][],
coordinate: Coordinate): Boolean;
/**
* Accepts two arrays of coordinates and returns true if they cross each
other at any point.
* @param c1
* @param c2
* @example
* var pt = [0,0];
* var pt2 = [-111.873779, 40.647303];
*
* var polygon = {
* "type": "Polygon",
* "coordinates": [[
* [-112.074279, 40.52215],
* [-112.074279, 40.853293],
* [-111.610107, 40.853293],
* [-111.610107, 40.52215],
* [-112.074279, 40.52215]
* ]]
* };
*
* var polygonGeometry = polygon.coordinates;
*
* Terraformer.Tools.polygonContainsPoint(polygonGeometry, pt);
* // returns false
* Terraformer.Tools.polygonContainsPoint(polygonGeometry, pt2);
* // returns true
*/
public static arrayIntersectsArray(c1: Coordinates[], c2: Coordinates[]):
Boolean;
/**
* Accepts two individual coordinate pairs and returns true if the passed
coordinate pairs are equal to each other.
* @param c1
* @param c2
*/
public static coordinatesEqual(c1: Coordinate, c2: Coordinate): Boolean;
}
}

You might also like