SuperMap iObject常见问题解答集锦(三)

组件GIS 专栏收录该内容
115 篇文章 17 订阅

作者:皇皇

问:如何在程序运行前检查super Objects的安装版本
答:通过SuperMap Objects控件的AboutBox,判断Objects的版本。

问:1、Oracle数据集设置可编辑,不能编辑系统崩溃,报错:" ORA-12899: 列 “NVSGIS”.“DISTRICT_C_T”.“NAME” 的值太大 (实际值: 23, 最大值: 20)"; 2、复制SDB数据到Oracle数据源不成功,报错:“ORA-01455: 转换列溢出整数数据类型”
答:问题1和2主要是因为Oracle客户端和服务器的字符集不一致造成。
问题1是因为Oracle11.1G的BUG造成的,升级到11.2或者降级到10.2.3就没有这个问题。

问:如何查找一定范围的栅格极值?
答:可以在地图上画多边形时,就新建一内存数据源,然后用这个多边形去裁剪栅格数据形成新的栅格数据集,再用CalExtrem方法计算极值。

问:如何判断跟踪层上的对象是否和数据集中的是一个?
答:在添加对象AddEvent时就可以把ID添加到Tag里,然后取出来和数据集中的对象作判断就可以了

问:数据集删除后系统退出时报错
答:不是删除的问题,是变量释放的问题,出现这种问题请先清查代码,将所有未释放的变量都正确释放掉

问:soDataset a ;soDatasetVector b = a as soDatasetVector;这个a和b都要释放吗,关闭数据集时都需要关闭吗?
答:都要释放,但关闭数据集时不需要关闭

问:用的是sdb数据源,smw工作空间,当添加到200多个图层时就添加不进去了,为什么?
答:这个是DAO的限制,如果换成数据库型的数据源就可以了

问:如何让跟踪层上的文本对象随图缩放
答:将跟踪层上的soTextStyle.FixedSize属性设置成false即可

问:为什么在用日期型字段与当前日期GetDate()相减做单值专题图时无效
答:获得当前日期要用CURRENT_TIMESTAMP,而且需要做成范围专题图,不能做单值专图题

问:如何添加一个三角形的面对象
答:三角形面对象是由四个点构成(面为闭合对象,第一个节点与最后一个节点重合),可以构建一个面对象,通过面对象的AddPart方法传入点串(四个点构成的点串),

问:删除字段失败
答:可能原因如下:1.若字段所在数据集已添加至地图窗口显示,请移除对应图层;2.该字段所在数据集已作为一个关联表与一图层进行关联显示,请先移除关联信息。

问:栅格数据集投影转换无效
答:数据源右键菜单中投影转换仅对矢量数据集有效,若对栅格数据集进行投影转换,通过数据处理——投影变换——数据集投影转换处理即可。在2008系列版本中,投影转换完成后,请确定数据源坐标系与栅格数据结果坐标系一致。若数据源坐标系不一致,请通过数据源右键菜单中属性——数据源投影窗口设置数据源坐标系。

问:关联表做统计专题图,怎么关联?
答:首先用soRelQueryTableInfos 对象设置好关联表,然后用soQueryDef 的RelTables 属性设置好,再用soLayer 的 DisplayFilterEx 属性设置好查询定义对象。再按照一般的步骤制作统计图就可以了。

问:单值专题图无效果
答:可能存在如下原因:1.单值专题图依赖的字段表达式中字段被删除;2.单值专题图通过关联表实现,但关联表已被删除或不存在。

问:经纬度数据范围查询,使用经纬度数据范围查询,结果记录太多包括了所有,怎么办?
答:如果使用的是QueryByDistance方法,这个方法做查询时距离的单位实际是度不是米,所以会查到很多条记录。建议使用QueryByDistanceEx,经纬度数据,可直接指定公里或米等进行直接查询,不需要进行投影转换。

问:怎么让SuperMap控件充满整个窗体
答:使用Dock属性设置为Fill模式

问:地图窗体不可见
答:可能存在如下两种情况:1.地图控件的可见性(Visible)被设置为False;2.地图控件所在Panel或其它容器可见性(Visible)被设置为False。

问:没有买空间分析组件,点提取等值线,这个可以做吗?
答:用SuperMap库中的soGridAnalyst对象的Point2DToGrid方法和Contour方法。

问:想求出栅格数据的平均值,有什么好的方法
答:使用soDatasetRaster对象的GetHistogram方法返回soHistogram 对象, 然后用 soHistogram 对象的Mean 方法即可统计栅格平均值。

