@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/README.ja.md
CHANGED
|
@@ -1,171 +1,341 @@
|
|
|
1
|
-
# Maplat Transform
|
|
2
|
-
|
|
3
|
-
[](https://github.com/code4history/MaplatTransform/actions/workflows/test.yml)
|
|
4
|
-
|
|
5
|
-
Maplatで生成された座標変換定義を使用して、2つの平面座標系間で座標変換を実現するJavaScriptライブラリです。
|
|
6
|
-
[Maplat](https://github.com/code4history/Maplat/)プロジェクトの一部として開発されています。
|
|
7
|
-
|
|
8
|
-
English README is [here](./README.md).
|
|
9
|
-
|
|
10
|
-
## 主な機能
|
|
11
|
-
|
|
12
|
-
- **座標変換定義のインポート:** Maplatで生成された座標変換定義をインポートし、変換のための内部構造を構築
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
transform
|
|
51
|
-
|
|
52
|
-
//
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
1
|
+
# Maplat Transform
|
|
2
|
+
|
|
3
|
+
[](https://github.com/code4history/MaplatTransform/actions/workflows/test.yml)
|
|
4
|
+
|
|
5
|
+
Maplatで生成された座標変換定義を使用して、2つの平面座標系間で座標変換を実現するJavaScriptライブラリです。
|
|
6
|
+
[Maplat](https://github.com/code4history/Maplat/)プロジェクトの一部として開発されています。
|
|
7
|
+
|
|
8
|
+
English README is [here](./README.md).
|
|
9
|
+
|
|
10
|
+
## 主な機能
|
|
11
|
+
|
|
12
|
+
- **座標変換定義のインポート:** Maplatで生成された座標変換定義をインポートし、変換のための内部構造を構築
|
|
13
|
+
- **V2/V3フォーマット対応:** レガシーV2フォーマット(固定4境界頂点)と新しいV3フォーマット(N境界頂点、より高精度)の両方に対応
|
|
14
|
+
- **双方向座標変換:** 2つの平面間で双方向の座標変換が可能
|
|
15
|
+
- **位相保存:** 変換時の同相性(トポロジー)を維持
|
|
16
|
+
- **複数の座標系サポート:** 通常の直交座標系、Y軸反転座標系、鳥瞰図のような歪んだ座標系など、様々な座標系間の変換に対応
|
|
17
|
+
- **状態管理:** 変換状態の保存と復元をサポート
|
|
18
|
+
- **サブマップ選択(処理2):** 同一画像上に複数のTIN領域(`sub_maps`)が存在する地図で、領域判定・優先度・重要度に基づいて適用するTINを自動選択し座標変換する
|
|
19
|
+
- **ビューポート変換(処理3):** ピクセル座標系上の表示ビューポート(中心位置・ズームレベル・回転角)を地図座標系(EPSG:3857)上のビューポートに相互変換する
|
|
20
|
+
- **地図間ビューポート同期(処理4):** ある絵地図の表示ビューポートを、共通の地図座標系(EPSG:3857)を中継して別の絵地図の表示ビューポートに直接変換する
|
|
21
|
+
|
|
22
|
+
## 動作要件
|
|
23
|
+
|
|
24
|
+
- **Node.js:** >= 20
|
|
25
|
+
- **pnpm:** >= 9(開発時)
|
|
26
|
+
|
|
27
|
+
## インストール方法
|
|
28
|
+
|
|
29
|
+
### pnpm(推奨)
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
pnpm add @maplat/transform
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### npm
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
npm install @maplat/transform
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### ブラウザ
|
|
42
|
+
|
|
43
|
+
```html
|
|
44
|
+
<script src="https://unpkg.com/@maplat/transform/dist/maplat_transform.umd.js"></script>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 基本的な使用方法
|
|
48
|
+
|
|
49
|
+
```javascript
|
|
50
|
+
import { Transform } from '@maplat/transform';
|
|
51
|
+
|
|
52
|
+
// 変換定義データのインポート
|
|
53
|
+
const transform = new Transform();
|
|
54
|
+
transform.setCompiled(compiledData); // Maplatで生成された変換定義を適用
|
|
55
|
+
|
|
56
|
+
// 順方向の変換(ソース座標系 → ターゲット座標系)
|
|
57
|
+
const transformed = transform.transform([100, 100], false);
|
|
58
|
+
|
|
59
|
+
// 逆方向の変換(ターゲット座標系 → ソース座標系)
|
|
60
|
+
const restored = transform.transform(transformed, true);
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### エラーハンドリング
|
|
64
|
+
|
|
65
|
+
このライブラリは以下の場合にエラーをスローする可能性があります:
|
|
66
|
+
|
|
67
|
+
- 厳密モードでの変換エラー時
|
|
68
|
+
- 逆変換が許可されていない状態での逆変換実行時
|
|
69
|
+
- 不正なデータ構造での変換実行時
|
|
70
|
+
|
|
71
|
+
エラーが発生した場合は、変換定義データの修正が必要です。変換定義の修正は[@maplat/tin](https://github.com/code4history/MaplatTin/)を使用したエディタツールで行ってください。
|
|
72
|
+
|
|
73
|
+
## MapTransform の使用方法
|
|
74
|
+
|
|
75
|
+
### 処理2 — サブマップ選択つき座標変換
|
|
76
|
+
|
|
77
|
+
1枚の地図画像上に複数のTIN定義(`sub_maps`)が重なって存在する場合、`MapTransform` を使うと適切なTINを自動選択して座標変換できます。
|
|
78
|
+
|
|
79
|
+
```javascript
|
|
80
|
+
import { MapTransform } from '@maplat/transform';
|
|
81
|
+
|
|
82
|
+
const mt = new MapTransform();
|
|
83
|
+
mt.setMapData({
|
|
84
|
+
compiled: mainCompiledData, // メインTINのコンパイル済みデータ
|
|
85
|
+
sub_maps: [
|
|
86
|
+
{ compiled: sub0Data, priority: 1, importance: 1 },
|
|
87
|
+
{ compiled: sub1Data, priority: 2, importance: 2 },
|
|
88
|
+
],
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// 順方向: ピクセルXY → EPSG:3857([レイヤーインデックス, Merc座標] または false を返す)
|
|
92
|
+
const result = mt.xy2MercWithLayer([320, 240]);
|
|
93
|
+
if (result) {
|
|
94
|
+
const [layerIndex, merc] = result;
|
|
95
|
+
console.log('レイヤー:', layerIndex, 'Merc座標:', merc);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// 逆方向: EPSG:3857 → ピクセルXY(重要度順に最大2レイヤー返す)
|
|
99
|
+
const results = mt.merc2XyWithLayer([15000000, 4000000]);
|
|
100
|
+
results.forEach((r, i) => {
|
|
101
|
+
if (r) console.log(`結果${i}: レイヤー${r[0]}, XY座標`, r[1]);
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 処理3 — ビューポート変換
|
|
106
|
+
|
|
107
|
+
ピクセル地図の表示ビューポート(中心位置・ズームレベル・回転角)を、EPSG:3857空間上の5点(中心+東西南北)として相互変換します。
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
import { MapTransform } from '@maplat/transform';
|
|
111
|
+
|
|
112
|
+
const mt = new MapTransform();
|
|
113
|
+
mt.setMapData({ compiled: compiledData });
|
|
114
|
+
|
|
115
|
+
const canvasSize = [800, 600]; // キャンバスサイズ [幅, 高さ]
|
|
116
|
+
|
|
117
|
+
// ピクセルビューポート → EPSG:3857 5点
|
|
118
|
+
const viewpoint = {
|
|
119
|
+
center: [15000000, 4000000], // ピクセル空間の中心に対応するEPSG:3857相当座標
|
|
120
|
+
zoom: 14,
|
|
121
|
+
rotation: 0,
|
|
122
|
+
};
|
|
123
|
+
const mercs = mt.viewpoint2Mercs(viewpoint, canvasSize);
|
|
124
|
+
// mercs: [[中心], [北], [東], [南], [西]] (EPSG:3857)
|
|
125
|
+
|
|
126
|
+
// EPSG:3857 5点 → ピクセルビューポート
|
|
127
|
+
const vp = mt.mercs2Viewpoint(mercs, canvasSize);
|
|
128
|
+
console.log(vp.center, vp.zoom, vp.rotation);
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 処理4 — 地図間ビューポート同期
|
|
132
|
+
|
|
133
|
+
ある絵地図の表示ビューポートをEPSG:3857空間を中継して別の絵地図のビューポートへ直接変換します。
|
|
134
|
+
|
|
135
|
+
```javascript
|
|
136
|
+
import { MapTransform } from '@maplat/transform';
|
|
137
|
+
|
|
138
|
+
const mtA = new MapTransform();
|
|
139
|
+
mtA.setMapData({ compiled: compiledDataA });
|
|
140
|
+
|
|
141
|
+
const mtB = new MapTransform();
|
|
142
|
+
mtB.setMapData({ compiled: compiledDataB });
|
|
143
|
+
|
|
144
|
+
const canvasSize = [800, 600];
|
|
145
|
+
|
|
146
|
+
// 地図Aのビューポート(ピクセル空間A)
|
|
147
|
+
const vpA = { center: [15000000, 4000000], zoom: 14, rotation: 0 };
|
|
148
|
+
|
|
149
|
+
// ピクセル空間A → EPSG:3857 5点(処理3の順変換)
|
|
150
|
+
const mercs = mtA.viewpoint2Mercs(vpA, canvasSize);
|
|
151
|
+
|
|
152
|
+
// EPSG:3857 5点 → 地図Bのビューポート(処理3の逆変換)
|
|
153
|
+
const vpB = mtB.mercs2Viewpoint(mercs, canvasSize);
|
|
154
|
+
console.log('地図Bのビューポート:', vpB);
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## API リファレンス
|
|
158
|
+
|
|
159
|
+
### Transform クラス
|
|
160
|
+
|
|
161
|
+
座標変換を行うメインクラスです。
|
|
162
|
+
|
|
163
|
+
#### コンストラクタ
|
|
164
|
+
|
|
165
|
+
```javascript
|
|
166
|
+
const transform = new Transform();
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
#### メソッド
|
|
170
|
+
|
|
171
|
+
##### `setCompiled(compiled: Compiled | CompiledLegacy): void`
|
|
172
|
+
|
|
173
|
+
Maplatで生成されたコンパイル済み変換定義をインポートして適用します。レガシー形式、V2(4境界頂点)、V3(N境界頂点)を自動的に判別して処理します。
|
|
174
|
+
|
|
175
|
+
- **パラメータ:**
|
|
176
|
+
- `compiled`: コンパイル済み変換定義オブジェクト(V2、V3、またはレガシー形式)
|
|
177
|
+
|
|
178
|
+
##### `transform(apoint: number[], backward?: boolean, ignoreBounds?: boolean): number[] | false`
|
|
179
|
+
|
|
180
|
+
座標変換を実行します。
|
|
181
|
+
|
|
182
|
+
- **パラメータ:**
|
|
183
|
+
- `apoint`: 変換する座標 `[x, y]`
|
|
184
|
+
- `backward`: 逆方向の変換を行うか(デフォルト: `false`)
|
|
185
|
+
- `ignoreBounds`: 境界チェックを無視するか(デフォルト: `false`)
|
|
186
|
+
- **戻り値:** 変換後の座標、または境界外の場合は `false`
|
|
187
|
+
- **例外:** `strict_status == "strict_error"` の状態で逆変換を試みた場合にエラーをスロー
|
|
188
|
+
|
|
189
|
+
#### 静的定数
|
|
190
|
+
|
|
191
|
+
**頂点モード:**
|
|
192
|
+
- `Transform.VERTEX_PLAIN`: 標準平面座標系
|
|
193
|
+
- `Transform.VERTEX_BIRDEYE`: 鳥瞰図座標系
|
|
194
|
+
|
|
195
|
+
**厳密モード:**
|
|
196
|
+
- `Transform.MODE_STRICT`: 厳密な変換モード
|
|
197
|
+
- `Transform.MODE_AUTO`: 自動モード選択
|
|
198
|
+
- `Transform.MODE_LOOSE`: 緩い変換モード
|
|
199
|
+
|
|
200
|
+
**厳密ステータス:**
|
|
201
|
+
- `Transform.STATUS_STRICT`: 厳密ステータス
|
|
202
|
+
- `Transform.STATUS_ERROR`: エラーステータス(逆変換不可)
|
|
203
|
+
- `Transform.STATUS_LOOSE`: 緩いステータス
|
|
204
|
+
|
|
205
|
+
**Y軸モード:**
|
|
206
|
+
- `Transform.YAXIS_FOLLOW`: Y軸方向に従う
|
|
207
|
+
- `Transform.YAXIS_INVERT`: Y軸方向を反転
|
|
208
|
+
|
|
209
|
+
### MapTransform クラス
|
|
210
|
+
|
|
211
|
+
サブマップ選択、ビューポート変換、地図間ビューポート同期(処理2〜4)を担うクラスです。
|
|
212
|
+
|
|
213
|
+
#### コンストラクタ
|
|
214
|
+
|
|
215
|
+
```javascript
|
|
216
|
+
const mt = new MapTransform();
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
#### メソッド
|
|
220
|
+
|
|
221
|
+
##### `setMapData(mapData: MapData): void`
|
|
222
|
+
|
|
223
|
+
メインTINとオプションのサブマップTINをロードします。
|
|
224
|
+
|
|
225
|
+
- **パラメータ:**
|
|
226
|
+
- `mapData`: `{ compiled, maxZoom?, sub_maps? }` — メインのコンパイル済みTINデータ、オプションの明示的なmaxZoom、オプションのサブマップ定義配列
|
|
227
|
+
|
|
228
|
+
##### `xy2Merc(xy: number[]): number[] | false`
|
|
229
|
+
|
|
230
|
+
メインTINを使ってピクセル座標をEPSG:3857に変換します。
|
|
231
|
+
|
|
232
|
+
- **パラメータ:** `xy` — ピクセル座標 `[x, y]`
|
|
233
|
+
- **戻り値:** EPSG:3857座標、または範囲外の場合は `false`
|
|
234
|
+
|
|
235
|
+
##### `merc2Xy(merc: number[]): number[] | false`
|
|
236
|
+
|
|
237
|
+
メインTINを使ってEPSG:3857座標をピクセル座標に逆変換します。
|
|
238
|
+
|
|
239
|
+
- **パラメータ:** `merc` — EPSG:3857座標 `[x, y]`
|
|
240
|
+
- **戻り値:** ピクセル座標、または範囲外の場合は `false`
|
|
241
|
+
|
|
242
|
+
##### `xy2MercWithLayer(xy: number[]): [number, number[]] | false`
|
|
243
|
+
|
|
244
|
+
優先度と領域に基づいてサブマップから適切なTINを自動選択し、ピクセル座標をEPSG:3857に変換します(処理2)。
|
|
245
|
+
|
|
246
|
+
- **パラメータ:** `xy` — ピクセル座標 `[x, y]`
|
|
247
|
+
- **戻り値:** `[レイヤーインデックス, Merc座標]`、または範囲外の場合は `false`
|
|
248
|
+
|
|
249
|
+
##### `merc2XyWithLayer(merc: number[]): ([number, number[]] | undefined)[]`
|
|
250
|
+
|
|
251
|
+
該当する全TINレイヤーでEPSG:3857座標をピクセル座標に逆変換し、重要度順に最大2件を返します(処理2)。
|
|
252
|
+
> 3件以上返したい場合は、実装内の `.slice(0, 2)` / `.filter(i < 2)` の上限値を変更してください。
|
|
253
|
+
|
|
254
|
+
- **パラメータ:** `merc` — EPSG:3857座標 `[x, y]`
|
|
255
|
+
- **戻り値:** 最大2要素の配列。各要素は `[レイヤーインデックス, XY座標]` または `undefined`
|
|
256
|
+
|
|
257
|
+
##### `viewpoint2Mercs(viewpoint: Viewpoint, size: [number, number]): number[][]`
|
|
258
|
+
|
|
259
|
+
ピクセル空間のビューポートをEPSG:3857の5点に変換します(処理3)。
|
|
260
|
+
|
|
261
|
+
- **パラメータ:**
|
|
262
|
+
- `viewpoint`: `{ center, zoom, rotation }` — ピクセル空間のビューポート(centerは `xy2SysCoord` 変換後のEPSG:3857相当値)
|
|
263
|
+
- `size`: キャンバスサイズ `[幅, 高さ]`
|
|
264
|
+
- **戻り値:** EPSG:3857の5点配列 `[中心, 北, 東, 南, 西]`
|
|
265
|
+
- **例外:** 中心点がTIN範囲外の場合にエラー
|
|
266
|
+
|
|
267
|
+
##### `mercs2Viewpoint(mercs: number[][], size: [number, number]): Viewpoint`
|
|
268
|
+
|
|
269
|
+
EPSG:3857の5点からピクセル空間のビューポートに逆変換します(処理3の逆変換)。
|
|
270
|
+
|
|
271
|
+
- **パラメータ:**
|
|
272
|
+
- `mercs`: EPSG:3857の5点配列(`viewpoint2Mercs` の戻り値と同形式)
|
|
273
|
+
- `size`: キャンバスサイズ `[幅, 高さ]`
|
|
274
|
+
- **戻り値:** ピクセル空間の `Viewpoint` — `{ center, zoom, rotation }`
|
|
275
|
+
- **例外:** 中心点が逆変換できない場合にエラー
|
|
276
|
+
|
|
277
|
+
#### アクセサ
|
|
278
|
+
|
|
279
|
+
- `maxxy: number` — `2^maxZoom × 256`。ピクセル座標とEPSG:3857座標の変換スケール係数
|
|
280
|
+
|
|
281
|
+
### エクスポートされる型
|
|
282
|
+
|
|
283
|
+
- `PointSet`, `BiDirectionKey`, `WeightBufferBD`, `VertexMode`, `StrictMode`, `StrictStatus`, `YaxisMode`
|
|
284
|
+
- `CentroidBD`, `TinsBD`, `KinksBD`, `VerticesParamsBD`, `IndexedTinsBD`
|
|
285
|
+
- `Compiled`, `CompiledLegacy`
|
|
286
|
+
- `Tins`, `Tri`, `PropertyTriKey`
|
|
287
|
+
- `Edge`, `EdgeSet`, `EdgeSetLegacy`
|
|
288
|
+
- `Viewpoint` — `{ center: number[], zoom: number, rotation: number }`
|
|
289
|
+
- `MapData` — `{ compiled: Compiled, maxZoom?: number, sub_maps?: SubMapData[] }`
|
|
290
|
+
- `SubMapData` — `{ compiled: Compiled, priority: number, importance: number, bounds?: number[][] }`
|
|
291
|
+
|
|
292
|
+
### エクスポートされるユーティリティ関数
|
|
293
|
+
|
|
294
|
+
- `transformArr`: 低レベルの座標変換関数
|
|
295
|
+
- `rotateVerticesTriangle`: 三角形の頂点を回転
|
|
296
|
+
- `counterTri`: カウンター三角形ユーティリティ
|
|
297
|
+
- `normalizeEdges`: エッジ定義の正規化
|
|
298
|
+
|
|
299
|
+
### フォーマットバージョン
|
|
300
|
+
|
|
301
|
+
```javascript
|
|
302
|
+
import { format_version } from '@maplat/transform';
|
|
303
|
+
console.log(format_version); // 現在のフォーマットバージョン
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
コンパイル済みデータのフォーマットには2つのモダンバージョンがあります:
|
|
307
|
+
|
|
308
|
+
- **V2:** マップのバウンディングボックスから算出した固定4点の境界頂点を使用
|
|
309
|
+
- **V3:** N個(4以上)の境界頂点を使用し、特にマップ端付近の変換精度を向上
|
|
310
|
+
|
|
311
|
+
どちらのフォーマットも `setCompiled()` が自動的に判別して処理します。V3フォーマットのコンパイル済みデータはバージョン3以降の[@maplat/tin](https://github.com/code4history/MaplatTin/)で生成されます。
|
|
312
|
+
|
|
313
|
+
## ドキュメント
|
|
314
|
+
|
|
315
|
+
変換処理の内部実装に関する技術的な詳細については、以下を参照してください:
|
|
316
|
+
- [Transform Internals](./docs/transform-internals.ja.md) - Transformクラスの状態復元と座標検索処理に関する実行時メモ
|
|
317
|
+
|
|
318
|
+
## 開発
|
|
319
|
+
|
|
320
|
+
### テストの実行
|
|
321
|
+
|
|
322
|
+
```sh
|
|
323
|
+
pnpm test
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## 注意事項
|
|
327
|
+
|
|
328
|
+
このライブラリは座標変換の実行に特化しており、変換定義自体の生成や編集機能は含まれていません。変換定義の作成や編集が必要な場合は、[@maplat/tin](https://github.com/code4history/MaplatTin/)パッケージをご利用ください。
|
|
329
|
+
|
|
330
|
+
## ライセンス
|
|
331
|
+
|
|
332
|
+
Maplat Limited License 1.1
|
|
333
|
+
|
|
334
|
+
Copyright (c) 2025 Code for History
|
|
335
|
+
|
|
336
|
+
### 開発者
|
|
337
|
+
|
|
338
|
+
- Kohei Otsuka
|
|
339
|
+
- Code for History
|
|
340
|
+
|
|
171
341
|
あなたの貢献をお待ちしていますは大歓迎です。
|