您的位置:首页 > 其它

supermap 在地图上显示 属性信息(添加图层)

2012-11-06 11:48 176 查看


主要的类:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using SuperMap.Data;
using SuperMap.Mapping;
using SuperMap.UI;

namespace showLayer
{
internal class SampleRun
{
private Workspace m_workspace;
private MapControl m_mapControl;
private Layer mylayer;
private static readonly Double fontHeight = 0.4;

public Boolean m_isWaitCursor
{
get
{
return m_mapControl.IsWaitCursorEnabled;
}
set
{
m_mapControl.IsWaitCursorEnabled = value;
}
}

public SampleRun(Workspace workspace, MapControl mapcontrol)
{
this.m_workspace = workspace;
this.m_mapControl = mapcontrol;
this.m_mapControl.Map.Workspace = m_workspace;
Initialize(); //加载地图方法
}

/// <summary>
/// 加载地图
/// </summary>
private void Initialize()
{
WorkspaceConnectionInfo conInfo = new WorkspaceConnectionInfo(@"D:\souce\supermap\SampleData\World\World.smwu");
m_workspace.Open(conInfo);
m_mapControl.Map.Open(m_workspace.Maps[0]);
m_mapControl.Action = Action.Pan;
m_mapControl.Map.ViewEntire();
AddCustomLayer();
EnableCustomCursor();
}

/// <summary>
/// 添加属性的一个图层
/// </summary>
public void AddCustomLayer()
{
DatasetVector dataset = m_workspace.Datasources[0].Datasets["Capital"] as DatasetVector;
ThemeLabel label = new ThemeLabel();
label.LabelExpression = "SMID";
label.IsOverlapAvoided = true;
mylayer = m_mapControl.Map.Layers.Add(dataset, label, true);
mylayer.ValueExpressions = new string[] { "Country", "Capital" };
mylayer.ElementDrawing += new ElementDrawingEventHandler(mylayer_ElementDrawing);
m_mapControl.Map.Refresh();
}

/// <summary>
/// 元素绘制事件,可以根据其参数ElementDrawingEventArgs,获得坐标位置
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void mylayer_ElementDrawing(object sender, ElementDrawingEventArgs e)
{
GeoCompound compound = e.Element as GeoCompound;
GeoPoint basePoint = e.Geometry as GeoPoint;
String country = e.Values[0].ToString();
String capital = e.Values[1].ToString();
AddDisplayContent(compound, basePoint, country, capital);
}

private void AddDisplayContent(GeoCompound tagcompound, GeoPoint basepoint, String country, String capital)
{
GeoText geoTextTime = CreateTime(basepoint);
tagcompound.AddPart(geoTextTime);
GeoText geoTextCountry = CreateCountry(basepoint, country);
tagcompound.AddPart(geoTextCountry);
}

/// <summary>
/// 获得当前点的时间
/// </summary>
/// <param name="basePoint">坐标点</param>
/// <returns></returns>
private static GeoText CreateTime(GeoPoint basePoint)
{
GeoText geoTime = null;
//基准时间
DateTime baseTime = System.TimeZone.CurrentTimeZone.ToUniversalTime(System.DateTime.Now);
//根据基准时间获得当地时间
DateTime localTime = baseTime.AddHours(Math.Round(basePoint.X / 15));

geoTime = new GeoText(new TextPart("Time:" + localTime.ToShortTimeString(), new Point2D(basePoint.X, basePoint.Y)));
geoTime.TextStyle.Alignment = TextAlignment.TopLeft;
geoTime.TextStyle.ForeColor = Color.Red;
geoTime.TextStyle.FontHeight = fontHeight;
geoTime.TextStyle.IsSizeFixed = false;

return geoTime;
}

/// <summary>
/// 获取国家名,并且显示在时间下面
/// </summary>
/// <param name="basePoint"></param>
/// <param name="country"></param>
/// <returns></returns>
private static GeoText CreateCountry(GeoPoint basePoint, String country)
{
GeoText geoCountry = new GeoText(new TextPart("Country:" + country, new Point2D(basePoint.X, basePoint.Y - fontHeight)));
geoCountry.TextStyle.Alignment = TextAlignment.TopLeft;
geoCountry.TextStyle.FontHeight = fontHeight;
geoCountry.TextStyle.ForeColor = Color.Red;
geoCountry.TextStyle.IsSizeFixed = false;

return geoCountry;
}

public void RemoveCustomLayer()
{
}

/// <summary>
/// 添加鼠标靠近弹出框
/// </summary>
public void EnableCustomCursor()
{
}

/// <summary>
/// 删除鼠标靠近弹出框
/// </summary>
public void DisableCustomCursor()
{
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