问:在Windows 7上使用需要注意什么?
答:在Windows 7下需要注意以下几点:
1、将用户账户控制(UAC)设置为最低,在控制面板的用户账户里面;
2、一切操作都要以管理员身份运行与操作;
3、特别是配置许可时,要以管理员身份运行许可配置管理工具

问:滚轮中键怎么禁用
答:设置MiddleButtonEnable = False

问:导入shape想让直接追加到已有数据集上去,不想生成新的数据集
答:正常导入,将记录取出追加,然后删除生成的数据集。

问:已知道两个图层:管线(线对象)、道路图层(线对象)。现在在界面中输入一个点,求该点到附近管道最佳道路的路由。请教方案
答:Objects中网络分析的最近设施查找这个接口(ClosestFacilityEx2)是最接近这需求的。不过要做一些数据上的处理。这个接口的参数要求一个事件点(就是您在地图上点的那个点),很多个设施点,这个些设施点要用道路线和管线来构建(可以求出交点,在Deskpro中先用两个线数据集构建网络,然后将节点单独提取成一个点集)。这样用ClosestFacilityEx2接口就可以求出距离这个事件点最近的那个设施点,和结果路由线了。

问:想在地图上拉一个框,然后输出框内地图为图片
答:可以通过TrackedGeometry获取到拉的这个框,然后用OutPutMapToBMP方法。

问:同一个点图层,代表了不同等级的行政单位,想要让不同等级的行政单位标签字体大小不同
答:同一图层是没有办法区别标签的,需要分开多个图层分别做不同风格的标签。或者将这个数据集复制三份,然后过滤显示标签。

问:想实现用鼠标点击两条道路线然后判断他们是否相交,并且求出交点
答:如果判断两条线是否相交,可以用soSpatialRelation.Intersects方法 如果想求两条线的交点,可以用soSpatialOperator.Intersection方法

问:最近设施查找中,如何获取到找到的设施点的坐标和名称?
答:可以通过最近设施查找结果信息里面的ResultNodeIDs ,即结果路线经过的结点ID ,获取查找到的设施点的结点ID,然后通过设施点数据集的Recordset的GetFieldValue来取它的的坐标和字段名称即可。

问:SuperMap Objects所有范例程序里的exe可执行文件在中64位系统环境下无法运行,如何解决?
答:因为Objects里面的范例程序都是在32为环境下以AnyCPU的方式编译,既默认为当前CPU的位长运行。故在64为系统下无法兼容,用VS打开,重新编译即可解决。

问:如何做到图层控件SuperLegend 点右键时只显示可显示,可编辑,可删除,移除图层其他的不显示?
答:SuperLegend只有一个PopupMenu 方法,用来返回/设置在图例控件上是否弹出右键快捷菜单。如果你想实现上述能能,建议你直接禁用掉PopupMenu ,自己写一个右键菜单。

问:deskrop中无法绘制新的点:一张完整的地图中,想对一个点数据集增加几个点,选中之图层可编辑后但还是增加不上,如何解决?
答:可能的原因:1、检查图层是否开启“可编辑”,如果是跨图层编辑,要开启“跨图层编辑”。
2、检查你的点数据集里面是否有文本型字段,如果文本字段设置为必填字段,请检查其默认值是否为空,如果为空,就无法绘制新的点。

问:如何精确的打断线?
答:首先,通过soGeoLine.ResampleEquidistantly方法按一定的距离把原始的线对象重采样成几段,获取这个新线对象的点串。
其次,通过soGeoLine.Split/SplitEx方法,逐点的打断原始的线对象,然后通过soRecordset.setGeometry方法用打断的第一个线对象更新原始对象,其余打断的线对象用soRecordset.AddNew方法添加的数据集中。

问:问:安装Objects时失败,报错不能注册OLE组件,怎么解决?
答:答:建议先将Objects卸载干净后重新安装。如果问题未解决,可考虑拷贝别的正常安装的机器中bin目录覆盖使用。

问:问:创建了内存数据源之后,内存数据源中的对象需要释放吗?
答:答:内存数据源中定义的对象使用方法和文件型、数据库型数据源都是一样的,需要用完之后就释放。

问:问:如何实现用鼠标点击两条道路线,然后判断它们是否相交,并且求出交点?
答:答:判断两条线是否相交,用soSpatialRelation.Intersects方法;求两条线的交点,用soSpatialOperator.Intersection方法。

问:问:如何在地图上拉一个框,然后输出框内地图为图片?
答:答:首先通过TrackedGeometry获取到拉框矩形范围,然后将此范围传递给OutPutMapToBMP方法。

