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

来源:互联网 发布:cassandra java 编辑:程序博客网 时间:2024/05/29 16:43

主要的类:

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