@dsh-gis/dsh-opengis-skill 0.1.0 → 0.1.2

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 (37) hide show
  1. package/.editorconfig +19 -0
  2. package/CHANGELOG.md +96 -0
  3. package/LICENSE +21 -21
  4. package/README.md +91 -30
  5. package/THIRD_PARTY_NOTICES.md +37 -10
  6. package/assets/gdal/reference/raster-tools.md +538 -538
  7. package/assets/gdal/reference/vector-tools.md +149 -149
  8. package/assets/gdal-api/reference/raster-api.md +424 -424
  9. package/assets/gdal-api/reference/vector-api.md +724 -724
  10. package/assets/geometry-api-net/reference/geometry-types.md +243 -243
  11. package/assets/geopandas/reference/core-api.md +221 -221
  12. package/assets/geotools/reference/raster-rendering.md +108 -108
  13. package/assets/geotools/reference/vector-io.md +149 -149
  14. package/assets/jts/reference/geometry-operations.md +303 -303
  15. package/assets/mapsui/SKILL.md +283 -283
  16. package/assets/opengis-all/reference/data-stages.md +608 -608
  17. package/assets/opengis-all/reference/workflow-cheatsheets.md +324 -324
  18. package/assets/opengis-utils-for-java/reference/common-tasks.md +384 -384
  19. package/assets/opengis-utils-for-net/reference/code-patterns.md +124 -124
  20. package/assets/opengis-utils-for-net/reference/util-classes.md +291 -291
  21. package/assets/pyqgis/reference/processing-rendering.md +292 -292
  22. package/assets/pyqgis/reference/vector-raster-layers.md +318 -318
  23. package/assets/qgis-process/SKILL.md +414 -414
  24. package/assets/qgis-process/reference/algorithm-cheatsheet.md +194 -194
  25. package/assets/shapely/reference/operations-reference.md +199 -199
  26. package/cordis.patch.yml +6 -3
  27. package/lib/catalog.d.ts +50 -0
  28. package/lib/catalog.js +238 -0
  29. package/lib/index.d.ts +47 -6
  30. package/lib/index.js +32 -44
  31. package/lib/markdown-links.d.ts +11 -0
  32. package/lib/markdown-links.js +103 -0
  33. package/lib/skill-file.js +104 -17
  34. package/locale/en.json +1 -1
  35. package/locale/zh.json +1 -1
  36. package/package.json +11 -5
  37. package/upstream.json +64 -2