问:同一个点图层中,包含了不同等级的行政单位,想要让不同等级的行政单位标签字体大小不同,如何解决?
答:答:同一图层中不能分等级显示标签。解决办法:(1)分开多个图层分别做不同风格的标签;(2)将这个数据集复制三份,然后过滤显示标签。

问:Objects中,使用AddNew方法添加对象失败。此问题出现的一般情况及解决办法
答:(1) 文件型数据源以只读形式打开即opendatasource方法bReadOnly参数设置为True了;
解决方法:设置bReadOnly=False。
(2)数据集投影信息为经纬度,添加对象的坐标超出正负180,正负90的界限;
解决方法:注意添加对象的坐标是否和当前数据集的投影信息是一致。
(3)数据集类型和对象类型不一致。例如将点添加到线数据集中,将扇面对象添加到面数据集中。
解决方法:添加对象和数据集类型对应;将CAD对象(例如soGeoPie)转换为线或者面之后再添加,或者直接添加到CAD数据集中。
(4) 文件型数据源大小已到2GB临界值,不能再增加对象。
解决方法:紧缩此数据源去除冗余信息;新建数据源再添加。
(5)记录集获取错误,可重新获取并AddNew。

问:SQL Server数据源中做标签专题图,表达式为两个字段相加,如果有一个字段为空则整个标签都显示不出来。
答:在表达式中对为空的字段用isnull()函数,例如可以把表达式写成isnull(SMDTV_123.aaa,’’) + isnull(SMDTV_123.bbb,’’)。

问:安装Objects 6时报“1628”的安装错误,Objects不能正常安装,有何解决的办法?
答:在:系统盘\Program Files文件夹中有个隐藏的文件夹InstallShield Installation Information(例如C:\Program Files\InstallShield Installation Information),此文件夹中存放的是程序的安装信息,按照安装Objects的时间找到其对应的文件夹并把此文件夹删掉,重现安装Objects6即可。
注意:删除掉的一定要是Objects对应的文件夹,可通过运行其中的setup.exe确定,如果误删,可能会导致其他对应的程序卸载不掉或其他问题。

问:Objects中有什么方法可以快速的将属性字段转为文本数据集?
答:soDataSource.LabelToText方法可以将属性字段转为文本数据集。

问:如何去掉地图窗口的快捷键操作?
答:SuperMap.HotKeyEnabled,控制地图窗口是否支持热键。这个属性属于地图窗口的操作,因此在地图窗口打开时操作即可。

问:没有购买空间分析组件,想根据点提取等值线,可以做吗?
答:用SuperMap库中的soGridAnalyst对象的Point2DToGrid方法和Contour方法。但需要注意:SuperMap库中的分析方法是SuperMap早期版本提供的方法,在使用上有一定的局限性。

问:电信矢量3D数据能用Objects导入吗?
答:可以的。设置导入文件类型为scfBUILDINGVEC,文件名设置为index文件的路径,并设置好导入后数据集名称,就可以成功导入了。

问:想在源数据集上进行擦除操作,不想生成新的数据集,用Erase方式实现不了?
答:Erase方法会生成新的数据集,应该使用EraseOnDataset方法。

问:如何获取地图中选中对象对应的图层名称?
答:soSelection.Dataset可以返回选择集中选中对应的数据集。因为图层的名称是“数据集名称@数据源别名”的构成方式,所以使用soDataset.Name返回数据集的名称,再和数据源别名构建即可。

问:如何为SuperMap控件或SuperGridView控件设置右键快捷菜单?
答:可以将SuperMap控件或SuperGridView控件放到Panel上,然后将右键菜单设置到Panel上,这样即可实现该功能。

问:Objects中修改对象风格的方法。
答:(1)solayer.style修改点、线、面图层风格,图层上所有对象都为sostyle中设置的风格。
(2)CAD图层上对象,每个对象可有单独的风格,通过soGeometry.style设置。例如点对象sogeopoint,设置sogeopoint.style。
(3)文本风格通过soTextstyle设置。
(4)同一图层上,不同对象使用不同的风格表示,设置专题图。例如单值专题图soThemeUnique。

问:想在源数据集上进行擦除操作,不想生成新的数据集,用Erase方法不能满足要求。
答:用EraseOnDataset 方法。

问:怎么求栅格数据的平均值?
答:使用soDatasetRaster对象的GetHistogram方法返回soHistogram 对象, 然后用 soHistogram 对象的Mean 方法即可统计栅格平均值。

