@maplat/transform 0.4.1 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +224 -224
- package/README.ja.md +340 -170
- package/README.md +341 -171
- package/dist/index.d.ts +218 -1
- package/dist/maplat_transform.js +756 -459
- package/dist/maplat_transform.umd.js +1 -1
- package/package.json +3 -1
- package/src/compiled-state.ts +213 -211
- package/src/constants.ts +8 -0
- package/src/coord-utils.ts +27 -0
- package/src/edgeutils.ts +47 -47
- package/src/geometry.ts +240 -247
- package/src/index.ts +38 -398
- package/src/map-transform.ts +473 -0
- package/src/transform.ts +338 -0
- package/src/triangulation.ts +170 -179
- package/src/types.ts +162 -122
- package/src/viewpoint.ts +104 -0
package/dist/index.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export declare interface Compiled {
|
|
|
32
32
|
strictMode?: StrictMode;
|
|
33
33
|
vertices_params: number[][];
|
|
34
34
|
vertices_points: PointSet[];
|
|
35
|
-
edges
|
|
35
|
+
edges?: EdgeSet[];
|
|
36
36
|
bounds?: number[][];
|
|
37
37
|
boundsPolygon?: Feature<Polygon>;
|
|
38
38
|
wh?: number[];
|
|
@@ -102,6 +102,161 @@ export declare type KinksBD = {
|
|
|
102
102
|
[key in BiDirectionKey]?: Kinks;
|
|
103
103
|
};
|
|
104
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Input data for MapTransform.setMapData().
|
|
107
|
+
*/
|
|
108
|
+
export declare interface MapData {
|
|
109
|
+
/** Compiled TIN data for the main layer */
|
|
110
|
+
compiled: Compiled;
|
|
111
|
+
/** maxZoom value used to compute _maxxy = 2^maxZoom * 256 */
|
|
112
|
+
maxZoom?: number;
|
|
113
|
+
/** Sub-map layers */
|
|
114
|
+
sub_maps?: SubMapData[];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* MapTransform — 処理2・3・4を担う座標変換クラス
|
|
119
|
+
*
|
|
120
|
+
* - 処理2: submaps 属性を持つ地図で、複数 TIN のうちどれを適用するか判定・選択し座標変換
|
|
121
|
+
* - 処理3: ビューポート ↔ メルカトル5点 変換
|
|
122
|
+
* - 処理4: ビューポート ↔ TIN 適用後メルカトル5点 変換
|
|
123
|
+
*
|
|
124
|
+
* OpenLayers への依存ゼロ。ブラウザ・Node.js 両対応。
|
|
125
|
+
*/
|
|
126
|
+
export declare class MapTransform {
|
|
127
|
+
private mainTin;
|
|
128
|
+
private subTins;
|
|
129
|
+
private _maxxy;
|
|
130
|
+
/**
|
|
131
|
+
* 地図データ(コンパイル済み TIN + sub_maps)をロードする
|
|
132
|
+
*
|
|
133
|
+
* @param mapData - メイン TIN と sub_maps の情報
|
|
134
|
+
*/
|
|
135
|
+
setMapData(mapData: MapData): void;
|
|
136
|
+
/**
|
|
137
|
+
* ピクセル座標 → メルカトル座標(最適レイヤー選択)
|
|
138
|
+
*
|
|
139
|
+
* @param xy - ピクセル座標 [x, y]
|
|
140
|
+
* @returns メルカトル座標、または範囲外の場合は false
|
|
141
|
+
*/
|
|
142
|
+
xy2Merc(xy: number[]): number[] | false;
|
|
143
|
+
/**
|
|
144
|
+
* メルカトル座標 → ピクセル座標(最適レイヤー選択)
|
|
145
|
+
*
|
|
146
|
+
* @param merc - メルカトル座標 [x, y]
|
|
147
|
+
* @returns ピクセル座標、または範囲外の場合は false
|
|
148
|
+
*/
|
|
149
|
+
merc2Xy(merc: number[]): number[] | false;
|
|
150
|
+
/**
|
|
151
|
+
* ピクセル座標 → メルカトル座標(レイヤーID付き)
|
|
152
|
+
* histmap_tin.ts xy2MercAsync_returnLayer() の同期版
|
|
153
|
+
*
|
|
154
|
+
* @param xy - ピクセル座標 [x, y]
|
|
155
|
+
* @returns [レイヤーインデックス, メルカトル座標] または false
|
|
156
|
+
*/
|
|
157
|
+
xy2MercWithLayer(xy: number[]): [number, number[]] | false;
|
|
158
|
+
/**
|
|
159
|
+
* メルカトル座標 → ピクセル座標(複数レイヤー結果)
|
|
160
|
+
* histmap_tin.ts merc2XyAsync_returnLayer() の同期版
|
|
161
|
+
*
|
|
162
|
+
* 現在は MaplatCore の仕様に合わせ、最大2レイヤーまで返す。
|
|
163
|
+
* 3レイヤー以上返したい場合は、下記の .slice(0, 2) および .filter(i < 2) の
|
|
164
|
+
* 上限値を増やすか、引数で上限を指定できるようにすること。
|
|
165
|
+
*
|
|
166
|
+
* @param merc - メルカトル座標 [x, y]
|
|
167
|
+
* @returns 最大2要素の配列。各要素は [レイヤーインデックス, ピクセル座標] または undefined
|
|
168
|
+
*/
|
|
169
|
+
merc2XyWithLayer(merc: number[]): ([number, number[]] | undefined)[];
|
|
170
|
+
/**
|
|
171
|
+
* メルカトル5点 → システム座標(複数レイヤー)
|
|
172
|
+
* histmap_tin.ts mercs2SysCoordsAsync_multiLayer() の同期版
|
|
173
|
+
*
|
|
174
|
+
* @param mercs - 5点のメルカトル座標配列(中心+上下左右)
|
|
175
|
+
* @returns 各レイヤーのシステム座標配列(または undefined)
|
|
176
|
+
*/
|
|
177
|
+
mercs2SysCoords(mercs: number[][]): (number[][] | undefined)[];
|
|
178
|
+
/**
|
|
179
|
+
* ビューポート → TIN 適用後メルカトル5点
|
|
180
|
+
* histmap_tin.ts viewpoint2MercsAsync() の同期版
|
|
181
|
+
*
|
|
182
|
+
* @param viewpoint - ビューポート(center, zoom, rotation)
|
|
183
|
+
* @param size - 画面サイズ [width, height]
|
|
184
|
+
* @returns TIN 変換後のメルカトル5点
|
|
185
|
+
*/
|
|
186
|
+
viewpoint2Mercs(viewpoint: Viewpoint, size: [number, number]): number[][];
|
|
187
|
+
/**
|
|
188
|
+
* TIN 適用後メルカトル5点 → ビューポート
|
|
189
|
+
* histmap_tin.ts mercs2ViewpointAsync() の同期版
|
|
190
|
+
*
|
|
191
|
+
* @param mercs - TIN 変換後のメルカトル5点
|
|
192
|
+
* @param size - 画面サイズ [width, height]
|
|
193
|
+
* @returns ビューポート(center, zoom, rotation)
|
|
194
|
+
*/
|
|
195
|
+
mercs2Viewpoint(mercs: number[][], size: [number, number]): Viewpoint;
|
|
196
|
+
/** zoom2Radius の静的ラッパー */
|
|
197
|
+
static zoom2Radius(size: [number, number], zoom: number): number;
|
|
198
|
+
/** mercViewpoint2Mercs の静的ラッパー */
|
|
199
|
+
static mercViewpoint2Mercs(center: number[], zoom: number, rotation: number, size: [number, number]): number[][];
|
|
200
|
+
/** mercs2MercViewpoint の静的ラッパー */
|
|
201
|
+
static mercs2MercViewpoint(mercs: number[][], size: [number, number]): Viewpoint;
|
|
202
|
+
/** xy2SysCoord の静的ラッパー */
|
|
203
|
+
static xy2SysCoord(xy: number[], maxxy: number): number[];
|
|
204
|
+
/** sysCoord2Xy の静的ラッパー */
|
|
205
|
+
static sysCoord2Xy(sysCoord: number[], maxxy: number): number[];
|
|
206
|
+
private _assertMapData;
|
|
207
|
+
private _assertMaxxy;
|
|
208
|
+
/**
|
|
209
|
+
* レイヤーインデックスに対応する Transform インスタンスを返す(三角網描画などの用途)
|
|
210
|
+
*
|
|
211
|
+
* @param idx - 0 = メイン TIN、1以上 = sub_maps[idx-1]
|
|
212
|
+
* @returns 対応する Transform、または範囲外の場合は null
|
|
213
|
+
*/
|
|
214
|
+
getLayerTransform(idx: number): Transform | null;
|
|
215
|
+
/** レイヤー数を返す(メイン + sub 数) */
|
|
216
|
+
get layerCount(): number;
|
|
217
|
+
/**
|
|
218
|
+
* viewpoint 変換に使用する最大ピクセル幅(2^maxZoom × 256)
|
|
219
|
+
* stateToViewpoint / viewpointToState で zoom ↔ scale 変換に使用する
|
|
220
|
+
* zoom = log2(scale × maxxy / 256) の関係
|
|
221
|
+
*/
|
|
222
|
+
get maxxy(): number;
|
|
223
|
+
/** priority 降順でソートした [index, tin, isMain] の配列を返す */
|
|
224
|
+
private _getTinsSortedByPriority;
|
|
225
|
+
/** メイン TIN + 全 sub TIN を index 付きで返す */
|
|
226
|
+
private _getAllTinsWithIndex;
|
|
227
|
+
/**
|
|
228
|
+
* 指定レイヤーインデックスで TIN 変換を実行する
|
|
229
|
+
* index 0 → mainTin, index 1..n → subTins[index-1]
|
|
230
|
+
*/
|
|
231
|
+
private _transformByIndex;
|
|
232
|
+
/** 内部用 xy2SysCoord(_maxxy を使用) */
|
|
233
|
+
private xy2SysCoordInternal;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export declare const MERC_CROSSMATRIX: number[][];
|
|
237
|
+
|
|
238
|
+
export declare const MERC_MAX = 20037508.342789244;
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* メルカトル5地点情報からメルカトル地図でのサイズ情報(中心座標、ズーム、回転)を得る
|
|
242
|
+
*
|
|
243
|
+
* @param mercs - 中心+上下左右の5点のメルカトル座標配列
|
|
244
|
+
* @param size - 画面サイズ [width, height]
|
|
245
|
+
* @returns Viewpoint オブジェクト(center, zoom, rotation)
|
|
246
|
+
*/
|
|
247
|
+
export declare function mercs2MercViewpoint(mercs: number[][], size: [number, number]): Viewpoint;
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* 画面サイズと地図ズームから、メルカトル座標上での5座標を取得する
|
|
251
|
+
*
|
|
252
|
+
* @param center - 中心のメルカトル座標 [x, y]
|
|
253
|
+
* @param zoom - メルカトルズームレベル
|
|
254
|
+
* @param rotation - 回転角(ラジアン)
|
|
255
|
+
* @param size - 画面サイズ [width, height]
|
|
256
|
+
* @returns 中心+上下左右の5点のメルカトル座標配列
|
|
257
|
+
*/
|
|
258
|
+
export declare function mercViewpoint2Mercs(center: number[], zoom: number, rotation: number, size: [number, number]): number[][];
|
|
259
|
+
|
|
105
260
|
/**
|
|
106
261
|
* エッジセットを正規化する
|
|
107
262
|
* 古いバージョンのフォーマットを新しいフォーマットに変換する
|
|
@@ -128,6 +283,15 @@ declare type PropertyTri = {
|
|
|
128
283
|
|
|
129
284
|
export declare type PropertyTriKey = "a" | "b" | "c";
|
|
130
285
|
|
|
286
|
+
/**
|
|
287
|
+
* 与えられた差分行列を回転する
|
|
288
|
+
*
|
|
289
|
+
* @param xys - 回転する座標の配列
|
|
290
|
+
* @param theta - 回転角(ラジアン)
|
|
291
|
+
* @returns 回転後の座標の配列
|
|
292
|
+
*/
|
|
293
|
+
export declare function rotateMatrix(xys: number[][], theta: number): number[][];
|
|
294
|
+
|
|
131
295
|
/**
|
|
132
296
|
* 三角形の頂点の順序を修正する
|
|
133
297
|
* 地図外郭の頂点を含む三角形について、頂点の順序を統一する
|
|
@@ -146,6 +310,29 @@ export declare type StrictMode = "strict" | "auto" | "loose";
|
|
|
146
310
|
*/
|
|
147
311
|
export declare type StrictStatus = "strict" | "strict_error" | "loose";
|
|
148
312
|
|
|
313
|
+
/**
|
|
314
|
+
* Sub-map TIN data for MapTransform.setMapData().
|
|
315
|
+
*/
|
|
316
|
+
export declare interface SubMapData {
|
|
317
|
+
/** Compiled TIN data */
|
|
318
|
+
compiled: Compiled;
|
|
319
|
+
/** Layer priority (higher = checked first) */
|
|
320
|
+
priority: number;
|
|
321
|
+
/** Layer importance (used when multiple layers overlap) */
|
|
322
|
+
importance: number;
|
|
323
|
+
/** Bounds vertices in pixel (XY) space. Falls back to compiled.bounds if omitted. */
|
|
324
|
+
bounds?: number[][];
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* システム座標(EPSG:3857相当)をピクセル座標に変換する
|
|
329
|
+
*
|
|
330
|
+
* @param sysCoord - システム座標 [x, y]
|
|
331
|
+
* @param maxxy - 最大座標値(2^maxZoom * 256)
|
|
332
|
+
* @returns ピクセル座標 [x, y]
|
|
333
|
+
*/
|
|
334
|
+
export declare function sysCoord2Xy(sysCoord: number[], maxxy: number): number[];
|
|
335
|
+
|
|
149
336
|
export declare type Tins = FeatureCollection<Polygon, PropertiesTri>;
|
|
150
337
|
|
|
151
338
|
export declare type TinsBD = {
|
|
@@ -273,6 +460,18 @@ export declare type VerticesParamsBD = {
|
|
|
273
460
|
[key in BiDirectionKey]?: VerticesParams;
|
|
274
461
|
};
|
|
275
462
|
|
|
463
|
+
/**
|
|
464
|
+
* Viewport representation: center in mercator, zoom level, rotation in radians.
|
|
465
|
+
*/
|
|
466
|
+
export declare interface Viewpoint {
|
|
467
|
+
/** Mercator coordinate [x, y] */
|
|
468
|
+
center: number[];
|
|
469
|
+
/** Mercator zoom level */
|
|
470
|
+
zoom: number;
|
|
471
|
+
/** Rotation angle in radians */
|
|
472
|
+
rotation: number;
|
|
473
|
+
}
|
|
474
|
+
|
|
276
475
|
declare type WeightBuffer = {
|
|
277
476
|
[index: string]: number;
|
|
278
477
|
};
|
|
@@ -284,9 +483,27 @@ export declare type WeightBufferBD = {
|
|
|
284
483
|
[key in BiDirectionKey]?: WeightBuffer;
|
|
285
484
|
};
|
|
286
485
|
|
|
486
|
+
/**
|
|
487
|
+
* ピクセル座標をシステム座標(EPSG:3857相当)に変換する
|
|
488
|
+
*
|
|
489
|
+
* @param xy - ピクセル座標 [x, y]
|
|
490
|
+
* @param maxxy - 最大座標値(2^maxZoom * 256)
|
|
491
|
+
* @returns システム座標 [x, y]
|
|
492
|
+
*/
|
|
493
|
+
export declare function xy2SysCoord(xy: number[], maxxy: number): number[];
|
|
494
|
+
|
|
287
495
|
/**
|
|
288
496
|
* Y-axis handling directive.
|
|
289
497
|
*/
|
|
290
498
|
export declare type YaxisMode = "follow" | "invert";
|
|
291
499
|
|
|
500
|
+
/**
|
|
501
|
+
* size(画面サイズ)とズームから、地図面座標上での半径を得る
|
|
502
|
+
*
|
|
503
|
+
* @param size - 画面サイズ [width, height]
|
|
504
|
+
* @param zoom - メルカトルズームレベル
|
|
505
|
+
* @returns メルカトル座標上での半径
|
|
506
|
+
*/
|
|
507
|
+
export declare function zoom2Radius(size: [number, number], zoom: number): number;
|
|
508
|
+
|
|
292
509
|
export { }
|