asp.net版:
Code
/// <summary>
/// 创建分段专题图
/// 使用此方法前应调用ClearThemeLayer清除专题图
/// </summary>
/// <param name="ThemeLayer">要创建专题图的图层</param>
/// <param name="FiledMap">图层中与外部数据关联的字段</param>
/// <param name="FiledName">关联的外部字段</param>
/// <param name="Themedt">关联的外部数据表</param>
/// <param name="ThemeCount">分为几段</param>
/// <param name="ThemeBreakValue">分段值的范围</param>
/// <param name="ThemeBreakName">分段的名称,第一项为专题的名称</param>
/// <param name="ThemeColor">专题图的颜色</param>
/// <param name="DisplayFilter">是否进行图层过滤</param>
public void CreateTheme(Layer ThemeLayer, string FiledMap, string[] FiledName, DataTable Themedt, int ThemeCount, double[] ThemeBreakValue, string[] ThemeBreakName, System.Drawing.Color[] ThemeColor, MapControl MapControl1)
{
if (ThemeLayer == null)
{
return;
}
ThemeLayer.Visible = true;
RangeTheme objThemeR;
ThemeLayer.ThemeRange = new RangeTheme();
objThemeR = ThemeLayer.ThemeRange;
objThemeR.Enabled = true;
objThemeR.Caption = ThemeBreakName[0];
objThemeR.Expression = " ";
ThemeLayer.ThemeRange.ForeignDataParam = new ForeignDataParam();
objThemeR.ForeignDataParam.UseForeignValue = true;
objThemeR.ForeignDataParam.ForeignJoinExpression = FiledMap;
objThemeR.BreakValues = new double[ThemeCount];
for (int i = 0; i < ThemeCount; i++)
{
objThemeR.BreakValues[i] = ThemeBreakValue[i];
}
SetThemeStyle(ThemeLayer.Style, objThemeR, ThemeColor);
if (Themedt.Rows.Count >= 1)
{
objThemeR.ForeignDataParam.ForeignKeys = new string[Themedt.Rows.Count];
objThemeR.ForeignDataParam.ForeignValues = new string[Themedt.Rows.Count];
for (int i = 0; i < Themedt.Rows.Count; i++)
{
objThemeR.ForeignDataParam.ForeignKeys[i] = Themedt.Rows[i][FiledName[0]].ToString().Trim();
objThemeR.ForeignDataParam.ForeignValues[i] = Themedt.Rows[i][FiledName[1]].ToString().Trim(); ;
}
}
MapControl1.ClearCache();
MapControl1.Update();
MapControl1.ClearHighlight();
}
/// <summary>
/// 创建分段专题图
/// 使用此方法前应调用ClearThemeLayer清除专题图
/// </summary>
/// <param name="ThemeLayer">要创建专题图的图层</param>
/// <param name="FiledMap">图层中与外部数据关联的字段</param>
/// <param name="FiledName">关联的外部字段</param>
/// <param name="Themedt">关联的外部数据表</param>
/// <param name="ThemeCount">分为几段</param>
/// <param name="ThemeBreakValue">分段值的范围</param>
/// <param name="ThemeBreakName">分段的名称,第一项为专题的名称</param>
/// <param name="ThemeColor">专题图的颜色</param>
/// <param name="DisplayFilter">是否进行图层过滤</param>
public void CreateTheme(Layer ThemeLayer, string FiledMap, string[] FiledName, DataTable Themedt, int ThemeCount, double[] ThemeBreakValue, string[] ThemeBreakName, System.Drawing.Color[] ThemeColor, MapControl MapControl1)
{
if (ThemeLayer == null)
{
return;
}
ThemeLayer.Visible = true;
RangeTheme objThemeR;
ThemeLayer.ThemeRange = new RangeTheme();
objThemeR = ThemeLayer.ThemeRange;
objThemeR.Enabled = true;
objThemeR.Caption = ThemeBreakName[0];
objThemeR.Expression = " ";
ThemeLayer.ThemeRange.ForeignDataParam = new ForeignDataParam();
objThemeR.ForeignDataParam.UseForeignValue = true;
objThemeR.ForeignDataParam.ForeignJoinExpression = FiledMap;
objThemeR.BreakValues = new double[ThemeCount];
for (int i = 0; i < ThemeCount; i++)
{
objThemeR.BreakValues[i] = ThemeBreakValue[i];
}
SetThemeStyle(ThemeLayer.Style, objThemeR, ThemeColor);
if (Themedt.Rows.Count >= 1)
{
objThemeR.ForeignDataParam.ForeignKeys = new string[Themedt.Rows.Count];
objThemeR.ForeignDataParam.ForeignValues = new string[Themedt.Rows.Count];
for (int i = 0; i < Themedt.Rows.Count; i++)
{
objThemeR.ForeignDataParam.ForeignKeys[i] = Themedt.Rows[i][FiledName[0]].ToString().Trim();
objThemeR.ForeignDataParam.ForeignValues[i] = Themedt.Rows[i][FiledName[1]].ToString().Trim(); ;
}
}
MapControl1.ClearCache();
MapControl1.Update();
MapControl1.ClearHighlight();
}
桌面版:
Code
/// <summary>
/// 创建分段专题图
/// 使用此方法前应调用ClearThemeLayer清除专题图
/// </summary>
/// <param name="ThemeLayer">要创建专题图的图层</param>
/// <param name="FiledMap">图层中与外部数据关联的字段</param>
/// <param name="FiledName">关联的外部字段</param>
/// <param name="Themedt">关联的外部数据表</param>
/// <param name="ThemeCount">分为几段</param>
/// <param name="ThemeBreakValue">分段值的范围</param>
/// <param name="ThemeBreakName">分段的名称,第一项为专题的名称</param>
/// <param name="ThemeColor">专题图的颜色</param>
/// <param name="DisplayFilter">是否进行图层过滤</param>
private void CreateTheme(soLayer ThemeLayer, string FiledMap, string[] FiledName, DataTable Themedt, int ThemeCount, double[] ThemeBreakValue, string[] ThemeBreakName, Color[] ThemeColor, bool DisplayFilter)
{
if (ThemeLayer == null)
{
return;
}
ThemeLayer.Visible = true;
soThemeRange objThemeR = null;
seDatasetType nDtType = 0;
nDtType = ThemeLayer.Dataset.Type;
objThemeR = ThemeLayer.ThemeRange;
objThemeR.IsForeignValue = 2;//使用外部关联图
objThemeR.Field = "SmId";
objThemeR.BreakCount = ThemeCount;
for (int i = 0; i < ThemeCount; i++)
{
objThemeR.set_BreakValue(i + 1, ThemeBreakValue[i]);
objThemeR.set_ItemCaption(i + 1, ThemeBreakName[i + 1]);
}
objThemeR.set_ItemCaption(ThemeCount + 1, ThemeBreakName[ThemeCount + 1]);
SetThemeStyle(ThemeLayer.Style, objThemeR, nDtType, ThemeColor);
objThemeR.Caption = ThemeBreakName[0];
objThemeR.ForeignJoinExpression = FiledMap;
string strWhere = " ";
if (Themedt.Rows.Count > 0)
{
for (int i = 0; i < Themedt.Rows.Count; i++)
{
objThemeR.set_ForeignValue(Themedt.Rows[i][FiledName[0]].ToString().Trim(), Themedt.Rows[i][FiledName[1]].ToString());
strWhere += "'" + Themedt.Rows[i][FiledName[0]].ToString().Trim() + "',";
}
}
objThemeR.Enable = true;
ThemeLayer.ThemeUnique.Enable = false;
if (DisplayFilter)
{
strWhere = strWhere.TrimEnd(',');
if (strWhere != "''")
{
if (chkYes.Visible == true || chkNo.Visible == true)
{
strWhere = FiledMap + " in ( " + strWhere + ")";
}
else
{
strWhere = "";
}
ThemeLayer.DisplayFilter = strWhere;
}
}
SuperMap1.Refresh();
Marshal.ReleaseComObject(objThemeR);
objThemeR = null;
}
/// <summary>
/// 创建分段专题图
/// 使用此方法前应调用ClearThemeLayer清除专题图
/// </summary>
/// <param name="ThemeLayer">要创建专题图的图层</param>
/// <param name="FiledMap">图层中与外部数据关联的字段</param>
/// <param name="FiledName">关联的外部字段</param>
/// <param name="Themedt">关联的外部数据表</param>
/// <param name="ThemeCount">分为几段</param>
/// <param name="ThemeBreakValue">分段值的范围</param>
/// <param name="ThemeBreakName">分段的名称,第一项为专题的名称</param>
/// <param name="ThemeColor">专题图的颜色</param>
/// <param name="DisplayFilter">是否进行图层过滤</param>
private void CreateTheme(soLayer ThemeLayer, string FiledMap, string[] FiledName, DataTable Themedt, int ThemeCount, double[] ThemeBreakValue, string[] ThemeBreakName, Color[] ThemeColor, bool DisplayFilter)
{
if (ThemeLayer == null)
{
return;
}
ThemeLayer.Visible = true;
soThemeRange objThemeR = null;
seDatasetType nDtType = 0;
nDtType = ThemeLayer.Dataset.Type;
objThemeR = ThemeLayer.ThemeRange;
objThemeR.IsForeignValue = 2;//使用外部关联图
objThemeR.Field = "SmId";
objThemeR.BreakCount = ThemeCount;
for (int i = 0; i < ThemeCount; i++)
{
objThemeR.set_BreakValue(i + 1, ThemeBreakValue[i]);
objThemeR.set_ItemCaption(i + 1, ThemeBreakName[i + 1]);
}
objThemeR.set_ItemCaption(ThemeCount + 1, ThemeBreakName[ThemeCount + 1]);
SetThemeStyle(ThemeLayer.Style, objThemeR, nDtType, ThemeColor);
objThemeR.Caption = ThemeBreakName[0];
objThemeR.ForeignJoinExpression = FiledMap;
string strWhere = " ";
if (Themedt.Rows.Count > 0)
{
for (int i = 0; i < Themedt.Rows.Count; i++)
{
objThemeR.set_ForeignValue(Themedt.Rows[i][FiledName[0]].ToString().Trim(), Themedt.Rows[i][FiledName[1]].ToString());
strWhere += "'" + Themedt.Rows[i][FiledName[0]].ToString().Trim() + "',";
}
}
objThemeR.Enable = true;
ThemeLayer.ThemeUnique.Enable = false;
if (DisplayFilter)
{
strWhere = strWhere.TrimEnd(',');
if (strWhere != "''")
{
if (chkYes.Visible == true || chkNo.Visible == true)
{
strWhere = FiledMap + " in ( " + strWhere + ")";
}
else
{
strWhere = "";
}
ThemeLayer.DisplayFilter = strWhere;
}
}
SuperMap1.Refresh();
Marshal.ReleaseComObject(objThemeR);
objThemeR = null;
}