问:用VS开发时怎么让SuperMap控件充满整个窗体?
答:将Dock属性设置为Fill即可。

问:SuperAnalyst.NetworkAnalyst.ClosestFacility方法的返回值是soGeoLineM,那么这个soGeoLineM代表的是一条路由还是所有路由总长?
答:ClosestFacility方法返回的是最优的结果路由线,建议使用ClosestFacilityEx方法。

问:在SuperWkspManager控件中,如何实现用右键选中某个树节点?
答:可以在控件的MouseDownEvent中写如下代码来实现:
soTreeNode objNode = axSuperWkspManager.get_TreeView(1).GetNodeAt(e.x,e.y);
axSuperWkspManager.get_TreeView(1).SelectedNode = objNode。

问:在进行地图刷新操作时,如何只刷新地图中的正在操作的图层,而其他图层不被刷新?
答:有两种方法可供参考:(1)地图窗口只保留正在操作的图层,其他图层都设置为不可见;(2)使用soLayer.UseCache属性,设置其为true,但是该方法适用于当前操作图层为可编辑状态,并且此可编辑图层位于所有图层的最上面,刷新时只刷新当前操作图层而不刷新其他图层。

问:在布局中,如何对地图的旋转角度进行控制?
答:SuperMap Object 6中,对布局中的地图对象,新增属性RotationOptions,可以通过该对象来控制布局上地图元素的旋转角度及符号、文字是否随图缩放。

问:SuperWorkspace.ReadystateChange() 事件,在什么情况下使用?
答:此事件是借用微软的接口,不建议使用。在工作空间当前状态发生变化时,建议用SuperWorkspace.Modified属性判断。

问:在32位系统上用VS 和 SuperMap Objects开发一个WinForm工程,将Release拿到64位系统上运行但没有任何反应,这是什么原因?
答:32位和64位系统中VS编译环境的默认设置是有一定区别的。此问题的解决办法:在64系统中重新编译工程,并在编译时将目标平台设置为x86。

问:SuperMap中,框选对象是否被选中的方式是否能够改变?
答:SuperMap.SelectMode2属性中,可设置框选对象的选中方式:①对象质心在选择范围内即被选中;②对象与选择范围面积相交即被选中;③对象完全在选择范围内即被选中。

问:使用C# 语言开发,调用颜色选择对话框并需要返回用户选择的颜色值,该调用SuperMap中的哪个方法?
答:在C#语言中,需要调用SuperMap.ShowColorPicker2方法实现上述需求。

问:如何求得两个相邻面的公共边?
答:先将面转成线,再使用soSpatialOpertor.Intersection方法求得公共边。

问:使用Buffer2方法求一连串闭合线段的外缓冲区,对两线交接处缓冲区会有缺口的问题该如何解决?
答:可先将零散的线融合成为一条线,再将封闭的线转成面,对此面做缓冲区,然后用原始面擦除缓冲生成的面,就可以得到需要的外缓冲区。

问:在使用SuperLegend控件时,默认SuperLegend的所有子项分支都是不展开的。如何展开起分支?
答:若要展开其所有分支,需调用SuperLegend.Expand方法后并不要对图例控件执行刷新,因为SuperLegend.Refresh会使所有的节点再次合并而非展开状态。

问:Delphi开发的工程,在运行版许可下不能运行,显示找不到许可;而c#、c++开发的Objects6.0工程却能正常运行。
答:在开发版许可下打开Delphi开发的Objects6.0工程,按以下两个步骤操作:
【1】在Delphi环境下,重置工程环境,"PROJECT"菜单->"OPTION"项,把最下面的"DEFAULT"项勾上,其他不变,点击确定。然后重编译程序,再尝试EXE文件在运行许可下是否可运行,一般这样配置就能解决问题。
【2】如果第一步设置后还是不行,重新添加控件,然后再重新编译。

问:在栅格数据矩形裁剪时,如何避免出现黑边或白边
答:在栅格数据集进行裁剪的方法soGridAnalyst.ClipEx中,将裁剪矩形设置为第二个参数“objClipRegion(裁剪区域)”后,生成结果会自动将这个裁剪区域设置成栅格数据的掩膜,达到裁剪后去除白边或者黑边的效果,而使用soGridAnalyst.Clip方法达不到此效果。

问:GIS功能和报表结合时,有时需要将指定范围的地图输出为指定大小的图片在报表中展示,能否实现这种类型的地图输出
答:Objects V5.3.5新增 SuperMap.OutputMapToFile2方法,可以将指定范围的地图输出为指定的图片大小,例如输出为512*512大小的bmp。

