MapGIS常见问题之二次开发相关问题_第1页
MapGIS常见问题之二次开发相关问题_第2页
MapGIS常见问题之二次开发相关问题_第3页
MapGIS常见问题之二次开发相关问题_第4页
MapGIS常见问题之二次开发相关问题_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MapGIS常见问题中地数码集团平台二次开发支持部本期常见问题主要由MapGIS开发平台C/S开发问题组成,涉及部分B/S开发问题。1、基于MapGIS开发平台,如何通过代码实现修改线的图形参数操作,包括可变颜色、可变笔宽、线型等参数?答:可按照如下步骤实现:(1)在MapGIS软件中若需查看线、区等要素的图形参数,需开启还原显示功能,可通过编写代码手动开启还原显示功能。(2)在还原显示模式下,线是通过MapGIS符号库的线型来显示的,而线型符号则由几部分构成,而每一部分若采取固定颜色或者固定笔宽的模式,则无法看到修改后的线型参数。只有在某一部分采取可变颜色或者可变笔宽的情况下,对图形信息中的

2、相关项的修改才会有效果,因此可以通过修改符号库的相关线型的颜色模式或笔宽模式来达到效果。(3)一个线型可以通过线型号+辅助线型号来唯一确定,以COM组件式开发C#语言为例的线属性如下:mcLinInfo. libID:辅助线型号mcLinInfo. linstyID:线型号(4)基于COM组件式开发C#语言的还原显示实现代码如下:mcLinInfolineInfo = new mcLinInfo();/线信息mcGeoVarLinevarLine = new mcGeoVarLine();/折线对象/点对象mcDot dot1 = new mcDot();mcDot dot2 = new mc

3、Dot();/点对象赋值dot1.x = 50;dot1.y = 50;dot2.x = 200;dot2.y = 200;/添加到折线对象varLine.Append2D(dot1);varLine.Append2D(dot2);/设置线参数lineInfo.linstyID = 21;lineInfo.libID = 4;lineInfo.xscale = 20;lineInfo.yscale = 20;/绘图IXDisplay display = this.axMapXView1.Display;/绘图对象display.DispLine(ptGeom as IGeoLine, line

4、Info as mcLinInfo, 6);/根据线参数显示对应的线display.DisplayOption.SymbolShow = true;/开启还原显示功能display.DispLine(varLine, lineInfo as mcLinInfo, 0);/重绘制线2、在查看地图的过程中,常要通过不同比率显示地图,如何通过代码实现按照一定的显示比率显示地图的功能?答:步骤如下:(1)用户常常将显示比率与比例尺相混淆,比例尺一般应用于地图数据打印输出时,表示图上距离与实际距离的比值。而显示比率通常是指基于某一显示设备显示地图的逻辑范围与显示设置的分辨率的关系,实现的效果则是根据用户

5、输入的显示比率来放大或缩小地图,显示效果如下:图1 1:10000显示比率显示效果图2 1:250000显示比率显示效果(2)显示比率近似值计算公式a显示比率=当前逻辑范围/设备范围;b当前比例尺=设备范围(毫米值)/实际的显示范围(毫米值);c设备范围的值是根据96像素/英寸,1英寸=25.4毫米来计算。(3)以C/S模式,COM组件式开发C#语言为例,部分实现代码如下:/当前比例尺public string scalejs() /设备范围 double sbfw = gisOper.AxMapView1.Width;/gisOper为workSpace对象sbfw = (sbfw / 96

6、) * 25.4 /这里显示器设置为96像素,以实际值为主 /实际显示范围IXDisplay display = null;display = gisOper.AxMapView1.Display;mcRectrect = display.Transformation.DispRect;doublesjfw = rect.xmax - rect.xmin;sjfw = (sjfw * Math.PT * 6371000000) /180; /取地球的平均半径,得到近似的实际距离 /当前比例尺int x = Convert.ToInt32(sjfw/sbfw);srtingscaledq = &

7、quot;1 : " + Convert.ToString(x);/得到当前比例尺3、在进行符号库操作时,添加符号成功,但看不到效果,应该如何解决?答:在进行符号库设置的过程中,需要注意以下几点:(1)坐标值是像素乘以5000,比如dot.x = 0.2*5000;(2)符号数据长度必须设为80,mcSymbolHead.DataLen = 80;(3)以C/S模式,COM组件式开发,C#语言为例,实现代码如下:mcMapSymbolLibClassmcLibClass = new mcMapSymbolLibClass();/符号库类intnnnn = mcLibClass.get

8、_BaseNum(meSymbolType.mePntSymbol);/设置点符号intnSymCount = mcLibClass.SymbolNum;mcMapSymbolmcSymbol = new mcMapSymbol();/符号对象mcSymbolHeadm_symHead = new mcSymbolHead();m_symHead.symbolType = meUnitSymbolType.meVectPoint;/设置符号类型为矢量点m_symHead.ItemNum = 1;m_symHead.SymbolName = "test113"m_symHea

9、d.DeleteFlag = false;/设置坐标值m_symHead.OrgX = 5000;m_symHead.OrgY = 5000;/注意1m_symHead.DataLen = 80;mcDots dots = new mcDots();mcDot dot = new mcDot();/这里需要使用设备坐标,三个点dot.x = 0;dot.y = 0;dots.Add(dot);dot.x = 5000;dot.y = 5000;dots.Add(dot);dot.x = 10000;dot.y = 5000;dots.Add(dot);dot.x = 0;dot.y = 0;d

