vislite 1.12.0 → 1.12.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.
Files changed (179) hide show
  1. package/AUTHORS.txt +6 -6
  2. package/CHANGELOG +408 -403
  3. package/LICENSE +20 -20
  4. package/README-en.md +245 -245
  5. package/README.md +245 -245
  6. package/bin/formatArgv.js +30 -30
  7. package/bin/help.js +17 -17
  8. package/bin/run +21 -21
  9. package/bin/skills.js +26 -26
  10. package/lib/BarLayout/index.es.js +348 -348
  11. package/lib/Buffer/index.es.js +34 -34
  12. package/lib/Canvas/index.es.js +804 -804
  13. package/lib/Cardinal/index.es.js +89 -89
  14. package/lib/Eoap/index.es.js +32 -32
  15. package/lib/Hermite/index.es.js +34 -34
  16. package/lib/MapCoordinate/index.es.js +199 -199
  17. package/lib/Matrix4/index.es.js +123 -123
  18. package/lib/Mercator/index.es.js +18 -18
  19. package/lib/PieLayout/index.es.js +115 -115
  20. package/lib/RawCanvas/index.es.js +736 -736
  21. package/lib/SVG/index.es.js +626 -626
  22. package/lib/Shader/index.es.js +34 -34
  23. package/lib/Texture/index.es.js +52 -52
  24. package/lib/TreeLayout/index.es.js +301 -301
  25. package/lib/animation/index.es.js +2 -2
  26. package/lib/assemble/index.es.js +19 -19
  27. package/lib/getLoopColors/index.es.js +34 -34
  28. package/lib/getWebGLContext/index.es.js +61 -61
  29. package/lib/index.umd.js +2797 -2797
  30. package/lib/index.umd.min.js +1 -1
  31. package/lib/initOption/index.es.js +5 -5
  32. package/lib/mergeOption/index.es.js +34 -34
  33. package/lib/move/index.es.js +6 -6
  34. package/lib/rotate/index.es.js +6 -6
  35. package/lib/ruler/index.es.js +136 -136
  36. package/lib/scale/index.es.js +5 -5
  37. package/minialipay/ui-canvas/drawImage.js +35 -35
  38. package/minialipay/ui-canvas/index.acss +4 -4
  39. package/minialipay/ui-canvas/index.axml +3 -3
  40. package/minialipay/ui-canvas/index.d.ts +1 -1
  41. package/minialipay/ui-canvas/index.js +100 -100
  42. package/minialipay/ui-canvas/index.json +6 -6
  43. package/miniprogram/ui-canvas/drawImage.js +35 -35
  44. package/miniprogram/ui-canvas/index.js +125 -125
  45. package/miniprogram/ui-canvas/index.json +4 -4
  46. package/miniprogram/ui-canvas/index.wxml +4 -4
  47. package/miniprogram/ui-canvas/index.wxss +5 -5
  48. package/package/BarLayout/index.ts +2 -2
  49. package/package/Buffer/index.ts +2 -2
  50. package/package/Canvas/index.ts +2 -2
  51. package/package/Cardinal/index.ts +2 -2
  52. package/package/Eoap/index.ts +2 -2
  53. package/package/Hermite/index.ts +2 -2
  54. package/package/MapCoordinate/index.ts +2 -2
  55. package/package/Matrix4/index.ts +2 -2
  56. package/package/Mercator/index.ts +2 -2
  57. package/package/PieLayout/index.ts +2 -2
  58. package/package/RawCanvas/index.ts +2 -2
  59. package/package/SVG/index.ts +2 -2
  60. package/package/Shader/index.ts +2 -2
  61. package/package/Texture/index.ts +2 -2
  62. package/package/TreeLayout/index.ts +2 -2
  63. package/package/animation/index.ts +5 -5
  64. package/package/assemble/index.ts +2 -2
  65. package/package/getLoopColors/index.ts +2 -2
  66. package/package/getWebGLContext/index.ts +40 -40
  67. package/package/index.ts +84 -84
  68. package/package/initOption/index.ts +2 -2
  69. package/package/mergeOption/index.ts +2 -2
  70. package/package/move/index.ts +2 -2
  71. package/package/rotate/index.ts +2 -2
  72. package/package/ruler/index.ts +2 -2
  73. package/package/scale/index.ts +2 -2
  74. package/package/throttle/index.ts +2 -2
  75. package/package.json +79 -79
  76. package/skills/vislite-lib/BarLayout.md +117 -117
  77. package/skills/vislite-lib/Canvas.md +183 -183
  78. package/skills/vislite-lib/Interpolation.md +129 -129
  79. package/skills/vislite-lib/Matrix.md +174 -174
  80. package/skills/vislite-lib/PieLayout.md +131 -131
  81. package/skills/vislite-lib/Projections.md +158 -158
  82. package/skills/vislite-lib/SKILL.md +179 -179
  83. package/skills/vislite-lib/SVG.md +137 -137
  84. package/skills/vislite-lib/TreeLayout.md +176 -176
  85. package/skills/vislite-lib/Utilities.md +261 -261
  86. package/skills/vislite-lib/WebGL.md +106 -106
  87. package/skills/vislite-lib/minialipay/ui-canvas.md +95 -95
  88. package/skills/vislite-lib/miniprogram/ui-canvas.md +98 -98
  89. package/skills/vislite-lib/uniapp/ui-canvas.md +113 -113
  90. package/src/Canvas.ts +89 -89
  91. package/src/Eoap.ts +66 -66
  92. package/src/Matrix4/index.ts +84 -84
  93. package/src/Matrix4/move.ts +12 -12
  94. package/src/Matrix4/rotate.ts +15 -15
  95. package/src/Matrix4/scale.ts +11 -11
  96. package/src/Matrix4/transform.ts +64 -64
  97. package/src/Mercator.ts +27 -27
  98. package/src/SVG.ts +86 -86
  99. package/src/common/assemble.ts +30 -30
  100. package/src/common/canvas/arc.ts +51 -51
  101. package/src/common/canvas/config.ts +176 -176
  102. package/src/common/canvas/default.ts +64 -64
  103. package/src/common/canvas/gradient.ts +31 -31
  104. package/src/common/canvas/index.ts +189 -189
  105. package/src/common/canvas/painter.ts +475 -475
  106. package/src/common/canvas/texts.ts +18 -18
  107. package/src/common/map/getBoundary.ts +15 -15
  108. package/src/common/map/tool.ts +29 -29
  109. package/src/common/option.ts +31 -31
  110. package/src/common/setStyle.ts +5 -5
  111. package/src/common/svg/config.ts +213 -213
  112. package/src/common/svg/default.ts +29 -29
  113. package/src/common/svg/gradient.ts +53 -53
  114. package/src/common/svg/index.ts +420 -420
  115. package/src/common/svg/tool.ts +51 -51
  116. package/src/common/tree/index.ts +25 -25
  117. package/src/common/tree/toInnerTree.ts +61 -61
  118. package/src/common/tree/toPlainTree.ts +135 -135
  119. package/src/common/type.ts +26 -26
  120. package/src/common/webgl/buffer.ts +79 -79
  121. package/src/common/webgl/getWebGLContext.ts +45 -45
  122. package/src/common/webgl/shader.ts +75 -75
  123. package/src/common/webgl/texture.ts +98 -98
  124. package/src/coordinate/MapCoordinate.ts +80 -80
  125. package/src/getLoopColors.ts +42 -42
  126. package/src/interpolation/Cardinal.ts +110 -110
  127. package/src/interpolation/Hermite.ts +65 -65
  128. package/src/layout/BarLayout.ts +249 -249
  129. package/src/layout/PieLayout.ts +146 -146
  130. package/src/layout/TreeLayout.ts +200 -200
  131. package/src/move.ts +7 -7
  132. package/src/rotate.ts +7 -7
  133. package/src/ruler.ts +209 -209
  134. package/src/scale.ts +6 -6
  135. package/types/Bar.d.ts +91 -91
  136. package/types/BarConfig.d.ts +4 -4
  137. package/types/BarLayout.d.ts +48 -48
  138. package/types/BarOption.d.ts +31 -31
  139. package/types/Buffer.d.ts +30 -30
  140. package/types/Canvas.d.ts +379 -379
  141. package/types/CanvasConfig.d.ts +61 -61
  142. package/types/CanvasOption.d.ts +13 -13
  143. package/types/CanvasOpts.d.ts +9 -9
  144. package/types/Cardinal.d.ts +20 -20
  145. package/types/Gradient.d.ts +20 -20
  146. package/types/Hermite.d.ts +25 -25
  147. package/types/Map.d.ts +9 -9
  148. package/types/MapConfig.d.ts +27 -27
  149. package/types/MapCoordinate.d.ts +22 -22
  150. package/types/Matrix4.d.ts +79 -79
  151. package/types/Pie.d.ts +73 -73
  152. package/types/PieConfig.d.ts +26 -26
  153. package/types/PieLayout.d.ts +40 -40
  154. package/types/PieOption.d.ts +21 -21
  155. package/types/SVG.d.ts +282 -282
  156. package/types/SVGConfig.d.ts +54 -54
  157. package/types/Shader.d.ts +22 -22
  158. package/types/Texture.d.ts +22 -22
  159. package/types/Tree.d.ts +74 -74
  160. package/types/TreeConfig.d.ts +52 -52
  161. package/types/TreeLayout.d.ts +71 -71
  162. package/types/TreeOption.d.ts +48 -48
  163. package/types/animation.d.ts +26 -26
  164. package/types/assemble.d.ts +14 -14
  165. package/types/getLoopColors.d.ts +13 -13
  166. package/types/getWebGLContext.d.ts +7 -7
  167. package/types/index.d.ts +220 -220
  168. package/types/module.d.ts +110 -110
  169. package/types/move.d.ts +15 -15
  170. package/types/option.d.ts +12 -12
  171. package/types/painterConfig.d.ts +14 -14
  172. package/types/rotate.d.ts +15 -15
  173. package/types/ruler.d.ts +24 -24
  174. package/types/scale.d.ts +15 -15
  175. package/types/throttle.d.ts +6 -6
  176. package/types/ui-canvas.d.ts +4 -4
  177. package/types/uni-canvas.d.ts +3 -3
  178. package/uni-app/drawImage.js +19 -19
  179. package/uni-app/ui-canvas.vue +295 -295
