基于Avalonia UI的MapsUI:如何提取图层多边形转为字符串存储?
Avalonia UI MapsUI 多边形存储到数据库解决方案
核心思路
MapsUI中的GeometryFeature包含的几何数据可以转换为WKT(Well-Known Text)格式字符串,这是GIS领域通用的几何表示格式,非常适合存储到数据库。
修正后的实现代码
// 获取图层中的要素集合 IEnumerable<IFeature>? featureList = _editManager.Layer?.GetFeatures(); if (featureList == null || !featureList.Any()) { // 无要素时的处理逻辑 return; } // 提取第一个几何要素 var firstFeature = featureList.FirstOrDefault() as GeometryFeature; if (firstFeature?.Geometry == null) { // 几何数据为空时的处理逻辑 return; } // 将几何对象转为WKT字符串(直接调用内置方法) string polygonWkt = firstFeature.Geometry.AsText(); // polygonWkt格式示例:"POLYGON ((10.0 20.0, 30.0 40.0, 50.0 60.0, 10.0 20.0))"
兼容旧版本的手动拼接方式
如果你的MapsUI版本不支持AsText()方法,可以手动遍历多边形坐标拼接WKT:
var polygon = firstFeature.Geometry as Polygon; if (polygon != null) { // 提取多边形外环的所有坐标点 var coordinateStrings = polygon.ExteriorRing.Coordinates .Select(c => $"{c.X} {c.Y}"); // 拼接成标准WKT格式 string polygonWkt = $"POLYGON (({string.Join(", ", coordinateStrings)}))"; }
从数据库还原多边形
后续从数据库取出WKT字符串后,可通过以下方式重新构建几何对象并添加到图层:
// 从数据库读取WKT字符串 string storedWkt = "POLYGON ((10.0 20.0, 30.0 40.0, 50.0 60.0, 10.0 20.0))"; // 创建几何对象 var geometry = GeometryFactory.CreateFromWkt(storedWkt); // 添加到图层 var feature = new GeometryFeature(geometry); _editManager.Layer?.AddFeature(feature);
内容的提问来源于stack exchange,提问作者Codeaur
相关产品推荐
相关产品推荐