问:对点插值生成Grid数据,如何统计不同色彩区域的面积或者所占百分比?
答:不同的色彩代表不同特征值,可以使用soConversionOperator.VectorToRaster方法将GRID数据转换为面数据集,再对结果面数据集的特征值字段进行分类统计,进而获得每类特征值的面积总和或百分比。

问:在VC中调用ClosestFacility方法进行最近设施查找时,第一个参数为变体型,该如何构造这种类型的变量呢?
答:示范代码如下:
CsoPoint objEvent;
objEvent.CreateDispatch(“SuperMap.soPoint”);
objEvent.SetX(285.014);
objEvent.SetY(340.4912);
VARIANT var; var.vt = VT_DISPATCH;
var.pdispVal = objEvent;
objGLM = pFrame->objNetAnalyEx.ClosestFacility(COleVariant(var), objPts, 1, TRUE, 0.0 );

问:使用soNetworkAnalystEx.PathEx方法分析,soGeoLineM有返回值,但是objEdgeIDs、objNodeIDs是空值。
答:soNetworkAnalystEx.PathEx的第一个参数必须是soLongArray类型的才能让objEdgeIDs、objNodeIDs有返回值,如果传soPoints类型的值则objEdgeIDs、objNodeIDs返回为空。

问:网络分析时哪些环境参数是必须设置的?
答:以下这些参数是必须要设置的:NetworkDataset,EdgeIDField,NodeIDField,FTWeightField,TFWeightField,Tolerance。

问:如何实现跨网络图层的路径分析?
答:在实现跨城市的路径分析时经常会需要在多个网络数据集上进行,分析的顺序是,首先在全国的小比例尺路网上分析,获得城市间需要走的路,然后再处理两端的位置,以出发点为起点,以城市间道路的起点为终点分析出在城市大比例尺路网上该如何走,同样的方式处理终点的路径。

问:进行路径搜索时起始点和终止点都必须是网络节点吗?
答:起点和终点不是网络节点也可以进行路径搜索。soNetworkAnalyst.FindPathEx、soNetworkAnalystEx.Path和soNetworkAnalystEx.PathEx等方法都可以实现对非网络节点之间进行路径分析。使用的时候要注意对容限的设置,这些方法都需要首先用容限对网络节点进行搜索,找到距离指定起止点最近的网络节点再进行路径分析。

问:使用FindPathEx返回soSelection,如何顺序得到最短路径所经过的道路?
答:可以通过soSelection的Item属性先顺序获得道路的SmID值,然后根据这个值对网络数据集进行Query查询。

问:进行最佳路径分析时,如何设置阻力字段?
答:在soNetworkSetting对象中设置FTWeightField 属性(正向阻力)和TFWeightField 属性(逆向阻力)。

问:在Visual Studio 2003 .NET中加载核心控件时出现下列提示: 无效的基元类型:System.Reflection.Missing。只能使用符合CLS的基元类型。请考虑使用CodeObjectCreateExpress。不知什么原因?
答:在VS 2003 .NET中出现的这个问题是缺少一个微软的hotfix补丁导致的,运行安装这个补丁就可以解决了。

问:地图上的数据在有些比例尺下会不显示,什么原因?
答:数据集在经过大量编辑后,空间索引有可能会不完整,对显示有问题的图层对应的数据集进行“重建空间索引”的操作。

问:如何在程序中获取SuperMap Objects的出错信息?
答:使用soError对象可以跟踪SuperMap Objects的大部分异常信息,它可以辅助调试程序,找到程序出现异常时的内部原因。soError的用法是在可能出现异常的代码前面创建一个soError对象,然后在可能出现异常的代码后面调用soError.LastErrorMsg来获取错误信息。通常来说,用soError跟踪出来的错误信息主要是帮助分析代码失败的原因。

问:PB中当地图操作(比如画点或选择)未执行完毕时退出程序会异常关闭,如何解决?
答:在程序退出之前设置SuperMap.Action = 0结束上次的编辑状态并重新初始化可以解决问题。

问:在程序运行的过程中出现“未将对象引用设置到对象的实例”的错误是什么原因?
答:出现这样的错误一般是,当使用一个值为Null的对象去调用其方法或属性的时候。可以在程序中设置断点,找到这个变量,给其正确赋值就可以了。

