问题描述:以下面的方式添加线后如何根据界面上的色带选择器选择的颜色更换对应区间内线的颜色
private void DrawRegionConnections()
{
// 0. 清旧层
RemoveExistingConnectionLayers();
// 1. 内存数据源
string connDsAlias = "Connections_" + Guid.NewGuid().ToString("N");
var connDs = workSpace.Datasources.Create(new DatasourceConnectionInfo
{
EngineType = EngineType.Memory,
Alias = connDsAlias
});
// 2. 建线数据集
var connDt = connDs.Datasets.Create(new DatasetVectorInfo
{
Name = "RegionConnections",
Type = DatasetType.Line
});
connDt.FieldInfos.Add(new FieldInfo("FromReg", FieldType.Text));
connDt.FieldInfos.Add(new FieldInfo("ToReg", FieldType.Text));
connDt.FieldInfos.Add(new FieldInfo("Value", FieldType.Double));
connDt.FieldInfos.Add(new FieldInfo("RangeSeg", FieldType.Text));// 区间段名
// 3. Name→AreaColorData
var areaDict = areaColorDatasList.ToDictionary(a => a.Name, a => a);
// 4. 过滤+排序
var sorted = results
.Where(r => areaDict.ContainsKey(r.FromRegion) &&
areaDict.ContainsKey(r.ToRegion))
.OrderByDescending(r => r.TotalValue)
.ToList();
// 5. 写要素
using (var rs = connDt.GetRecordset(false, CursorType.Dynamic))
{
foreach (var flow in sorted)
{
var fromArea = areaDict[flow.FromRegion];
var toArea = areaDict[flow.ToRegion];
if (fromArea.CentroidPoint == null || toArea.CentroidPoint == null) continue;
GeoLine line = new GeoLine(new Point2Ds{
fromArea.CentroidPoint,
toArea.CentroidPoint});
// 几何样式不管颜色,主题统一控制
line.Style = new GeoStyle
{
LineWidth = GetFlowWidth(flow.TotalValue),
LineSymbolID = 0
};
rs.AddNew(line);
rs.SetFieldValue("FromReg", flow.FromRegion);
rs.SetFieldValue("ToReg", flow.ToRegion);
rs.SetFieldValue("Value", flow.TotalValue);
rs.SetFieldValue("RangeSeg", flow.TotalValue);// 段名
rs.Update();
}
}
}