@@ -1,132 +1,132 @@
1
- # PieLayout 饼图布局
2
-
3
- PieLayout 用于绘制饼图/环形图,支持交互和动画。
4
-
5
- ## 引入
6
-
7
- ```js
8
- import { PieLayout } from 'vislite';
9
- ```
10
-
11
- ## 初始化
12
-
13
- ```js
14
- var pieLayout = new PieLayout(config);
15
- ```
16
-
17
- ### config 配置
18
-
19
- ```js
20
- {
21
- // 获取名称
22
- name: function(pieData, initPie) {
23
- return pieData.name;
24
- },
25
-
26
- // 获取值
27
- value: function(pieData, initPie) {
28
- return pieData.value;
29
- }
30
- }
31
- ```
32
-
33
- ## setOption 设置布局行为
34
-
35
- ```js
36
- pieLayout.setOption({
37
- cx: 200, // 圆心x坐标
38
- cy: 200, // 圆心y坐标
39
- radius: [50, 100], // 半径:[内半径, 外半径]
40
- duration: 200 // 动画时长(ms)
41
- });
42
- ```
43
-
44
- ## use 坐标计算
45
-
46
- ```js
47
- var pie = pieLayout.use(initPie, hoverIndex);
48
- ```
49
-
50
- ### 返回值 pie 结构
51
-
52
- ```js
53
- {
54
- count: 数据项数量,
55
- cx: 圆心x,
56
- cy: 圆心y,
57
- radius: [内半径, 外半径],
58
- hoverIndex: 当前悬浮项索引,
59
- node: [
60
- {
61
- value: 数值,
62
- name: 名称,
63
- beginDeg: 开始弧度,
64
- deg: 跨越弧度,
65
- isHover: 是否悬浮,
66
- radius: [当前内半径, 当前外半径],
67
- label: {
68
- line: [[x1,y1], [x2,y2], [x3,y3]], // 标签线
69
- position: [x, y], // 标签位置
70
- align: 'left' | 'right' // 对齐方式
71
- }
72
- }
73
- ]
74
- }
75
- ```
76
-
77
- ## bind 绑定渲染
78
-
79
- ```js
80
- pieLayout.bind(initPie, function(pie) {
81
- // 绘制饼图
82
- for (var i = 0; i < pie.count; i++) {
83
- var node = pie.node[i];
84
- // 绘制扇形...
85
- }
86
- });
87
- ```
88
-
89
- ## 交互方法
90
-
91
- ```js
92
- // 设置悬浮项
93
- pieLayout.setHover(index);
94
-
95
- // 更新布局
96
- pieLayout.doUpdate();
97
-
98
- // 解绑
99
- pieLayout.unbind();
100
- ```
101
-
102
- ## 使用示例
103
-
104
- ```js
105
- var pieLayout = new PieLayout();
106
-
107
- pieLayout.setOption({
108
- cx: 200,
109
- cy: 200,
110
- radius: [30, 100],
111
- duration: 300
112
- });
113
-
114
- var data = [
115
- { name: 'HTML', value: 30 },
116
- { name: 'CSS', value: 20 },
117
- { name: 'JavaScript', value: 50 }
118
- ];
119
-
120
- var pie = pieLayout.use(data);
121
-
122
- // 绘制饼图
123
- for (var i = 0; i < pie.count; i++) {
124
- var node = pie.node[i];
125
- var colors = ['red', 'green', 'blue'];
126
-
127
- painter.config({
128
- fillStyle: colors[i]
129
- }).fillArc(pie.cx, pie.cy, node.radius[0], node.radius[1],
130
- node.beginDeg, node.deg);
131
- }
1
+ # PieLayout 饼图布局
2
+
3
+ PieLayout 用于绘制饼图/环形图,支持交互和动画。
4
+
5
+ ## 引入
6
+
7
+ ```js
8
+ import { PieLayout } from 'vislite';
9
+ ```
10
+
11
+ ## 初始化
12
+
13
+ ```js
14
+ var pieLayout = new PieLayout(config);
15
+ ```
16
+
17
+ ### config 配置
18
+
19
+ ```js
20
+ {
21
+ // 获取名称
22
+ name: function(pieData, initPie) {
23
+ return pieData.name;
24
+ },
25
+
26
+ // 获取值
27
+ value: function(pieData, initPie) {
28
+ return pieData.value;
29
+ }
30
+ }
31
+ ```
32
+
33
+ ## setOption 设置布局行为
34
+
35
+ ```js
36
+ pieLayout.setOption({
37
+ cx: 200, // 圆心x坐标
38
+ cy: 200, // 圆心y坐标
39
+ radius: [50, 100], // 半径:[内半径, 外半径]
40
+ duration: 200 // 动画时长(ms)
41
+ });
42
+ ```
43
+
44
+ ## use 坐标计算
45
+
46
+ ```js
47
+ var pie = pieLayout.use(initPie, hoverIndex);
48
+ ```
49
+
50
+ ### 返回值 pie 结构
51
+
52
+ ```js
53
+ {
54
+ count: 数据项数量,
55
+ cx: 圆心x,
56
+ cy: 圆心y,
57
+ radius: [内半径, 外半径],
58
+ hoverIndex: 当前悬浮项索引,
59
+ node: [
60
+ {
61
+ value: 数值,
62
+ name: 名称,
63
+ beginDeg: 开始弧度,
64
+ deg: 跨越弧度,
65
+ isHover: 是否悬浮,
66
+ radius: [当前内半径, 当前外半径],
67
+ label: {
68
+ line: [[x1,y1], [x2,y2], [x3,y3]], // 标签线
69
+ position: [x, y], // 标签位置
70
+ align: 'left' | 'right' // 对齐方式
71
+ }
72
+ }
73
+ ]
74
+ }
75
+ ```
76
+
77
+ ## bind 绑定渲染
78
+
79
+ ```js
80
+ pieLayout.bind(initPie, function(pie) {
81
+ // 绘制饼图
82
+ for (var i = 0; i < pie.count; i++) {
83
+ var node = pie.node[i];
84
+ // 绘制扇形...
85
+ }
86
+ });
87
+ ```
88
+
89
+ ## 交互方法
90
+
91
+ ```js
92
+ // 设置悬浮项
93
+ pieLayout.setHover(index);
94
+
95
+ // 更新布局
96
+ pieLayout.doUpdate();
97
+
98
+ // 解绑
99
+ pieLayout.unbind();
100
+ ```
101
+
102
+ ## 使用示例
103
+
104
+ ```js
105
+ var pieLayout = new PieLayout();
106
+
107
+ pieLayout.setOption({
108
+ cx: 200,
109
+ cy: 200,
110
+ radius: [30, 100],
111
+ duration: 300
112
+ });
113
+
114
+ var data = [
115
+ { name: 'HTML', value: 30 },
116
+ { name: 'CSS', value: 20 },
117
+ { name: 'JavaScript', value: 50 }
118
+ ];
119
+
120
+ var pie = pieLayout.use(data);
121
+
122
+ // 绘制饼图
123
+ for (var i = 0; i < pie.count; i++) {
124
+ var node = pie.node[i];
125
+ var colors = ['red', 'green', 'blue'];
126
+
127
+ painter.config({
128
+ fillStyle: colors[i]
129
+ }).fillArc(pie.cx, pie.cy, node.radius[0], node.radius[1],
130
+ node.beginDeg, node.deg);
131
+ }
132
132
  ```
@@ -1,159 +1,159 @@
1
- # 坐标投影 API
2
-
3
- VISLite 提供多种地图坐标投影算法,用于地图可视化开发。
4
-
5
- ## Mercator 墨卡托投影
6
-
7
- 墨卡托投影是航海和航空中常用的投影方式。
8
-
9
- ### 引入
10
-
11
- ```js
12
- import { Mercator } from 'vislite';
13
- ```
14
-
15
- ### 初始化
16
-
17
- ```js
18
- var mercator = new Mercator(scale, center);
19
- ```
20
-
21
- ### 参数说明
22
-
23
- - **scale**: 缩放比例,默认7
24
- - **center**: 投影中心经纬度 `[经度, 纬度]`,默认 `[107, 36]`(中国中心附近)
25
-
26
- ### 使用方法
27
-
28
- ```js
29
- var mercator = new Mercator(7, [107, 36]);
30
-
31
- // 将经纬度转换为平面坐标
32
- var [x, y, z] = mercator.use(经度, 纬度);
33
- ```
34
-
35
- ### 使用示例
36
-
37
- ```js
38
- var mercator = new Mercator(7, [116.4, 39.2]); // 北京
39
-
40
- // 北京的经纬度
41
- var [x, y] = mercator.use(116.4, 39.2);
42
- console.log(x, y); // 输出平面坐标
43
- ```
44
-
45
- ---
46
-
47
- ## Eoap 等角斜方位投影
48
-
49
- 等角斜方位投影是一种适合显示以某点为中心区域的投影方式。
50
-
51
- ### 引入
52
-
53
- ```js
54
- import { Eoap } from 'vislite';
55
- ```
56
-
57
- ### 初始化
58
-
59
- ```js
60
- var eoap = new Eoap(scale, center);
61
- ```
62
-
63
- ### 参数说明
64
-
65
- - **scale**: 缩放比例,默认7
66
- - **center**: 投影中心经纬度 `[经度, 纬度]`,默认 `[107, 36]`
67
-
68
- ### 使用方法
69
-
70
- ```js
71
- var eoap = new Eoap(7, [116.4, 39.2]);
72
-
73
- // 将经纬度转换为平面坐标
74
- var [x, y, z] = eoap.use(经度, 纬度);
75
- ```
76
-
77
- ### 特点
78
-
79
- - 以投影中心为原点,周围的区域变形较小
80
- - 适合绘制局部地图(如某个国家或城市)
81
- - 保持了角度的正确性
82
-
83
- ---
84
-
85
- ## MapCoordinate 地图坐标系
86
-
87
- MapCoordinate 用于处理地图坐标转换和边界计算。
88
-
89
- ### 引入
90
-
91
- ```js
92
- import { MapCoordinate } from 'vislite';
93
- ```
94
-
95
- ### 初始化
96
-
97
- ```js
98
- var mapCoord = new MapCoordinate(projection, option);
99
- ```
100
-
101
- ### 参数说明
102
-
103
- - **projection**: 投影对象(Mercator 或 Eoap)
104
- - **option**: 配置项
105
- - `width`, `height`: 画布尺寸
106
- - `x`, `y`: 偏移量
107
-
108
- ### 主要功能
109
-
110
- ```js
111
- // 经纬度转屏幕坐标
112
- mapCoord.lonlatToScreen(lon, lat);
113
-
114
- // 屏幕坐标转经纬度
115
- mapCoord.screenToLonlat(x, y);
116
-
117
- // 获取地图边界
118
- mapCoord.getBoundary();
119
- ```
120
-
121
- ### 使用示例
122
-
123
- ```js
124
- var mercator = new Mercator(7, [107, 36]);
125
- var mapCoord = new MapCoordinate(mercator, {
126
- width: 800,
127
- height: 600
128
- });
129
-
130
- // 绘制地图
131
- geoJson.features.forEach(feature => {
132
- feature.geometry.coordinates.forEach(polygon => {
133
- painter.beginPath();
134
- polygon[0].forEach((point, i) => {
135
- var [x, y] = mapCoord.lonlatToScreen(point[0], point[1]);
136
- if (i === 0) painter.moveTo(x, y);
137
- else painter.lineTo(x, y);
138
- });
139
- painter.closePath().fill();
140
- });
141
- });
142
- ```
143
-
144
- ---
145
-
146
- ## 投影对比
147
-
148
- | 特性 | Mercator | Eoap |
149
- |------|----------|------|
150
- | 适用场景 | 全球航海图 | 局部区域图 |
151
- | 中心点 | 固定赤道 | 可自定义 |
152
- | 变形 | 高纬度变形大 | 中心区域变形小 |
153
- | 角度 | 保持方向 | 保持角度 |
154
-
155
- ## 选择建议
156
-
157
- - **全球地图或航海图**: 使用 Mercator
158
- - **某个国家/城市的局部图**: 使用 Eoap
1
+ # 坐标投影 API
2
+
3
+ VISLite 提供多种地图坐标投影算法,用于地图可视化开发。
4
+
5
+ ## Mercator 墨卡托投影
6
+
7
+ 墨卡托投影是航海和航空中常用的投影方式。
8
+
9
+ ### 引入
10
+
11
+ ```js
12
+ import { Mercator } from 'vislite';
13
+ ```
14
+
15
+ ### 初始化
16
+
17
+ ```js
18
+ var mercator = new Mercator(scale, center);
19
+ ```
20
+
21
+ ### 参数说明
22
+
23
+ - **scale**: 缩放比例,默认7
24
+ - **center**: 投影中心经纬度 `[经度, 纬度]`,默认 `[107, 36]`(中国中心附近)
25
+
26
+ ### 使用方法
27
+
28
+ ```js
29
+ var mercator = new Mercator(7, [107, 36]);
30
+
31
+ // 将经纬度转换为平面坐标
32
+ var [x, y, z] = mercator.use(经度, 纬度);
33
+ ```
34
+
35
+ ### 使用示例
36
+
37
+ ```js
38
+ var mercator = new Mercator(7, [116.4, 39.2]); // 北京
39
+
40
+ // 北京的经纬度
41
+ var [x, y] = mercator.use(116.4, 39.2);
42
+ console.log(x, y); // 输出平面坐标
43
+ ```
44
+
45
+ ---
46
+
47
+ ## Eoap 等角斜方位投影
48
+
49
+ 等角斜方位投影是一种适合显示以某点为中心区域的投影方式。
50
+
51
+ ### 引入
52
+
53
+ ```js
54
+ import { Eoap } from 'vislite';
55
+ ```
56
+
57
+ ### 初始化
58
+
59
+ ```js
60
+ var eoap = new Eoap(scale, center);
61
+ ```
62
+
63
+ ### 参数说明
64
+
65
+ - **scale**: 缩放比例,默认7
66
+ - **center**: 投影中心经纬度 `[经度, 纬度]`,默认 `[107, 36]`
67
+
68
+ ### 使用方法
69
+
70
+ ```js
71
+ var eoap = new Eoap(7, [116.4, 39.2]);
72
+
73
+ // 将经纬度转换为平面坐标
74
+ var [x, y, z] = eoap.use(经度, 纬度);
75
+ ```
76
+
77
+ ### 特点
78
+
79
+ - 以投影中心为原点,周围的区域变形较小
80
+ - 适合绘制局部地图(如某个国家或城市)
81
+ - 保持了角度的正确性
82
+
83
+ ---
84
+
85
+ ## MapCoordinate 地图坐标系
86
+
87
+ MapCoordinate 用于处理地图坐标转换和边界计算。
88
+
89
+ ### 引入
90
+
91
+ ```js
92
+ import { MapCoordinate } from 'vislite';
93
+ ```
94
+
95
+ ### 初始化
96
+
97
+ ```js
98
+ var mapCoord = new MapCoordinate(projection, option);
99
+ ```
100
+
101
+ ### 参数说明
102
+
103
+ - **projection**: 投影对象(Mercator 或 Eoap)
104
+ - **option**: 配置项
105
+ - `width`, `height`: 画布尺寸
106
+ - `x`, `y`: 偏移量
107
+
108
+ ### 主要功能
109
+
110
+ ```js
111
+ // 经纬度转屏幕坐标
112
+ mapCoord.lonlatToScreen(lon, lat);
113
+
114
+ // 屏幕坐标转经纬度
115
+ mapCoord.screenToLonlat(x, y);
116
+
117
+ // 获取地图边界
118
+ mapCoord.getBoundary();
119
+ ```
120
+
121
+ ### 使用示例
122
+
123
+ ```js
124
+ var mercator = new Mercator(7, [107, 36]);
125
+ var mapCoord = new MapCoordinate(mercator, {
126
+ width: 800,
127
+ height: 600
128
+ });
129
+
130
+ // 绘制地图
131
+ geoJson.features.forEach(feature => {
132
+ feature.geometry.coordinates.forEach(polygon => {
133
+ painter.beginPath();
134
+ polygon[0].forEach((point, i) => {
135
+ var [x, y] = mapCoord.lonlatToScreen(point[0], point[1]);
136
+ if (i === 0) painter.moveTo(x, y);
137
+ else painter.lineTo(x, y);
138
+ });
139
+ painter.closePath().fill();
140
+ });
141
+ });
142
+ ```
143
+
144
+ ---
145
+
146
+ ## 投影对比
147
+
148
+ | 特性 | Mercator | Eoap |
149
+ |------|----------|------|
150
+ | 适用场景 | 全球航海图 | 局部区域图 |
151
+ | 中心点 | 固定赤道 | 可自定义 |
152
+ | 变形 | 高纬度变形大 | 中心区域变形小 |
153
+ | 角度 | 保持方向 | 保持角度 |
154
+
155
+ ## 选择建议
156
+
157
+ - **全球地图或航海图**: 使用 Mercator
158
+ - **某个国家/城市的局部图**: 使用 Eoap
159
159
  - **复杂地图交互**: 使用 MapCoordinate 配合投影