MapXtreme2008中操作矢量符号和定制符号

 本文部分说明内容摘自网络文章,经过本人在MapXtreme2008中编写相关的演示例子,详细说明如何操作MapXtreme2008提供的矢量符号和定制符号。
  MapXtreme 在其安装过程中自动安装 10 种 MapInfo 特定的 TrueType 字体。这些字体为用户提供了字形符号选择,范围涉及天气、房地产、交通等。字形编号为 Unicode 字符值,由于这些编号位于第一个 Unicode 字符代码块范围内,因此,与 ASCII 字符集兼容。
  MapXtreme包含三种点样式:BitmapPointStyle (位图点样式)、FontPointStyle(字体点样式)和SimpleVectorPointStyle(简单矢量点样式)。
 简单矢量点样式

         此样式包含使用MapInfo 3.0 兼容专有字体用于绘制点的样式属性(MapInfow.fnt)。SimpleVectorPointStyle 属性包括了要为点绘制的实际符号的颜色、点大小和形状码。标准集包括符号31 至67。以下是符号与形状码的对应图,31是空。在比较简单的场合使用此样式已经足够,但是很多场合都不简单。

结构:

public SimpleVectorPointStyle(
   short code,
   Color color,
   double pointSize
);

code        上面图片中对应的形状码
color        填充符号的颜色,上面图片中为黑色
pointSize    符号大小

 字体点样式
            使用FontPointStyle 类可以显示TrueType字体集,允许的最大点大小为240 点。这给了我们很大的自由空间,其中的MapInfo Symbols字体和上面的字体是相同的,不过MapInfo Symbols是TrueType字符集。MapXtreme自带的字体:
            Map Symbols
            MapInfo Arrows
            MapInfo Cartographic
            MapInfo Miscellaneous
            MapInfo Oil&Gas
            MapInfo Real Estate
            MapInfo Shields
            MapInfo Symbols
            MapInfo Transportation
            MapInfo Weather

可以使用一些相关软件查看这些字体的具体内容,比如 字体试衣间 、微软自带的 字符映射表 。

public FontPointStyle(
   short code,
   Font font,
   short angle,
   Color color,
   double pointSize
);

code        字体映射的编码
font        字体的样式。很关键,字体样式的强大全靠它了
angle        字体旋转的角度
color        字体填充的颜色
pointSize    字体的大小,12就差不多了

位图点样式

            定制的位图符号位于 C:\Program Files\Common Files\MapInfo\MapXtreme\6.x\CustSymb。每个图像的文件扩展名都是 .BMP。可以用编程方式通过 MapInfo.Styles 命名空间中的 BitmapPointStyleRepository 集合类访问这些符号。可以创建自己的位图图像并将其添加到 CustSymb 目录。尽管事实上对创建的图像没有大小限制,不过 MapXtreme 显示图像的能力取决于可用的内存。图像不一定必须是方形,而且还可以具有最多24 位颜色深度。要确保图像以其高度和宽度显示,则必须在各自图像的 BitmapPointStyle 对象中将Boolean "NativeSize" 属性设置为 true。
            位图点样式应该是最可能被用到的样式。它通过自定义的图片来标识地图上的图元。位图点样式具有ShowWhiteBackground 属性;如果设置为false,则位图中的白像素为透明。默认情况下,ShowWhiteBackground 被设置为false。

public BitmapPointStyle(
   string strName,
   BitmapStyles style,
   Color color,
   double pointSize
);

strName        图片的相对路径加上名称。一般图片的根路径是  X:\Program Files\Common Files\MapInfo\MapXtreme\6.x\CustSymb    X为安装盘。同时图片也放在那里。 
style            图片的样式。

  • None: 按默认的状态显示。并且白色部分将透明。
  • ShowWhiteBackground: 显示白色部分。
  • ApplyColor: 在标识中的透明部分将用第三个参数的颜色填充.
  • NativeSize: 按标识的真实大小和象素显示,第四项参数将无效.

color        白色部分的填充色
pointSize    标识大小