问:SuperMap Objects如何管理大数据量的矢量数据?当图幅和图层很多的时候,怎样提高打开和显示的速度?
答:数据源中的数据集个数与每个数据集大小有动态平衡的问题。由于每个数据集要消耗一些额定的资源来管理空间索引、数据集信息等,所以数据集个数不易过多。如果图幅过多,建议合并图幅,如果使用SDB数据引擎,建议每个SDB数据源中数据集个数不超过100个,30~50个比较合适。如果还有更多的图幅,比如数百幅甚至上千幅,建议使用空间数据库引擎,使用SQL Server或者Oracle来管理空间数据和属性数据。 配置地图时有一个重要的技巧,使用Layer的VisibleScaleMax和VisibleScaleMin来控制图层的可见比例范围,这样在提高显示速度上效果很好。

问:使用soRecordset是否有优化技巧?
答:有两个主要技巧:(一)添加记录时,首先需要从数据集中查询获得一个记录集,这时可以使用“-1>0”条件查询一个空记录集,然后使用AddNew方法添加记录,这里查询几乎不需要损耗任何性能;(二)用完的记录集就关闭,调用soRecorset.Close方法,释放资源。

问:数据源和工作空间总的数据量不大(几百兆左右),为什么地图显示很慢呢?
答:请从以下几个方面对数据进行一些优化:(一)对数据集重建空间索引。数据经过一段时间的编辑,空间索引有可能会不完整,重建会提高检索效率;(二)对图层设置合适的可见比例范围,合理设置可见比例范围,不仅对提高显示效率有帮助,更有助于提高地图的美观度,是推荐的好办法;(三)检查是否有没用的数据集。为了减少额外的资源消耗,尽量不要把无关的数据集放到数据源中去;(四)对经过了大量修改的数据源进行紧缩。

问:C++Builder的程序,Debug编译的时候不报错,但是Release编译的时候报告c++error:must take address of memory location的错误。
答:将Disable inline expansions(禁用内联扩展)这个设置勾选上可以解决这个问题。

问:在C#中使用Objects的一些设置颜色的接口,因为类型不一致转换很麻烦,有什么好办法吗?
答:以下提供两段代码,分别实现C#的颜色和SuperMap Objects的颜色之间的相互转换:
private uint ColorToRGB(Color mycolor)
{
uint tempcolor = (uint)(mycolor.R | (mycolor.G << 8) | (mycolor.B << 16));
return tempcolor;
}

private System.Drawing.Color RGBToColor(uint nColorValue)
{
System.Drawing.Color mycolor;
int r,b,g;
r = System.Convert.ToInt32(nColorValue & 255);
g = System.Convert.ToInt32((nColorValue >> 8) & 255);
b = System.Convert.ToInt32((nColorValue >> 16) & 255);

mycolor = System.Drawing.Color.FromArgb(r, g, b);
return mycolor;

}

问:在VS .NET环境中如何动态创建SuperMap控件?
答:AxSuperMap axSuperMap1=new AxSuperMap();
//要使用容器控件来放置Objects控件
pannel.Add(axSueprMap1);
axSuperMap1.属性设置…
可以先在一个工程中拖入SuperMap控件,然后将合适的参数复制到上面的属性设置中。

问:SuperMap Objects在各种开发语言环境下的性能有何区别?
答:SuperMap Objects 是由多个标准的ActiveX控件构成的,因此所有支持ActiveX编程的二次开发语言都可以对SuperMap Objects进行开发。SuperMap Objects可以方便的嵌入到各种流行的可视化高级开发语言环境中进行开发,例如VB、VC++、C#、Delphi、C++Builder、PowerBuilder等。采用不同语言的开发出的系统对图形的处理性能相差不大,因为对图形部分的操作都是由控件来处理的,与使用的二次开发语言基本无关。当然这个性能还受到该语言对ActiveX控件的支持程度的影响。系统其余部分的性能则与语言关系比较密切,不同语言编译的程序执行效率有差异。用户可以根据实际需要,采用自己熟悉的语言进行开发,目前使用较多的语言为VB、VC++和Delphi。此外,SuperMap Objects还支持.NET框架,可以在VB.NETVC.NET、C#.NET等.NET语言下使用。

问:AxSuperMapLib和SuperMapLib的区别是什么?
答:AxSuperMapLib是COM ActiveX控件的.NET包装类。SuperMapLib是COM类型库的.NET包装类。可以理解为,一个是控件类(带有AX的),另一个是接口类(不带AX的)。

问:在关闭工作空间前应该注意做好哪些工作?
答:(一)使用SuperWorkspace.Save(As)方法保存工作空间。注意,对地图和布局的修改还要先保存地图SuperMap.SaveMap(As)和保存布局SuperLayout.SaveLayout(As);(二)释放全局变量;(三)调用SuperMap.Close方法关闭地图;(四)断开与工作空间的连接,对于所有通过Connect方法和工作空间建立了连接的SuperMap Objects其它控件都需要调用相应的Disconnect方法断开和工作空间的连接;(五)关闭工作空间SuperWorkspace.Close()。