@@ -1,283 +1,283 @@
1
- ---
2
- name: mapsui
3
- description: "Use when embedding interactive 2D maps in .NET desktop (WinForms/WPF) or mobile (MAUI) applications — tile layers, vector features, map controls. Mapsui: cross-platform .NET map component library."
4
- tags:
5
- - dotnet
6
- - csharp
7
- - map
8
- - wpf
9
- - maui
10
- - avalonia
11
- - blazor
12
- - skia
13
- - wms
14
- - tiles
15
- ---
16
-
17
- > **项目地址:** <https://github.com/Mapsui/Mapsui>
18
- >
19
- > **官方文档:** <https://mapsui.com/v5/documentation/index.html>
20
- >
21
- > **最新版本:** 5.1.0(截至2026-10,NuGet)
22
- >
23
- > **许可证:** MIT
24
-
25
- ## 概述
26
-
27
- - 跨 UI 框架:WPF / WinUI / MAUI / Avalonia / Uno / Blazor / WinForms
28
- - SkiaSharp 渲染,性能优于 GDI+
29
- - 数据源:OSM / WMS / WMTS / TMS / XYZ / Shapefile / GeoJSON / MBTiles / PostGIS
30
- - 几何基于 NetTopologySuite
31
- - 投影:`ProjNet` / `Mapsui.Projections`
32
- - 内置交互:拖动、缩放、旋转、捏合、命中
33
-
34
- ---
35
-
36
- ## 安装
37
-
38
- ```bash
39
- dotnet add package Mapsui.Wpf # 或 Mapsui.Maui / Mapsui.Avalonia / ...
40
- dotnet add package Mapsui.Tiling
41
- dotnet add package Mapsui.Nts
42
- ```
43
-
44
- ---
45
-
46
- ## WPF 入门
47
-
48
- ```xml
49
- <Window xmlns:mapsui="clr-namespace:Mapsui.UI.Wpf;assembly=Mapsui.UI.Wpf">
50
- <mapsui:MapControl x:Name="MapControl"/>
51
- </Window>
52
- ```
53
-
54
- ```csharp
55
- using Mapsui;
56
- using Mapsui.Tiling;
57
- using Mapsui.Projections;
58
-
59
- var map = new Map();
60
- map.Layers.Add(OpenStreetMap.CreateTileLayer());
61
-
62
- var pt = SphericalMercator.FromLonLat(116.397, 39.908).ToMPoint();
63
- map.Navigator.CenterOnAndZoomTo(pt, map.Navigator.Resolutions[10]);
64
-
65
- MapControl.Map = map;
66
- ```
67
-
68
- ---
69
-
70
- ## 核心概念
71
-
72
- | 类型 | 说明 |
73
- |------|------|
74
- | `Map` | 地图 |
75
- | `Layer` / `MemoryLayer` / `ImageLayer` / `TileLayer` | 图层 |
76
- | `IProvider` | 数据提供者 |
77
- | `IFeature` / `GeometryFeature` | 要素(NTS 几何) |
78
- | `IStyle` / `VectorStyle` / `LabelStyle` / `SymbolStyle` | 样式 |
79
- | `Navigator` | 视图操作 |
80
-
81
- ---
82
-
83
- ## 矢量图层
84
-
85
- ```csharp
86
- using Mapsui.Nts;
87
- using Mapsui.Styles;
88
-
89
- var features = new List<IFeature>();
90
- foreach (var f in geoJsonFeatures)
91
- features.Add(new GeometryFeature(f.Geometry) {
92
- Styles = { new VectorStyle {
93
- Fill = new Brush(Color.Red),
94
- Outline = new Pen(Color.Black, 1)
95
- }}
96
- });
97
-
98
- map.Layers.Add(new MemoryLayer("Roads") { Features = features, Style = null });
99
- ```
100
-
101
- ---
102
-
103
- ## Shapefile
104
-
105
- ```csharp
106
- using Mapsui.Nts.Providers.Shapefile;
107
- var prov = new ShapeFile("china.shp", true);
108
- map.Layers.Add(new Layer("China") { DataSource = prov });
109
- ```
110
-
111
- ---
112
-
113
- ## 瓦片图层
114
-
115
- ```csharp
116
- map.Layers.Add(OpenStreetMap.CreateTileLayer());
117
-
118
- var src = new HttpTileSource(
119
- new GlobalSphericalMercator(0, 18),
120
- "https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
121
- name: "AMap");
122
- map.Layers.Add(new TileLayer(src) { Name = "AMap" });
123
-
124
- // MBTiles
125
- var mb = new MbTilesTileSource(new SQLiteConnectionString("city.mbtiles", false));
126
- map.Layers.Add(new TileLayer(mb));
127
- ```
128
-
129
- ---
130
-
131
- ## WMS
132
-
133
- ```csharp
134
- using Mapsui.Providers.Wms;
135
- var wms = new WmsProvider("https://demo.mapserver.org/cgi-bin/wms?",
136
- new[] { "continents" });
137
- map.Layers.Add(new ImageLayer("WMS") { DataSource = wms });
138
- ```
139
-
140
- ---
141
-
142
- ## 样式
143
-
144
- ```csharp
145
- new SymbolStyle { SymbolScale = 0.7, Fill = new Brush(Color.Red) };
146
-
147
- new LabelStyle {
148
- Text = "{name}",
149
- Font = new Font { Size = 14 },
150
- BackColor = new Brush(Color.WhiteSmoke),
151
- Halo = new Pen(Color.White, 2)
152
- };
153
- ```
154
-
155
- ---
156
-
157
- ## 主题样式
158
-
159
- ```csharp
160
- public class PopulationStyle : IThemeStyle {
161
- public IStyle? GetStyle(IFeature f) {
162
- var pop = (int)f["population"];
163
- return new VectorStyle { Fill = new Brush(pop > 1_000_000 ? Color.Red : Color.Blue) };
164
- }
165
- }
166
- layer.Style = new PopulationStyle();
167
- ```
168
-
169
- ---
170
-
171
- ## 交互
172
-
173
- ```csharp
174
- MapControl.Info += (s, e) => {
175
- if (e.MapInfo?.Feature is GeometryFeature gf)
176
- Debug.WriteLine($"clicked {gf["name"]}");
177
- };
178
- ```
179
-
180
- ---
181
-
182
- ## 性能优化
183
-
184
- 1. 海量点 → `RasterizingTileLayer` 包一层(按瓦片预渲染)
185
- 2. 优先 `MemoryLayer` + 缓存 Feature
186
- 3. 异步加载 + `await Layer.WaitForFinishedRefresh()`
187
- 4. 共享 Brush/Pen/Style 实例
188
- 5. SkiaSharp 关闭抗锯齿对极小符号有性能提升
189
-
190
- ---
191
-
192
- ## 常见问题
193
-
194
- | 问题 | 解决 |
195
- |------|------|
196
- | WPF 无图 | NuGet 缺 `Mapsui.Wpf` 或没设置 `MapControl.Map` |
197
- | 找不到 `Mapsui.UI.Wpf` 包 | NuGet 包名为 `Mapsui.Wpf`(v3 起启用该名称;程序集仍为 `Mapsui.UI.Wpf.dll`) |
198
- | 投影错误 | `SphericalMercator.FromLonLat` 转换 |
199
- | MAUI 空白 | `MauiProgram` 中 `UseSkiaSharp()` + `UseMapsui()` |
200
- | Shapefile 中文乱码 | 指定 Encoding |
201
- | `GeometryFeature` / 瓦片类型找不到 | 矢量要素需安装 `Mapsui.Nts`,瓦片图层需安装 `Mapsui.Tiling` |
202
-
203
- ---
204
-
205
- ## 典型工作流
206
-
207
- ### 工作流 1:加载底图 + GeoJSON 矢量数据
208
-
209
- ```csharp
210
- using Mapsui;
211
- using Mapsui.Tiling;
212
- using Mapsui.Nts;
213
- using Mapsui.Styles;
214
- using NetTopologySuite.IO;
215
-
216
- var map = new Map();
217
-
218
- // 1. 添加 OSM 底图
219
- map.Layers.Add(OpenStreetMap.CreateTileLayer());
220
-
221
- // 2. 读取 GeoJSON 并添加为矢量图层
222
- var gjReader = new GeoJsonReader();
223
- var features = new List<IFeature>();
224
- foreach (var f in geojsonFeatures)
225
- {
226
- features.Add(new GeometryFeature(f.Geometry)
227
- {
228
- Styles = { new VectorStyle { Fill = new Brush(Color.Red) } }
229
- });
230
- }
231
- map.Layers.Add(new MemoryLayer("Data") { Features = features });
232
-
233
- // 3. 定位
234
- var center = SphericalMercator.FromLonLat(116.4, 39.9).ToMPoint();
235
- map.Navigator.CenterOnAndZoomTo(center, map.Navigator.Resolutions[10]);
236
-
237
- MapControl.Map = map;
238
- ```
239
-
240
- ### 工作流 2:Shapefile + WMS 叠加
241
-
242
- ```csharp
243
- // Shapefile 图层
244
- var shpProvider = new ShapeFile("china.shp", true);
245
- map.Layers.Add(new Layer("China") { DataSource = shpProvider });
246
-
247
- // WMS 图层(叠加)
248
- var wmsProvider = new WmsProvider("https://geo.example.com/wms?", new[] { "rivers" });
249
- map.Layers.Add(new ImageLayer("Rivers") { DataSource = wmsProvider });
250
-
251
- map.ZoomToExtents();
252
- ```
253
-
254
- ## AI 使用建议
255
-
256
- ### 推荐工作流
257
-
258
- 1. **选择 UI 框架**:Mapsui 支持 WPF/WinUI/MAUI/Avalonia/Uno/Blazor/WinForms,根据需要选择对应的 NuGet 包
259
- 2. **创建 Map**:实例化 `Map`,添加图层(`TileLayer` 作为底图 + `MemoryLayer` 作为矢量覆盖层)
260
- 3. **数据转换**:通过 `SphericalMercator.FromLonLat()` 将经纬度转为 Web Mercator 坐标
261
- 4. **绑定控件**:将 `MapControl.Map` 设置为创建的 Map 对象
262
- 5. **添加交互**:通过 `MapControl.Info` 事件处理点击拾取,`Navigator` 控制视图
263
-
264
- ### 关键注意事项
265
-
266
- - **NuGet 包完整**:确保安装了 `Mapsui.<UI框架>`、`Mapsui.Tiling`、`Mapsui.Nts` 三个包
267
- - **投影转换**:WGS84 经纬度必须通过 `SphericalMercator.FromLonLat()` 转换后才能用于 Mapsui 定位
268
- - **Shapefile 编码**:中文 Shapefile 需指定 `Encoding`(如 `Encoding.UTF8` 或 `Encoding.GetEncoding("GBK")`)
269
- - **样式共享**:共享 `Brush`/`Pen`/`VectorStyle` 实例可提升性能
270
- - **海量点优化**:使用 `RasterizingTileLayer` 包装海量点图层,按瓦片预渲染
271
-
272
- ## 相关技能
273
-
274
- - **openlayers** — Web 二维地图库(JavaScript):[../openlayers/SKILL.md](../openlayers/SKILL.md)
275
- - **sharpmap** — .NET 传统地图渲染引擎:[../sharpmap/SKILL.md](../sharpmap/SKILL.md)
276
- - **nettopologysuite** — .NET 几何计算核心:[../nettopologysuite/SKILL.md](../nettopologysuite/SKILL.md)
277
- - **geoserver** — 地图服务发布:[../geoserver/SKILL.md](../geoserver/SKILL.md)
278
-
279
- ## 参考资源
280
-
281
- - 文档:<https://mapsui.com/v5/documentation/index.html>
282
- - 示例:<https://mapsui.com/v5/samples/>
283
- - 中文教程(znlgis):<https://znlgis.github.io/gis/tutorial/Mapsui/>
1
+ ---
2
+ name: mapsui
3
+ description: "Use when embedding interactive 2D maps in .NET desktop (WinForms/WPF) or mobile (MAUI) applications — tile layers, vector features, map controls. Mapsui: cross-platform .NET map component library."
4
+ tags:
5
+ - dotnet
6
+ - csharp
7
+ - map
8
+ - wpf
9
+ - maui
10
+ - avalonia
11
+ - blazor
12
+ - skia
13
+ - wms
14
+ - tiles
15
+ ---
16
+
17
+ > **项目地址:** <https://github.com/Mapsui/Mapsui>
18
+ >
19
+ > **官方文档:** <https://mapsui.com/v5/documentation/index.html>
20
+ >
21
+ > **最新版本:** 5.1.0(截至2026-10,NuGet)
22
+ >
23
+ > **许可证:** MIT
24
+
25
+ ## 概述
26
+
27
+ - 跨 UI 框架:WPF / WinUI / MAUI / Avalonia / Uno / Blazor / WinForms
28
+ - SkiaSharp 渲染,性能优于 GDI+
29
+ - 数据源:OSM / WMS / WMTS / TMS / XYZ / Shapefile / GeoJSON / MBTiles / PostGIS
30
+ - 几何基于 NetTopologySuite
31
+ - 投影:`ProjNet` / `Mapsui.Projections`
32
+ - 内置交互:拖动、缩放、旋转、捏合、命中
33
+
34
+ ---
35
+
36
+ ## 安装
37
+
38
+ ```bash
39
+ dotnet add package Mapsui.Wpf # 或 Mapsui.Maui / Mapsui.Avalonia / ...
40
+ dotnet add package Mapsui.Tiling
41
+ dotnet add package Mapsui.Nts
42
+ ```
43
+
44
+ ---
45
+
46
+ ## WPF 入门
47
+
48
+ ```xml
49
+ <Window xmlns:mapsui="clr-namespace:Mapsui.UI.Wpf;assembly=Mapsui.UI.Wpf">
50
+ <mapsui:MapControl x:Name="MapControl"/>
51
+ </Window>
52
+ ```
53
+
54
+ ```csharp
55
+ using Mapsui;
56
+ using Mapsui.Tiling;
57
+ using Mapsui.Projections;
58
+
59
+ var map = new Map();
60
+ map.Layers.Add(OpenStreetMap.CreateTileLayer());
61
+
62
+ var pt = SphericalMercator.FromLonLat(116.397, 39.908).ToMPoint();
63
+ map.Navigator.CenterOnAndZoomTo(pt, map.Navigator.Resolutions[10]);
64
+
65
+ MapControl.Map = map;
66
+ ```
67
+
68
+ ---
69
+
70
+ ## 核心概念
71
+
72
+ | 类型 | 说明 |
73
+ |------|------|
74
+ | `Map` | 地图 |
75
+ | `Layer` / `MemoryLayer` / `ImageLayer` / `TileLayer` | 图层 |
76
+ | `IProvider` | 数据提供者 |
77
+ | `IFeature` / `GeometryFeature` | 要素(NTS 几何) |
78
+ | `IStyle` / `VectorStyle` / `LabelStyle` / `SymbolStyle` | 样式 |
79
+ | `Navigator` | 视图操作 |
80
+
81
+ ---
82
+
83
+ ## 矢量图层
84
+
85
+ ```csharp
86
+ using Mapsui.Nts;
87
+ using Mapsui.Styles;
88
+
89
+ var features = new List<IFeature>();
90
+ foreach (var f in geoJsonFeatures)
91
+ features.Add(new GeometryFeature(f.Geometry) {
92
+ Styles = { new VectorStyle {
93
+ Fill = new Brush(Color.Red),
94
+ Outline = new Pen(Color.Black, 1)
95
+ }}
96
+ });
97
+
98
+ map.Layers.Add(new MemoryLayer("Roads") { Features = features, Style = null });
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Shapefile
104
+
105
+ ```csharp
106
+ using Mapsui.Nts.Providers.Shapefile;
107
+ var prov = new ShapeFile("china.shp", true);
108
+ map.Layers.Add(new Layer("China") { DataSource = prov });
109
+ ```
110
+
111
+ ---
112
+
113
+ ## 瓦片图层
114
+
115
+ ```csharp
116
+ map.Layers.Add(OpenStreetMap.CreateTileLayer());
117
+
118
+ var src = new HttpTileSource(
119
+ new GlobalSphericalMercator(0, 18),
120
+ "https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
121
+ name: "AMap");
122
+ map.Layers.Add(new TileLayer(src) { Name = "AMap" });
123
+
124
+ // MBTiles
125
+ var mb = new MbTilesTileSource(new SQLiteConnectionString("city.mbtiles", false));
126
+ map.Layers.Add(new TileLayer(mb));
127
+ ```
128
+
129
+ ---
130
+
131
+ ## WMS
132
+
133
+ ```csharp
134
+ using Mapsui.Providers.Wms;
135
+ var wms = new WmsProvider("https://demo.mapserver.org/cgi-bin/wms?",
136
+ new[] { "continents" });
137
+ map.Layers.Add(new ImageLayer("WMS") { DataSource = wms });
138
+ ```
139
+
140
+ ---
141
+
142
+ ## 样式
143
+
144
+ ```csharp
145
+ new SymbolStyle { SymbolScale = 0.7, Fill = new Brush(Color.Red) };
146
+
147
+ new LabelStyle {
148
+ Text = "{name}",
149
+ Font = new Font { Size = 14 },
150
+ BackColor = new Brush(Color.WhiteSmoke),
151
+ Halo = new Pen(Color.White, 2)
152
+ };
153
+ ```
154
+
155
+ ---
156
+
157
+ ## 主题样式
158
+
159
+ ```csharp
160
+ public class PopulationStyle : IThemeStyle {
161
+ public IStyle? GetStyle(IFeature f) {
162
+ var pop = (int)f["population"];
163
+ return new VectorStyle { Fill = new Brush(pop > 1_000_000 ? Color.Red : Color.Blue) };
164
+ }
165
+ }
166
+ layer.Style = new PopulationStyle();
167
+ ```
168
+
169
+ ---
170
+
171
+ ## 交互
172
+
173
+ ```csharp
174
+ MapControl.Info += (s, e) => {
175
+ if (e.MapInfo?.Feature is GeometryFeature gf)
176
+ Debug.WriteLine($"clicked {gf["name"]}");
177
+ };
178
+ ```
179
+
180
+ ---
181
+
182
+ ## 性能优化
183
+
184
+ 1. 海量点 → `RasterizingTileLayer` 包一层(按瓦片预渲染)
185
+ 2. 优先 `MemoryLayer` + 缓存 Feature
186
+ 3. 异步加载 + `await Layer.WaitForFinishedRefresh()`
187
+ 4. 共享 Brush/Pen/Style 实例
188
+ 5. SkiaSharp 关闭抗锯齿对极小符号有性能提升
189
+
190
+ ---
191
+
192
+ ## 常见问题
193
+
194
+ | 问题 | 解决 |
195
+ |------|------|
196
+ | WPF 无图 | NuGet 缺 `Mapsui.Wpf` 或没设置 `MapControl.Map` |
197
+ | 找不到 `Mapsui.UI.Wpf` 包 | NuGet 包名为 `Mapsui.Wpf`(v3 起启用该名称;程序集仍为 `Mapsui.UI.Wpf.dll`) |
198
+ | 投影错误 | `SphericalMercator.FromLonLat` 转换 |
199
+ | MAUI 空白 | `MauiProgram` 中 `UseSkiaSharp()` + `UseMapsui()` |
200
+ | Shapefile 中文乱码 | 指定 Encoding |
201
+ | `GeometryFeature` / 瓦片类型找不到 | 矢量要素需安装 `Mapsui.Nts`,瓦片图层需安装 `Mapsui.Tiling` |
202
+
203
+ ---
204
+
205
+ ## 典型工作流
206
+
207
+ ### 工作流 1:加载底图 + GeoJSON 矢量数据
208
+
209
+ ```csharp
210
+ using Mapsui;
211
+ using Mapsui.Tiling;
212
+ using Mapsui.Nts;
213
+ using Mapsui.Styles;
214
+ using NetTopologySuite.IO;
215
+
216
+ var map = new Map();
217
+
218
+ // 1. 添加 OSM 底图
219
+ map.Layers.Add(OpenStreetMap.CreateTileLayer());
220
+
221
+ // 2. 读取 GeoJSON 并添加为矢量图层
222
+ var gjReader = new GeoJsonReader();
223
+ var features = new List<IFeature>();
224
+ foreach (var f in geojsonFeatures)
225
+ {
226
+ features.Add(new GeometryFeature(f.Geometry)
227
+ {
228
+ Styles = { new VectorStyle { Fill = new Brush(Color.Red) } }
229
+ });
230
+ }
231
+ map.Layers.Add(new MemoryLayer("Data") { Features = features });
232
+
233
+ // 3. 定位
234
+ var center = SphericalMercator.FromLonLat(116.4, 39.9).ToMPoint();
235
+ map.Navigator.CenterOnAndZoomTo(center, map.Navigator.Resolutions[10]);
236
+
237
+ MapControl.Map = map;
238
+ ```
239
+
240
+ ### 工作流 2:Shapefile + WMS 叠加
241
+
242
+ ```csharp
243
+ // Shapefile 图层
244
+ var shpProvider = new ShapeFile("china.shp", true);
245
+ map.Layers.Add(new Layer("China") { DataSource = shpProvider });
246
+
247
+ // WMS 图层(叠加)
248
+ var wmsProvider = new WmsProvider("https://geo.example.com/wms?", new[] { "rivers" });
249
+ map.Layers.Add(new ImageLayer("Rivers") { DataSource = wmsProvider });
250
+
251
+ map.ZoomToExtents();
252
+ ```
253
+
254
+ ## AI 使用建议
255
+
256
+ ### 推荐工作流
257
+
258
+ 1. **选择 UI 框架**:Mapsui 支持 WPF/WinUI/MAUI/Avalonia/Uno/Blazor/WinForms,根据需要选择对应的 NuGet 包
259
+ 2. **创建 Map**:实例化 `Map`,添加图层(`TileLayer` 作为底图 + `MemoryLayer` 作为矢量覆盖层)
260
+ 3. **数据转换**:通过 `SphericalMercator.FromLonLat()` 将经纬度转为 Web Mercator 坐标
261
+ 4. **绑定控件**:将 `MapControl.Map` 设置为创建的 Map 对象
262
+ 5. **添加交互**:通过 `MapControl.Info` 事件处理点击拾取,`Navigator` 控制视图
263
+
264
+ ### 关键注意事项
265
+
266
+ - **NuGet 包完整**:确保安装了 `Mapsui.<UI框架>`、`Mapsui.Tiling`、`Mapsui.Nts` 三个包
267
+ - **投影转换**:WGS84 经纬度必须通过 `SphericalMercator.FromLonLat()` 转换后才能用于 Mapsui 定位
268
+ - **Shapefile 编码**:中文 Shapefile 需指定 `Encoding`(如 `Encoding.UTF8` 或 `Encoding.GetEncoding("GBK")`)
269
+ - **样式共享**:共享 `Brush`/`Pen`/`VectorStyle` 实例可提升性能
270
+ - **海量点优化**:使用 `RasterizingTileLayer` 包装海量点图层,按瓦片预渲染
271
+
272
+ ## 相关技能
273
+
274
+ - **openlayers** — Web 二维地图库(JavaScript):[../openlayers/SKILL.md](../openlayers/SKILL.md)
275
+ - **sharpmap** — .NET 传统地图渲染引擎:[../sharpmap/SKILL.md](../sharpmap/SKILL.md)
276
+ - **nettopologysuite** — .NET 几何计算核心:[../nettopologysuite/SKILL.md](../nettopologysuite/SKILL.md)
277
+ - **geoserver** — 地图服务发布:[../geoserver/SKILL.md](../geoserver/SKILL.md)
278
+
279
+ ## 参考资源
280
+
281
+ - 文档:<https://mapsui.com/v5/documentation/index.html>
282
+ - 示例:<https://mapsui.com/v5/samples/>
283
+ - 中文教程(znlgis):<https://znlgis.github.io/gis/tutorial/Mapsui/>