下面分别介绍这几种图标如何在Web中添加展示,下面列出相关代码。

        protected void Page_Load(object sender, System.EventArgs e)
        {
            if (StateManager.IsManualState())
            {
                MapInfo.Mapping.Map myMap = GetMapObj();
                if (Session.IsNewSession)
                {
                    MapInfo.WebControls.MapControlModel controlModel = MapControlModel.SetDefaultModelInSession();

                    //instanciate AppStateManager class
                    AppStateManager myStateManager = new AppStateManager();
                    //put current map alias to state manager dictionary
                    myStateManager.ParamsDictionary[StateManager.ActiveMapAliasKey] = this.MapControl1.MapAlias;
                    //put state manager to session
                    StateManager.PutStateManagerInSession(myStateManager);

                    #region 测试代码

                    if (myMap != null)
                    {
                        if (myMap.Layers["TempLayerAlias"] != null)
                        {
                            myMap.Layers.Remove("TempLayerAlias");
                        }
                    }
                    // Need to clean up "dirty" temp table left by other customer requests.
                    MapInfo.Engine.Session.Current.Catalog.CloseTable("TempTableAlias");
                    // Need to clear the DefautlSelection.
                    MapInfo.Engine.Session.Current.Selections.DefaultSelection.Clear();

                    // Creat a temp table and AddPintPointCommand will add features into it.
                    MapInfo.Data.TableInfoMemTable ti = new MapInfo.Data.TableInfoMemTable("TempTableAlias");
                    // Make the table mappable
                    ti.Columns.Add(MapInfo.Data.ColumnFactory.CreateFeatureGeometryColumn(myMap.GetDisplayCoordSys()));
                    ti.Columns.Add(MapInfo.Data.ColumnFactory.CreateStyleColumn());

                    MapInfo.Data.Table table = MapInfo.Engine.Session.Current.Catalog.CreateTable(ti);
                    // Create a new FeatureLayer based on the temp table, so we can see the temp table on the map.
                    myMap.Layers.Insert(0, new FeatureLayer(table, "templayer", "TempLayerAlias"));

                    IMapLayer lyr = myMap.Layers["TempLayerAlias"];
                    if (lyr == null) return;
                    FeatureLayer fLyr = lyr as FeatureLayer;

                    MapInfo.Geometry.DPoint point = new DPoint(100, 20);
                    MapInfo.Geometry.Point geoPoint = new MapInfo.Geometry.Point(myMap.GetDisplayCoordSys(), point);
                    
                    // 创建内置MapInfo符号图标
                    SimpleVectorPointStyle vStyle = new SimpleVectorPointStyle();
                    vStyle.Code = 67;
                    vStyle.Color = Color.Red;
                    vStyle.PointSize = Convert.ToInt16(48);
                    vStyle.Attributes = StyleAttributes.PointAttributes.BaseAll;
                    vStyle.SetApplyAll();

                    // Create a Feature which contains a Point geometry and insert it into temp table.
                    Feature feature = new Feature(geoPoint, vStyle);
                    MapInfo.Data.Key key = fLyr.Table.InsertFeature(feature);

                    //创建自定义位图样式
                    //位图相对于位置C:\Program Files\Common Files\MapInfo\MapXtreme\6.8.0\CustSymb
                    string fileName = @"AMBU1-32.BMP";
                    BitmapPointStyle bStyle = new BitmapPointStyle(fileName);
                    bStyle.PointSize = Convert.ToInt16(24);
                    bStyle.NativeSize = true;
                    bStyle.Attributes = StyleAttributes.PointAttributes.BaseAll;
                    bStyle.SetApplyAll();

                    point = new DPoint(140, 55);
                    geoPoint = new MapInfo.Geometry.Point(myMap.GetDisplayCoordSys(), point);
                    feature = new Feature(geoPoint, bStyle);
                    key = fLyr.Table.InsertFeature(feature);

                    //添加字体图样式
                    //FontPointStyle fStyle = new FontPointStyle();
                    //fStyle.Color = Color.Red;
                    //fStyle.Font.Name = "NewCom Vehicle";
                    //fStyle.PointSize = Convert.ToInt16(24);
                    //fStyle.Attributes = StyleAttributes.PointAttributes.BaseAll;
                    //fStyle.SetApplyAll();

                    FontPointStyle fStyle = new FontPointStyle();
                    fStyle.Code = 66;
                    fStyle.PointSize = 48;
                    fStyle.Color = System.Drawing.Color.Red;
                    fStyle.Font.Name = "Uniwill";
                    fStyle.Font.FontWeight = MapInfo.Styles.FontWeight.Bold;
                    fStyle.Angle = 900;

                    point = new DPoint(180, 85);
                    geoPoint = new MapInfo.Geometry.Point(myMap.GetDisplayCoordSys(), point);
                    feature = new Feature(geoPoint, fStyle);
                    key = fLyr.Table.InsertFeature(feature);

                    #endregion
                }

                // Now Restore State
                StateManager.GetStateManagerFromSession().RestoreState();
            }
        }

其他部分的相关代码如下:

        // At the time of unloading the page, save the state
        protected void Page_UnLoad(object sender, System.EventArgs e)
        {
            if (StateManager.IsManualState())
            {
                StateManager.GetStateManagerFromSession().SaveState();
            }
        }

        private MapInfo.Mapping.Map GetMapObj()
        {
            MapInfo.Mapping.Map myMap = MapInfo.Engine.Session.Current.MapFactory[MapControl1.MapAlias];
            if (myMap == null)
            {
                myMap = MapInfo.Engine.Session.Current.MapFactory[0];
            }
            return myMap;
        }

以上得到的界面效果如下图所示,分别有3个对应的图标与之对应。