问:SuperMap Objects如何有效地组织和管理海量数据?
答:合理组织海量数据会大大提高空间数据浏览和查询的效率。合理组织数据主要有两个方面:一是合理分层,一是适当分区,把握好数据集的个数和数据集中记录集的个数之间的平衡。合理分层是将图幅按照专题要素分成不同的图层进行管理,便于进行各要素的分析。如果将每一个图幅进行同样的分层,而不进行不同图幅相关图层的合并,将会导致数据集和图层的数量过多。如果将多个图幅的相应图层都合并成一层,则会导致一个数据集或者图层中记录数过多的情况,也会导致效率较低。因此,应根据图幅的实际数据量的大小来进行合理组织数据。通常,SuperMap Objects的一个地图的图层最好不超过100个,一个数据集的记录数通常不超过几万条,一个SQL Server数据源中的数据集中的记录数不超过几十万条,一个Oracle数据源中的数据集记录数不超过百万条记录。

问:SuperMap Objects上可以接数字化仪吗?请介绍一下SuperMap Objects的纸图矢量化思路。
答:SuperMap Objects不提供数字化仪接口,建议采用屏幕矢量化,使用步骤如下:(一)对图纸进行扫描、处理,使之以bmp或jpg格式保存到计算机里;(二)新建数据源,导入图纸文件;(三)对栅格数据进行配准;(四)对需要矢量化的信息进行分层,创建相应的数据集;(五)将栅格数据和新建的矢量数据在一个地图窗口打开,依据栅格数据使用绘制工具进行绘制。在SuperMap Deskpro上也提供了“半自动跟踪”的功能,可以大大提高矢量化的效率,使用方法请参考Deskpro的联机帮助。

问:什么时候适合使用ECW来压缩影像数据集?如何压缩?
答:ECW是一种基本小波变换的影像压缩技术,具有压缩比大、多分辨率、而且基本上可以达到无损压缩等特点,特别对于极大数据量的影像数据,更能显示出它的优势。因此ECW压缩对大数据量(最好是几百兆以上的原始数据)才能显示出它的优势。对于小数据(十兆以下)可能会适得其反。SuperMap Deskpro的工具菜单中提供了压缩影像的功能。

问:用SuperMap Objects如何构建网络拓扑?
答:SuperMap Objects有一个专门的控件叫做SuperTopo控件。可以用它来进行的拓扑处理包括构建多边形、构建网络拓扑图层、弧段求交、去除冗余点、邻近结点合并、去除重复线、合并假结点、去除悬线、长斜线延伸等。

问:数据集的重建空间索引和三级索引在效果上有区别吗?
答:重建空间索引是普通的R树索引,三级索引是格网索引soDatasetVector.BuildHierarchicalSpatialIndex,根据数据的情况设定格网的大小,也可以根据分区字段来划分格网。

问:SuperMap Objects支持哪些AutoCAD数据格式的转换?
答:SuperMap Objects支持对AutoCAD的DXF、DWG数据格式的转换,支持R13、R14、R15版本以及AutoCAD2.5-2000版本的数据导入,并且既支持合并图层导入,也支持分层转入(把数据按照点、线、面、文本四种类型分层转入)。目前,支持的对象类型有LINE、POINT、ELLIPSE、ARC、TRACE、SOLID、BLOCK、ENDBLK、INSERT、ATTDEF、ATTRIB、SEQEND、POLYLINE、VERTEX、LINE3D、FACE3D、DIMENSION、RAY、XLINE、Lwpline以及CIRCLE、SPLINE、TEXT、LEADER、TOLERANCE、MLINE、MTEXT、Hatch等类型的对象转换。

问:为什么转入Tif格式图像文件有时候会失败?
答:SuperMap Objects目前只支持转入行扫描格式的Tif,暂不支持其它的Tif格式数据。如果现有TIFF影像数据是块扫描格式的话,可以在PhotoShop中把它转成行扫描格式的Tif。

问:现有的文本格式的数据如何转成SuperMap Objects的空间数据格式?
答:对于比较规范的文本数据,建议直接使用SuperMap Deskpro的由文本到数据集的功能来实现,这样可以不用任何编程就批量把文本数据转换成SuperMap Objects格式的数据,文本格式要求可以参考Deskpro的联机帮助。如果编程实现的话,要自己解析文本数据的格式,通过构建soGeoPoint、soGeoLine、soGeoRegion等类型的对象来表达文本数据的内容,然后创建数据集来保存这些空间对象。

