如何在C# Xamarin Forms Maps中动态加载坐标生成Polygon地理围栏
问题修复方案
错误原因
C# 对象初始化器中的集合初始化语法仅支持直接填写元素值,不支持嵌入
foreach等执行语句,这是你代码报错的核心原因。
可用实现方案
你可以选择以下任意一种方式实现动态点位加载:
方案1:使用LINQ批量转换(写法最简洁)
需要先引入LINQ命名空间:using System.Linq;
实现代码:
// 先将字符串坐标批量转为Position集合 var positionList = coordinates.Select(coordinate => { var latLonArr = coordinate.Split(','); return new Position(Convert.ToDouble(latLonArr[0]), Convert.ToDouble(latLonArr[1])); }).ToList(); // 初始化地理围栏Polygon Polygon geofence = new Polygon { StrokeColor = Color.Green, FillColor = Color.Green, Geopath = positionList };
方案2:先实例化对象再循环添加点位
如果你不习惯用LINQ,可以用基础循环实现:
// 先初始化Polygon基础属性 Polygon geofence = new Polygon { StrokeColor = Color.Green, FillColor = Color.Green }; // 循环遍历坐标数组,逐个添加到Geopath中 foreach (string coordinate in coordinates) { string[] latLonArr = coordinate.Split(','); geofence.Geopath.Add(new Position( Convert.ToDouble(latLonArr[0]), Convert.ToDouble(latLonArr[1]) )); }
注意:如果你的坐标字符串可能存在格式异常(比如分隔符错误、非数字内容),建议添加对应的格式校验逻辑,避免转换坐标时抛出运行时异常。
内容的提问来源于stack exchange,提问作者NETDev
相关产品推荐
相关产品推荐

