首页 / 浏览问题 / 组件GIS / 问题详情
.net11i中添加线后如何根据色带选择的颜色更换某一区间内的线的颜色
23EXP 2025年09月11日

问题描述:以下面的方式添加线后如何根据界面上的色带选择器选择的颜色更换对应区间内线的颜色

 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();
         }
     }

 }

1个回答

您好,

请参考 ThemeUnique 单值专题图类,将字段或表达式的值相同的要素采用相同的风格来显示,从而用来区分不同的类别。或者 ThemeRange 分段专题图类,按照提供的分段方法对字段的属性值进行分段,并根据每个属性值所在的分段范围赋予相应对象的显示风格。

希望能够帮助到您。
1,395EXP 2025年09月11日
...