问:如何保证转入DWG、DGN、DXF等CAD文件时线型的正确性?
答:通过风格对照表来实现,先做好一个风格对照表,风格对照表的格式可以参考联机帮助,转入数据时通过设置soImportParams.StyleMappingTableFile接口来指定风格对照表文件就可以了。

问:打开SuperMap输出的DXF文件发现里面的文字都是乱码,如何解决?
答:这是因为AutoCAD中文本的字体设置不对。解决的办法是选中乱码的文本对象,然后使用【格式/字体样式】菜单,在弹出的对话框中把字体改为中文字体,如“宋体”即可。

问:SuperMap Objects是否支持Adobe Illustrator的eps、ai格式?
答:Adobe Illustrator的数据格式是eps、ai,可以先在Illustrator中把这两种数据格式转成DXF,SuperMap Objects可以导入DXF格式。

问:怎样将AutoCAD数据中的Block转换为SuperMap的点数据集?
答:将AutoCAD数据导入时可以选择转换成复合数据集还是简单数据集,如果选择导入生成简单数据集,那原始AutoCAD中的Block对象会转换生成SuperMap的点数据集,Block的Name记录在属性字段中。

问:怎样在Beijing1954、Xi’an80和WGS84坐标系之间进行转换?
答:SuperMap Objects提供了soPJTranslator投影转换对象进行不同投影坐标系进行转换。当需要转换的投影坐标系之间和目标投影坐标系之间采用了不同的大地参照系时需要设置相关的投影转换参数。这些参数视转换时采用的方法不同而需要的参数也不同,如最常用的是简化的莫洛金斯基转换法,需要设置X、Y、Z三方向上的坐标偏移量才能进行正确的转换。这些参数可以通过一些实测的数据根据相应的方法推算出来或者向测绘部门购买。

问:为什么转换数据源投影总是失败?
答:转换数据源投影失败有几个可能的原因。首先要确认要转换投影的数据源中的数据集是否正在被使用,如果正在被使用的话应该先将被使用的数据关闭;其次检查一下原投影方式或目标投影方式是否采用平面坐标系。平面坐标系不能与经纬度坐标系和投影坐标系下做相互转换的工作,一般可以使用IsProjected方法检验是否可以进行数据源投影变换。如果上面两种方式都没有问题的话,那就要检查一下投影转换之前的有关设置是否正确了。

问:投影坐标系的坐标单位和距离单位有何区别?
答:坐标单位是指坐标刻度的单位,距离单位是指在该坐标系下,进行距离量算时的数值单位。坐标单位是soPJCoordSys.CoordUnits,距离单位是soPJCoordSys.DistUnits。投影系统的坐标单位与距离单位(DistUnits)可以相同,也可以不同。例如经纬度坐标下的坐标单位是度,距离单位可以是米、公里等。

问:在SuperMap控件中增加一个点,给出它的经纬度坐标,能自动转换成平面投影坐标吗?
答:可以这样来实现:(一)通过指定的经纬度坐标创建一个点对象;(二)获取数据源的坐标系对象,将点投影转换;(三)将点保存到数据源中去。

问:投影坐标和普通平面坐标有没有什么差别?
答:投影坐标和普通平面坐标都是平面坐标系,简单说,投影坐标系的坐标是有地理含义的,投影坐标与经纬度坐标之间可以相互转换,各种投影坐标之间也可以相互转换,而普通平面坐标没有地理含义,不能进行投影转换。

问:SuperMap GIS数据的坐标系存储在什么地方? 怎么修改?
答:坐标系存储在数据源中,要修改数据源的投影信息,请参考soPJCoordSys对象的使用参考。

问:打包的时候是否需要把许可证管理器一起打包?
答:部署运行环境的时候除了需要安装二次开发的程序外,还需要安装SuperMap Objects的运行版本,这里就包括运行版的库文件和许可。打包有两种比较常用的做法:(1)打包时需要将软件许可配置管理程序(位于操作系统盘\Program Files\Common Files\SuperMap目录)一起打包并安装到相应目录。(2)只打包自己制作的程序部分,然后再通过SuperMap Objects运行版安装SuperMap相关文件。

问:SuperMap Objects 对安装环境有什么要求?
答:在软件安装包的根目录下有readme.txt文件,该文件中详细说明了对安装环境、开发环境的要求。

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

supermapsupport

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值