我正试图基于集合创建一个图例,下面的代码进入一个Shapefile并提取特定的列数据,然后我们为数据指定一种颜色。这是我在控制器中制作的,我想知道我是否可以基于这个集合创建一个HTML图例,我想做的方式是用我们想要图例的每个层创建单选按钮。我知道这可能很模糊,但我真的不知道该怎么描述。
将非常感谢您的任何建议
private Collection<ValueItem> colorSelect(Collection<Feature> allFeatures, string layercode,Collection<ValueItem> valueItems)
{
List<string> values = new List<string>();
foreach (Feature f in allFeatures)
{
if (f.ColumnValues.ContainsKey(layercode))
{
if (!values.Contains(f.ColumnValues[layercode].ToString()))
{
values.Add(f.ColumnValues[layercode].ToString());
}
}
}
if (values.Count > 0)
{
Random randomGen = new Random();
int count = 0;
foreach (string esnCode in values)
{
//int count = 0;
if (count == 0)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Green, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 1)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Pink, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 2)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Blue, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 3)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Yellow, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 4)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Violet, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 5)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Red, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 6)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Aqua, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 7)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Black, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 8)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Brown, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 9)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Coral, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
if (count == 10)
{
ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.DarkKhaki, GeoColor.StandardColors.Black, 3));
valueItems.Add(item);
}
count++;
}
}
return (valueItems);
}
好吧,一旦获取了颜色数据,就必须将其传递给视图并对其进行处理。你有两种传球方式:
- 作为模型
- 在ViewBag中
你选择什么选项并不重要,但假设我们在查看包中传递它。
public ActionResult ColorsLegend()
{
var listOfColors = colorSelect(args..);
ViewBag.colorList = listOfColors;
return View();
}
在视图中,您可以遍历这个颜色列表,并实际执行您想要的操作。F.让我们为该颜色创建一个色块和名称列表
@foreach(var item in ViewBag.colorList){
<div style='background-color:@item.colorValue;width:100px;height:20px;float:left;'></div>
<span style='float:left;'> - @item.colorName </span>
}