本文转自博客园伍华聪的博客,原文链接:MapXtreme2008中操作矢量符号和定制符号,如需转载请自行联系原博主。

时间: 2024-08-03 14:45:26

MapXtreme2008中操作矢量符号和定制符号的相关文章

word文档中如何插入不常见的符号

  word文档中如何插入不常见的符号          方法1 打开word文档,依次点击"插入"--"符号"--"其他符号". 2.在弹出的对话框里,选择合适的"字体"."子集",就能得到一些特殊字符. 3.在弹出的对话框里,选择"特殊字符",就能得到"版权所有"."注册"."商标"等特殊字符. 举例: "字体&q

word中的方形点是什么符号

当编辑一篇word文档时,您可能会遇到这样的情况,无论输入哪一行哪一段落,文字的前面会自带一些符号,比如下图. 这些符号一旦出现,在某种程度上,会给我们的排版带来相应的麻烦.而且这些小方形点点点一般不能删除, 如果强行一删就是整行文字都被删除,还有,一改动,所有的内容都跟着改动. 像这样的符号,称为项目编号.是带有固定格式的,所以,在不需要的情况下产生就是一种麻烦,在需要的情况下产生,则是一种方便. 一.项目符号是如何产生的 执行菜单操作"格式"→"项目符号和编号"

深入分析C语言中的有符号和无符号

就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个量是否需要正负.如果这个量不会有负值,那么我们可以定它为带正负的类型. 在计算机中,可以区分正负的类型,称为有符类型(signed),无正负的类型(只有正值),称为无符类型. (unsigned)数值类型分为整型或实型,其中整型又分为无符类型或有符类型,而实型则只有符类型. 字符类型也分为有符和无符类型. 比如有两个量,年龄和库存,我们可以定前者为无符的字符类型,后者定为有符的整数类型. 2.使用二制数中的最高位表

C语言中的强符号和弱符号介绍_C 语言

之前在extern "C" 用法详解中已经提到过符号的概念,它是编译器对变量和函数的一种标记,编译器对C和C++代码在生产符号时规则也是不一样的,符号除了本身名字的区别外,还有强符号和弱符号之分 我们先看一段简单的代码 复制代码 代码如下: /* test.c */  void hello();  int main()  {      hello();      return 0;  }  很显然,这段代码是没法链接通过的,它会报错undefined reference to hell

怎么在Word中添加箭头等框架流程符号

  怎么在Word中添加箭头等框架流程符号?办公过程中经常会使用WORD工具制作文本,初入职场的你还在简单敲一堆又一堆的字儿就上交领导吗?怎样让文本更生动立体呢?下面给大家分享一下,在word文档中添加箭头框架等流程符号的方法,需要的朋友赶紧来看一下吧. 1.首先,打开自己创建的word文档 ,假如现在想插入一个箭头. 2.在上边的菜单栏找到"插入",在子菜单栏找到"形状"随即出来一堆形状,找到""点击. 3.随即会发现鼠标变成了一个十字星,如图

Word中如何打汉语拼音及声调符号?

问题:Word中如何打汉语拼音及声调符号? 解答:菜单中选"插入"-"特殊符号"-"拼音",就可以选择带声调的韵母了. 如果要在文字上方加拼音,先选定文字-在菜单中选"格式"-"中文版式"-"拼音指南",就可以了,不用你输入,自动加?

【译】在Asp.Net中操作PDF - iTextSharp - 绘制矢量图

原文 [译]在Asp.Net中操作PDF - iTextSharp - 绘制矢量图   在上一篇iTextSharp文章中讲述了如何将现有的图片插入PDF中并对其进行操作.但有时,你需要在PDF中绘制不依赖于任何图片文件的矢量图形.iTextSharp既包含了绘制简单矢量图功能,也包含了绘制复杂矢量图的功能.这篇文章将会帮助你入门.本系列文章之前的文章如下:       在ASP.NET中创建PDF-iTextSharp起步     在Asp.Net中操作PDF - iTextSharp - 使

在jsp中写的jquery代码为什么 $符号会报错

问题描述 在jsp中写的jquery代码为什么 $符号会报错 解决方案 明显你"${student.number}",你这是后台传过来的吧 解决方案二: 对,我直接复制的页面,忘了这个了,多谢 解决方案三: jquery 的js引对了吗?

《Excel高手捷径:一招鲜,吃遍天》一第18招 怎样在Excel中插入方框内打勾符号(√)和方框内打叉符号(×)

第18招 怎样在Excel中插入方框内打勾符号(√)和方框内打叉符号(×) Excel高手捷径:一招鲜,吃遍天要在Excel单元格内容为"是"和"否"后面插入方框,并且方框内打勾 .光标放在"是"后面,单击菜单"插入→符号",字体选择Wingdings,选择方框符号,如图1-66所示. 光标放在"否"后面,单击"插入→符号",字体选择Wingdings,拖动右边的滚动条,拖到最下面,倒数