10、ots.Add(dot);mcSymbolItemClassmcSymItem = new mcSymbolItemClass();/符号图元对象mcSymItem.ItemType = meSymbolItemType.mePolygon;/填充区/填充区参数mcSymItem.InterColor = 1;mcSymItem.OuterColor = 1;mcSymItem.DateLen = 4;mcSymItem.OuterPen = 1;mcSymItem.SInterPenWidth = 1;mcSymItem.CirNum = 1;/注意2,顺序m_symHead.SymbolN

11、o= mcLibClass.get_BaseNum(meSymbolType.mePntSymbol) + 1;mcSymbol.SymbolHead = m_symHead;intrtn = mcSymbol.AppendItem(mcSymItem, dots, "");intnAddFlag = mcLibClass.AppendSymbol(mcSymbol);nSymCount = mcLibClass.SymbolNum;/注意3mcLibClass.WriteSymbol(mcSymbol);/更新符号库mcLibClass.SaveLib();4、如何实现图

12、层透明显示?答:以COM组件式开发C#语言为例,有两种实现方法,如下:(1)方法一:mcSFeatureLayer.SetProperty提供(MapGISK9新增加接口),m_regLayer.SetProperty("TRANSPARENT", 50); (2)方法二:mcSFeatureLayer提供了对区图层透明显示和填充模式的设置:设置区填充显示方式0/1/2,只填充区/只绘制边线/填充区并绘制边线,代码如下:Sub SetRegFillDispMode(ByVal mode As Integer, linf As mc_basObj7Lib.ILinInfo)m

13、apXBase.mcSFeatureLayer的成员设置显示透明度,代码如下:Sub SetTransparent(ByVal per As Integer)mapXBase.mcSFeatureLayer的成员5、MapGIS K9中如何操作属性字段类型为图片的属性值?答:步骤如下:(1)在K9中属性字段类型为图片类型的字段,字段内容是图片的绝对路径,可以对其进行操作,但中间必须有解码的过程。(2)以C/S模式,COM组件式开发,C#语言为例,实现过程如下:mcGDBServersvr = new mcGDBServer();svr.Connect("MapGISlocal&quo

14、t;, "", "");/连接数据源mcGDataBasegdb=svr.get_gdb("sample");/打开数据库mcSFeatureClssfcls=gdb.get_XClass(meXClsType.meXSFCls) as mcSFeatureCls; sfcls.Open("Ku6_1.wl", 0);/打开简单要素类/查询OID为1的要素的信息mcObjectID id=new mcObjectID();id.Int=1;mcRecordrcd = null;sfcls.GetAtt(id, ou

15、t rcd);objectob;/获取名称为“aaa”的要素信息,该属性为图片类型rcd.GetFldVal("aaa", out ob);byte bt = System.Text.Encoding.Unicode.GetBytes(string)ob);/转化成二进制字节string str = System.Text.Encoding.ASCII.GetString(bt);/转化成StringImage img = Image.FromFile(str);/输出图片6、MapGIS IGServer中包含哪些数据组织形式?答:MapGIS IGServer采用“纵向

16、多级,横向网络”方式管理海量多源异构数据。IGServer平台通过发布数据服务实现数据资源的应用与共享,支持二维、三维数据。二维数据组织形式包括矢量数据和瓦片数据两种基本方式,其中矢量数据又包含矢量地图文档、矢量图层两种类型。矢量图层概述:矢量图层亦即存储在本地文件(*.HDF)或者网络数据源中的地理数据,按照地理数据的几何约束类型可以分为点、线、面这三种,相对于地理数据库而言,可以简单地理解为三种类型简单要素类。在同一地理数据库中,矢量图层具有名称唯一性,即可以通过矢量图层的名称来唯一确定一个矢量数据。矢量地图文档概述:矢量地图文档亦即复合文档,它采用了复合结构,其文件内部逻辑结构类似文件系

17、统的管理结构。它是地图的一种数据的综合表现和管理形式,存储了组成地图的各种制图元素,包括标题、指北针、图例、比例尺、布局、数据窗体、图层等。矢量地图文档的地图(Map),主要作用是集中的管理这些独立的图层,为用户归纳、综合分析地理数据等提供手段。而图层只是作为地理数据的一种引用,亦即对矢量图层的引用,指向位于本地或者网络数据库中的地理数据集,并不是在物理上存储地理数据,以*.Map的形式存在。瓦片数据概述:为了提高互联网电子地图的响应速度,改善大数据量地图的浏览效果及流畅度,地图瓦片应运而生。将一定范围内的地图进行纵向和横向分幅,根据不同的等级,按照指定的尺寸和指定格式进行切割,得到若干行和列

18、的矩形图片库,这些矩形地图切片就称之为地图瓦片。这些切割而成的若干行和列的地图瓦片库呈现正金字塔形的数据结构,在IGServer中将其存储到一个临时的*.HDF文件中,这个存储瓦片库的HDF文件和前面提及的存储本地数据源的地理数据库的HDF文件没有任何关系。在IGServer中,瓦片数据的生成有两种方式:预生成和实时动态生成。预生成实际上就是根据用户需求(级数和范围),通过工具一次性生成所有的瓦片,并存储到HDF文件中。该HDF文件可以存储到服务器上或者本地,在需要显示应用的时候,根据用户请求的瓦片的级数及行列号,从HDF中检索出瓦片并实现自动拼接。实时动态生成方式,则会在本地生成临时的HDF文件用来存储瓦片库数据,根据用户请求瓦片的级数及行列号,首先检索这个临时的瓦片库,如果该瓦片存在就直接读取,如果瓦片不存在,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论