UNPKG

@maplat/transform

Version:

A JavaScript library that performs coordinate transformation between two plane coordinate systems using transformation definitions generated by Maplat.

288 lines (253 loc) 9.04 kB
import { Feature } from 'geojson'; import { FeatureCollection } from 'geojson'; import { Point } from 'geojson'; import { Polygon } from 'geojson'; import { Position } from 'geojson'; /** * 変換の方向を示す型定義 * - forw: 順方向(ソース → ターゲット) * - bakw: 逆方向(ターゲット → ソース) */ export declare type BiDirectionKey = "forw" | "bakw"; export declare type Centroid = Feature<Point>; export declare type CentroidBD = { [key in BiDirectionKey]?: Centroid; }; /** * コンパイルされた設定の型定義 * 変換に必要な全ての情報を含む */ export declare interface Compiled { version?: number; points: PointSet[]; tins_points: (number | string)[][][]; weight_buffer: WeightBufferBD; strict_status?: StrictStatus; centroid_point: Position[]; edgeNodes?: PointSet[]; kinks_points?: Position[]; yaxisMode?: YaxisMode; vertexMode?: VertexMode; strictMode?: StrictMode; vertices_params: number[][]; vertices_points: PointSet[]; edges: EdgeSet[]; bounds?: number[][]; boundsPolygon?: Feature<Polygon>; wh?: number[]; xy?: number[]; } export declare interface CompiledLegacy extends Compiled { tins?: TinsBD; centroid?: CentroidBD; kinks?: KinksBD; vertices_params: number[][] & VerticesParamsBD; edges: EdgeSet[] & EdgeSetLegacy[]; } /** * 三角形の頂点の座標系を反転する * @param tri 元の三角形 * @returns 座標系が反転された三角形 */ export declare function counterTri(tri: Tri): Tri; /** * エッジの終点を表す型 * [始点のインデックス, 終点のインデックス] */ export declare type Edge = [number, number]; /** * エッジセットの型 * [始点と終点の間の中間点群(地図座標系), * 始点と終点の間の中間点群(変換先座標系), * 始点と終点のインデックスペア] */ export declare type EdgeSet = [Position[], Position[], Edge]; /** * 古いバージョンのエッジセット型 * @deprecated 2.00703以降は EdgeSet を使用 */ export declare type EdgeSetLegacy = { illstNodes: Position[]; mercNodes: Position[]; startEnd: Edge; }; export declare const format_version = 2.00703; declare interface IndexedTins { gridNum: number; xOrigin: number; yOrigin: number; xUnit: number; yUnit: number; gridCache: number[][][]; } export declare type IndexedTinsBD = { [key in BiDirectionKey]?: IndexedTins; }; export declare type Kinks = FeatureCollection<Point>; export declare type KinksBD = { [key in BiDirectionKey]?: Kinks; }; /** * エッジセットを正規化する * 古いバージョンのフォーマットを新しいフォーマットに変換する * * @param edges エッジセット配列 * @param version バージョン番号(オプション) * @returns 正規化されたエッジセット配列 */ export declare function normalizeEdges(edges: EdgeSet[] | EdgeSetLegacy[], version?: number): EdgeSet[]; /** * 座標ペアの型定義。[ソース座標, ターゲット座標] の形式 */ export declare type PointSet = [Position, Position]; declare type PropertiesTri = { [key in PropertyTriKey]: PropertyTri; }; declare type PropertyTri = { geom: Position; index: number | string; }; export declare type PropertyTriKey = "a" | "b" | "c"; /** * 三角形の頂点の順序を修正する * 地図外郭の頂点を含む三角形について、頂点の順序を統一する * @param tins 三角形群 * @returns 頂点順序が修正された三角形群 */ export declare function rotateVerticesTriangle(tins: Tins): Tins; /** * 厳密性モードの型定義 * - strict: 厳密モード(交差なしを保証) * - auto: 自動モード(可能な限り厳密に) * - loose: 緩和モード(交差を許容) */ export declare type StrictMode = "strict" | "auto" | "loose"; /** * 厳密性モードの生成結果 * - strict: 厳密モード生成成功 * - auto: 厳密モードでエラー * - loose: 緩和モード */ export declare type StrictStatus = "strict" | "strict_error" | "loose"; export declare type Tins = FeatureCollection<Polygon, PropertiesTri>; export declare type TinsBD = { [key in BiDirectionKey]?: Tins; }; /** * 座標変換の基本機能を提供するクラス * * 2つの座標系間の変換を、TINネットワークを使用して実現します。 * このクラスは基本的な変換機能のみを提供し、 * 設定ファイルの生成などの追加機能はTinクラスで提供されます。 */ export declare class Transform { /** * 各種モードの定数定義 * すべてreadonlyで、型安全性を確保 */ static VERTEX_PLAIN: "plain"; static VERTEX_BIRDEYE: "birdeye"; static MODE_STRICT: "strict"; static MODE_AUTO: "auto"; static MODE_LOOSE: "loose"; static STATUS_STRICT: "strict"; static STATUS_ERROR: "strict_error"; static STATUS_LOOSE: "loose"; static YAXIS_FOLLOW: "follow"; static YAXIS_INVERT: "invert"; points: PointSet[]; pointsWeightBuffer?: WeightBufferBD; strict_status?: StrictStatus; vertices_params?: VerticesParamsBD; centroid?: CentroidBD; edgeNodes?: PointSet[]; edges?: EdgeSet[]; tins?: TinsBD; kinks?: KinksBD; yaxisMode: YaxisMode; strictMode: StrictMode; vertexMode?: VertexMode; bounds?: number[][]; boundsPolygon?: Feature<Polygon>; wh?: number[]; xy?: number[]; indexedTins?: IndexedTinsBD; stateFull: boolean; stateTriangle?: Tri; stateBackward?: boolean; constructor(); /** * コンパイルされた設定を適用します * * @param compiled - コンパイルされた設定オブジェクト * @returns 変換に必要な主要なオブジェクトのセット * * 以下の処理を行います: * 1. バージョンに応じた設定の解釈 * 2. 各種パラメータの復元 * 3. TINネットワークの再構築 * 4. インデックスの作成 */ setCompiled(compiled: Compiled | CompiledLegacy): void; /** * TINネットワークのインデックスを作成します * * インデックスは変換処理を高速化するために使用されます。 * グリッド形式のインデックスを作成し、各グリッドに * 含まれる三角形を記録します。 */ addIndexedTin(): void; /** * 座標変換を実行します * * @param apoint - 変換する座標 * @param backward - 逆方向の変換かどうか * @param ignoreBounds - 境界チェックを無視するかどうか * @returns 変換後の座標、または境界外の場合はfalse * * @throws {Error} 逆方向変換が許可されていない状態での逆変換時 */ transform(apoint: number[], backward?: boolean, ignoreBounds?: boolean): number[] | false; } /** * 点の座標を変換する * 点が三角形の内部にある場合は三角形による変換を、 * 外部にある場合は頂点パラメータによる変換を行う * @param point 変換する点 * @param tins 三角形群 * @param indexedTins インデックス付き三角形群(オプション) * @param verticesParams 頂点パラメータ(オプション) * @param centroid 重心点(オプション) * @param weightBuffer 重み付けバッファ(オプション) * @param stateTriangle 状態三角形(オプション) * @param stateSetFunc 状態設定関数(オプション) * @returns 変換後の座標 */ export declare function transformArr(point: Feature<Point>, tins: Tins, indexedTins?: IndexedTins, verticesParams?: VerticesParams, centroid?: Feature<Point>, weightBuffer?: WeightBuffer, stateTriangle?: Tri, stateSetFunc?: (tri?: Tri) => void): Position; export declare type Tri = Feature<Polygon, PropertiesTri>; /** * 頂点モードの型定義 * - plain: 通常モード * - birdeye: 鳥瞰図モード */ export declare type VertexMode = "plain" | "birdeye"; declare type VerticesParams = [number[], Tins[]?]; export declare type VerticesParamsBD = { [key in BiDirectionKey]?: VerticesParams; }; declare type WeightBuffer = { [index: string]: number; }; /** * 両方向の重み付けバッファの型定義 */ export declare type WeightBufferBD = { [key in BiDirectionKey]?: WeightBuffer; }; /** * Y軸の向きの型定義 * - follow: Y軸の向きを維持 * - invert: Y軸の向きを反転 */ export declare type YaxisMode = "follow" | "invert"; export { }