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

作者:皇皇

问:JAVA组件调用打印机对话框printer.printWithDialog(),报错空值异常,找不到打印机?
答:在.Net组件里直接调用可以弹出打印机对话框,但是在Java组件里,需要先设置打印机名字(实质实例化一个打印机)printer.setPrinterName(“doPDF 8”),再调用printer.printWithDialog()就可弹出打印机对话框。

问:SuperMap iObjects Java 8C中运行Web Project工程,报缺少Wrapj.dll的错误,怎么办?
答:报这个错误有两个原因,可以先将Web工程作为Java工程来运行,如果还报这个错误,则是由于在【系统高级设置】中的没有设置工程中引用jar包所在的java bin路径,设置完后需重启开发平台;如果运行Java工程时没有报错,则说明是Web工程中的tomcat没有设置对应的objects java bin path路径,需要在【Window】-【Preferences】-【Servers】-【Tomcat】-【Paths】中设置bin的path路径和引用的对应的jar包。

问:缓冲区分析用哪个接口实现?如何设置字段为半径?
答:缓冲区分析需要使用BufferAnalyst.CreateBuffer方法, 使用BufferAnalystParameter的LeftDistance和RightDistance属性,接口设置字段为左/右半径。

问:调试工程报错,报“‘未处理BadImageFormatException’•••‘其他信息:未能加载文件或程序集 ‘SuperMap.**** Version =***’ 或者它的某一个依赖项。试图加载格式不正确的程序’”的错误。
答:第一,保证编译目标平台位数和引用动态库位数保持一致
第二,环境变量中只有一个组件bin路径,且与引用动态库路径保持一致
第三,把工程的工作目录和引用路径设置为引用动态库路径
第四,如果以上方案不能解决问题,先运行uninstall.bat,然后在以管理员身份运行install.bat。

问:对象编辑的时候如何实现捕捉功能?
答:通过Mapcontrol的SnapSetting属性设置对应的捕捉功能,SnapSetting类的Item属性设置指定的捕捉功能是否开启。需要注意的是,在跟踪图层中编辑对象时地图中开启的捕捉功能是不起作用的。

问:三维场景中如何实现桌面产品效果中的缩放到本图层?
答:通过Scene.EnsureVisible(Layer3D)实现,EnsureVisible还可以实现根据给定的经纬度范围显示相应区域的场景。

问:可以判断两个三维几何对象是否相交吗?
答:可以,具体接口是:Geometrist3D.HasIntersection(Geometry3D geometry3D,Geometry3D intersectGeometry3D),但是组件版本要求在8.0.0版本之上,需要注意的是:该方法现在只限于判断两个三维体是否相交,或三维线与三维体是否相交。两个三维体相交的判断依据是二者具有公共的体积,三维线必须穿过三维体才构成相交。

问:使用SuperMap iObject .NET 8C如何把原始型缓存转换成紧凑缓存?
答:首先实例化mapCacheFile对象,然后用mapCacheFile.Open打开要转换的缓存文件sci,最后用mapCacheFile.Convert方法进行转换。

问:如何将数据集导出为cad数据集是带扩展字段?
答:需要将ExportSettingDWG导出参数设置类中的ExportingXRecord、ExportingExternalData属性设置为true;

问:如何获取场景中某一位置的高程?
答:有两种方法:(1)如果是已经有对应的经纬度,通过栅格数据利用对应的经纬度信息获得此位置对应的栅格行列数:DatasetGrid.XYToGrid 方法,再通过DatasetGrid.GetValue方法获取对应的栅格值;(2)如果是通过鼠标点获取对应位置的高程值,则直接通过scene.PixelToGlobe(Point point,PixelToGlobeMode mode)获得三维点,三维点的z值即为此点的高程值。

问:iObjects.NET 8C中在三维场景中跟踪层上设置三维线符号库中的风格不起作用,为什么?
答:跟踪图层设置线的风格,如果设置的是三维线型符号,需要把GeoStyle3D.IsMarker3D属性设置为true风格才能生效 。

问:SuperMap iObject .NET 8C开发的程序,当系统的Microsoft.NET Framework插件版本是4.6时不能运行,如何修改?
答:修改程序的.config配置文件,添加节点




问:为什么设置统计专题图IsGraphSizeFixed 属性为false的时候专题图图层有时显示不出来了?
答:统计专题图IsGraphSizeFixed 属性修改时还需要去修改MaxGraphSize属性的值,因为MaxGraphSize是统计专题图中统计符号显示的最大值,当IsGraphSizeFixed()属性值为 true 时,单位为 0.01mm;当IsGraphSizeFixed()属性值为 false 时,使用地图单位。当MaxGraphSize值小于统计符号最小值就会显示不出来,单位不同,相同的数字代表的大小不同,所以要同时修改。

问:在FindVRPPath物流配送方法中,其中配送点DemandPointInfo的StartTime 、EndTime、UnloadTime和车辆VehicleInfo的StartTime 、EndTime具体表示什么意义呢?
答:配送点DemandPointInfo的StartTime 、EndTime、UnloadTime分别表示配送目的点的上班时间、下班时间、卸货所需时间。在上下班时间外的时候不接受送货。车辆VehicleInfo的StartTime 、EndTime同理表示车辆的上下班时间,在改时间段外的时间不进行送货。与实际生活相结合起来。

问:可以实现图层管理器和布局控件里面的地图关联吗?
答:布局中只是存储了地图名称,可以通过名称查询到工作空间里面的地图,将查询到的地图和图层管理器关联起来,每次对图层管理器进行操作就保存一个地图和刷新布局对象,就可实现同样的效果。

问:三维场景中如何为三维线对象设置线宽为0.15的图层线风格
答:Layer3DSettingVector.Style设置线符号,将线符号的宽度设置为1,然后在通过Layer3DSettingVector.SymbolScaleXField和Layer3DSettingVector.SymbolScaleYField属性设置xy方向的缩放比为0.15,即可实现为线对象设置线宽为0.15的图层风格

问:如何创建一个内存数据源来存储临时数据?
答:DatasourceConnectionInfo info = new DatasourceConnectionInfo();
info.EngineType = EngineType.UDB;
info.Server = “:Memory:”;
info.Alias = “Import”;
Datasource datasource = Workspace.Datasources.Create(info);

问:数据集坐标系为地理坐标系,如何简单的获取数据集中线对象的长度(以米为单位)?

答:不能用geoline.Length 属性来获取,这样获取的单位和数据集单位一致。可以通过获取数据集的系统字段SMLENGTH,对应的值即为单位为米的长度值。

问:用SuperMap iObject .NET 8C如何打开符号编辑器修改指定的二维点线面符号?
答:首先得到符号的ID或者名称,获取资源库resources(可通过workspace.Resources),然后获取符号对象symbol(点是resources.MarkerLibrary.FindSymbol(ID),线是resources.LineLibrary.FindSymbol(ID).面是resources.FillLibrary.FindSymbol(ID)),再者用SymbolEditDialog.ShowDialog(symbol, resources)打开编辑器,最后编辑完成后确定即可。

问:SuperMap iObject .NET 8C地图图层风格修改后,图层管理器的样式如何更新?
答:地图图层风格更新后,刷新地图,然后刷新图层管理器指定图层layersControl.LayersTree.RefreshNode(layersControl.LayersTree.FindNode(layer));

问:SuperMap iObjects .NET 8C在跟踪图层添加面对象设置半透明填充符号不起作用。
答:面要用三维对象,设置geoStyle3D.AltitudeMode高度模式为非贴地,设置面的前景色geoStyle3D.FillForeColor = Color.FromArgb(50, Color.Red),不要用填充符号。

问:打开两个SceneControl窗口进行可视域分析,为什么Viewshed3D.Clear()清除后场景中还有残余?
答:清除前先捕捉场景sceneControl1.Focus(),然后再清除Viewshed3D.Clear(),最后释放Viewshed3D.Dispose()。

问:SuperMap iObject .NET 8C布局打印的方法是什么?
答:保证电脑已连接打印机,并正确安装打印机驱动。在布局对象中获取Printer(mapLayout.Printer),设置纸张大小PaperSize、打印朝向Orientation等属性,然后printer.ShowPrintDialog(),弹出窗口选择打印机进行打印,或者设置打印机printer.PrinterName=“打印机名称”,直接进行打印printer.Print()。

问:SuperMap iObject .Net 8C 布局元素修改后如何更新?
答:先用元素的ID通过MapLayout.Elements.SeekID(ID)方法把当前布局元素指针,定位于该布局元素,然后用MapLayout.Elements.SetGeometry()方法进行替换,最后保存布局保存工作空间。

问:使用Interpolator类的Interpolate方法对数据进行插值时如何显示插值的进度?
答:使用GridAnalystSetting.IsShowProgress 属性, 可设置是否显示进度条。

问:怎样设置使面数据集对应的图层风格只显示出边线而没有填充?
答:设置LayerSettingVector的Style属性,将FillSymbolID设置为1即可。

问:在使用SuperMap iObjects.NET 8C进行栅格数据集镶嵌时,如何判断融合操作已经完成呢?
答:栅格数据集镶嵌类RasterMosaic的Stepped事件中无结束标志,但是可以通过使用try catch finally来实现,融合完成后会进入finally中,即可得知融合已完成。

问:在跟踪层上如何设置栅格符号随图缩放
答:1、设置对象的geostyle.Markersize=new Size2D(2.5,2.5);
2、Map.TrackingLayer.SymbolScale= Map.Scale;
3、Map.TrackingLayer.IsSymbolScalable=true;

问:导入一个空的shp数据集失败是为什么?
答:7C版本不支持导入空的shp数据集,但是在8C中新增加了一个接口,可实现导入空的shp数据集,将importSettingSHP.IsImportEmptyDataset(设置或获取是否导入空的数据集 )设置为true即可实现。

问:使用SuperMap iObjects .NET 8C时,如何在简单线几何对象和面几何对象中绘制有弧线的边?
答:在向点集合对象加入点集中,需要绘制弧线的边时,构造一个GeoArc对象,然后获取圆弧对象的点集,加入到点集合对象中,然后再继续构造简单几何对象即可。

问:为什么设置场景类型为Flat(Scene.Type=SceneType.Flat),生成的场景还是球面场景?
答:新建平面场景时需要在new sceneControl的时候设置type为NonEarthFlat。

问:SupErMap iObject .NET 8C 三维缓冲区分析结果添加到跟踪图层,为什么显示不出来?
答:通过Geometrist3D.CreateBuffer方法生成的三维缓冲区模型无法添加到跟踪图层和KML图层,要把它添加到模型数据集,在把模型数据集添加到场景图层。

问:自定义专题图Theme3DCustom如何设置在地下,并且地表透明可以看得见?
答:直接设置AltitudeModeExpression属性为2是可以实现地下效果,但是地表透明看不见,可以通过以下方式设置:
Layer3D layer3DOK = sceneControl.Scene.Layers[0];
Layer3DDataset sd = layer3DOK as Layer3DDataset;
Layer3DSettingVector Sytle = sd.AdditionalSetting as Layer3DSettingVector;
GeoStyle3D geoStyle3D = Sytle.Style;
geoStyle3D.AltitudeMode = AltitudeMode.AbsoluteUnderGround;
Sytle.Style = geoStyle3D;
layer3DOK.UpdateData();

问:使用DatasetVector.UpdateField 方法更新文本字段失败?
答:dataset.UpdateField(5, “hahahaha”, “”);更新失败!更新文本字段需要对文本内容添加单引号(即在双引号内再添加一对单引号)即可更新成功。

问:设置FlyManager的飞行路线,飞行时报内存的错误?
答:检查飞行路线是不是有多条飞行路径,在组件里飞行时只允许飞行路径只有一条。设置的接口是FlyManager.Routes.CurrentRouteIndex。

问:如何设置三维图层在场景中的任何高度都可见?
答:设置三维图层的最大可见高度属性Layer3D.MaxVisibleAltitude,一直可见设置为0即可。

问:调用recordset.addNew()方法,总是返回false,新增失败,为什么?
答:可能的原因有:1、数据源只读;
2、获取记录集时用了静态游标;
3、属性字段中有必填字段,却只用了addNew(Geometry geometry) 方法,没有传属性值;
4、经纬度的数据,不在范围内;
5、判断一下数据集类型,再加对象,不能将GeoPoint加到线数据集中等

问:如何获取两调线段的最短距离?
答:通过Geometrist.Distance方法获取,结果的单位和坐标系有关,投影坐标系单位是米,地理坐标系单位度。

问:在场景缓存中,知道模型ID号如何定位到模型位置并高亮显示
答:首先获取缓存图层Layer3D,通过as强转为Layer3DVectorFile,
然后通过Layer3DVectorFile.Selection.Add(“ID”)添加到选择集就可以高亮显示,
再者通过Layer3DVectorFile的GetFieldValueOfSelectedObject(“LONGITUDE”)方法获取X坐标,GetFieldValueOfSelectedObject(“LATITUDE”)获得Y坐标,
最好通过X/Y坐标进行定位。

问:制作关联标签专题图,A、B关联后如何让B的属性字段追加到A属性字段后面
答:在生成专题图后进行显示时,需要设置DisplayFilter属性,否则专题图创建失败
关键代码如下:
QueryParameter parameter = new QueryParameter();
parameter.JoinItems = joins;
layer.DisplayFilter = parameter;

问:往KML图层添加模型,模型是添加进去了,但是为什么在图层管理器上却无法显示KML图层下的模型要素呢?
答:加载模型数据后,必须要刷新一下图层管理器的节点:layersControl1.Layer3DsTree.RefreshNode(layersControl1.Layer3DsTree.Layer3DsNode);

问:在三维场景中如何测量面积?
答:修改状态sceneControl.Action=Action3D.MeasureArea;然后添加添加事件sceneControl.Tracking += new Tracking3DEventHandler(TrackingHandler);在场景中绘制面过程中获取面积Tracking3DEventArgs.TotalArea.

问:如何显示软件的版本信息?
答:使用Workspace.AboutBox 方法 。通过“关于对话框”的超链接与北京超图软件股份有限公司取得联系,也可以查看 SuperMap iObjects .NET 的版本号和版权等信息。

问:添加矢量数据集到场景时提示:This PrjCoordSysType is not supported?
答:请检查数据的坐标系信息,一般是由于数据为平面直角坐标系引起的,需要为数据设置正确的坐标系。

问:使用SuperMap iObjects .NET 7C,运行二维地图工程正常,运行三维场景工程报错外部组件异常,如何解决?
答:检查显卡OpenGL版本,若OpenGL兼容低于OpenGL 1.5,直接升级显卡驱动即可。

问:如何获得多个点对象的外接矩形?
答:可将需要计算范围的点对象单独存储到某个点数据集,然后获取该数据集的范围,即这些点对象的外接矩形。

问:如何获取属性表数据集?
答:获取纯属性表数据集:DatasetVector dsT = Datasets[“纯属性表数据集名称”] as DatasetVector。

问:使用SuperMap iObjects .NET 7C,如何对数据表中的字段值做投影转换?
答:将字段值中的坐标构建为几何对象,然后对几何对象进行投影转换,转换完成后取出结果对象的坐标值,更新到原始字段中。

问:工具箱中的控件无法拖到窗体中。
答:这种情况可能是安装路径中包含有中文导致的,建议改成英文路径,重新注册即可。

问:简单数据集里面的几何对象如何实现,鼠标移动上去样式修改,移开还原?
答:简单数据集里面的几何对象不能单独修改某个的样式。可以通过查询取出鼠标所在位置的几何对象添加到跟踪图层上,再设置样式,移开的时候清空一下跟踪图层。或者复制到CAD复合数据集里面,进行单个几何对象样式设置。

问:修改布局图例title之后没有效果,怎么回事?
答:修改完成之后需要GeoLegend.Load 方法加载设置的内容,再LayoutElements.SetGeometry 方法覆盖原来的几何对象.

问:场景刷新时比较慢,能否优化刷新速度?
答:不需要对整个场景刷新,可单独对图层刷新(Layer3D.UpdateData 方法)。注意:(1)在以下情况需要调用Layer3D.UpdateData方法才能正确渲染更新后的数据:在修改GeoStyle3D的AltitudeMode属性时。(2)当三维数据集图层类对象(Layer3DDataset)中指向的数据集(Layer3DDataset.Dataset)有变动时,不需要调用Layer3D.UpdateData来进行刷新,系统会默认自动完成刷新操作。

问:对一个地图的栅格图层使用ColorTable属性设置颜色表,颜色个数小于32的时候,保存地图。SuperMap.Mapping.Map.ToXML()抛出外部组件异常的错误
答:这是因为颜色值跟默认的高程值的段数32段不对应,应使用ColorDictionary接口进行设置颜色表相关信息。ColorDictionary能够直接设置键值对,能有效方便的进行颜色表设置管理。

问:地图裁剪VectorClip.ClipDatasetVector这个方法是否支持多线程
答: 目前,SuperMap 并行计算支持栅格分析、水文分析、网络分析、拓扑预处理、叠加分析、空间查询分析功能,不支持空间分析模块下VectorClip类的ClipDatasetVector方法。

问:新建SQL数据库型数据源时,是否能选择数据库文件存放的位置?
答:暂时没有提供接口进行数据库文件存放位置的设置,可以通过SuperMap创建数据源后,到SQL Server中分离数据库,拷贝到其他文件目录后,再重新附加到数据库当中。

问:生成缓冲区的时候,半径单位设置的是米(bufferAnalystParam.RadiusUnit = BufferRadiusUnit.Meter),为什么缓冲区结果的半径很大?
答:用new新生成的Geometry几何对象做缓冲区的时候,使用方法BufferAnalystGeometry.CreateBuffer(),在非平面坐标系中必须填第三个参数(坐标系参数)否则缓冲结果半径很大,是以度为单位生成的。

问:添加地图导航控件到MapControl时总是报错,该如何添加?
答:首先构造一个对象:
MapNavigationControl mapNavigationControl1 = new MapNavigationControl();
然后关联MapControl控件:
mapNavigationControl1.MapControl =mapControl1;
最后设置此控件相对于其关联的MapControl控件的位置和锚定方式:
mapNavigationControl1.Location = new Point(0, 0);
mapNavigationControl1.Anchor = (AnchorStyles)(AnchorStyles.Left | AnchorStyles.Top);

问:调试程序时,如何处理弹出以下报错信息的情况:
当前的目标框架“.NETFramework,Version=v4.0,Profile=Client”未包含引用的程序集“SuperMap.UI.Controls”所依赖的“System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。这会导致无法解析引用的程序集。若要解决此问题,请 (1) 更改此项目的目标框架,或者 (2) 从此项目中删除引用的程序集。
答:查看工程的项目属性,检查目标框架是不是为默认的.NET Framework 4 Client Profile ,由于被引用的SuperMap程序集的目标框架是.NET Framework 4,因此需要将该项目的目标框架修改成.NET Framework 4。

问:用组件代码获取面对象面积的时候,得到0.00000056485类似这样很小的值,但在桌面软件中查看,面对象的面积都大于1,是什么原因?
答:这是由于数据是经纬度坐标(如wgs84),并且在组件中是通过GeoRegion.Area获取的面对象面积,面积单位为度,因此获取的面积数值很小。
请改为获取对象对应的系统字段SmArea,通过Recordset.GetFieldValue 方法 (String),根据字段名SmArea获取对象面积。

问:SuperMap 7.1.0 是否可以用VC做开发?
答:可以。7.1.0 C++版组建和.Net、Java版组建不同,没有发布到官方网站。根据客户的需求,售前和研发商量出版本。

问:把iObject .dll拷贝到工程里面,环境变量等都修改了,怎么还是找不到文件?
答:拷贝的时候不要只拷贝用到的
.dll,要把整个Bin包都拷贝进去。

问:为什么SQL查询的结果中没有地理字段信息,进行调试Recordset中的bounds都为0?
答:需要将Parameter参数中的HasGeometry设置True即可。

问:三维场景中,CAD数据集中点对象的栅格符号颜色显示为黑色,请问如何解决?
答:若CAD数据集需要在三维场景中显示,请在设置CAD数据集中点对象的栅格符号风格时,通过GeoStyle.LineColor属性(用于线状符号或点状符号的颜色),将点符号的前景色设置为白色即可。

问:经纬度坐标系计算出的线距离和数据集的单位相同,那怎么求出以米为单位的距离呢?
答:将线转换成点窜Point2Ds,通过方法Geometrist.ComputeGeodesicDistance求出距离,参数椭球体的长轴、椭球体的扁率在坐标系信息里面,可以获得。

问:使用python脚本做影像拼接入库失败是什么愿意?
答:使用python脚本有以下要求:运行的机器必须安装Python2.7;所使用的桌面或组件的bin包中必须包含“smu.pyd”文件;任何路径中不能有中文(包括影像文件名称)。

问:通过代码创建的圆,根据此对象进行空间查询时会提示SpatialQueryObject为null,圆对象存在为何还会报为空的错误呢?
答:空间查询的几何对象推荐是点、线、面这三类,如果是圆对象,请先将该圆通过GeoCircle.ConvertToRegion方法转为面对象后再进行空间查询。

问:网络数据集中Append方法为何失效?
答:网络数据集中不仅包括线数据集还包括节点数据集,故当前不支持网络数据集的Append方法,推荐重新构建网络数据集。

问:怎么获取地图中选中对象的记录集?
答:在MapControl控件中的Map属性中有一个FindSelection的方法,该方法返回一个Selection[]数组,然后用Selection进行访问,再用Selection的ToRecordset的方法获取其属性信息。

问:怎么提取面中心点?
答:首先获得面数据的recordset,然后遍历recordset中每一个对象,用GetGeometry()获得每个对象的集合对象,接着将GetGeometry()获得对象as为GeoRegion,用GeoRegion.Bounds.Center获取对象中心点。

问:在Visual Studio中使用iObjects .NET进行界面设计时,工具箱中的控件全部是灰色处于不可用状态,如何解决?
答:检查程序集目标框架是否为.NET Framework4.0以下,目前iObjects .NET要求程序集目标框架为.NET Framework4.0或以上,修改程序集目标框架即可。

问:如何获取地面上某点的高度,如果有地形数据,是否会受到地形拉伸倍数的影响?
答:可以使用Scene.GetAltitude方法获取地面上某点的海拔高度,不管地形拉伸倍数如何,返回的地形高度永远是实际的地形高度。

问:设置选择集风格不起作用是怎么回事?
答:设置选择集风格有两个关键点:1、Selection .IsDefaultStyleEnabled属性为false,该属性设置是否使用默认选择风格;2、Selection .SetStyleOptions()方法,设置自定义选择集高亮风格是否起作用。

问:Java组件程序运行时报错“Can’t load IA 32-bit .dll on a AMD 64-bit platform”是什么原因?
答:在64位eclipse和64位jdk环境下,需使用64位SuperMap Objects Java,若软件不匹配,会抛出此异常。

问:想将地图背景设成黑色,调用Map.setBackgroundStyle(GeoStyle style)和GeoStyle.setFillBackColor(java.awt.Color value)接口,其中的颜色不管传什么进去,结果地图都显示为淡蓝色。
答:系统默认的填充风格是实填充,应该用GeoStyle.setFillForeColor(java.awt.Color value)接口,设其前景色,否则前景色为系统默认的浅蓝色。背景色接口GeoStyle.setFillBackColor是在设置了有前后景区别的风格时才起作用,比如斜纹填充,此时设前景色为白色,背景色为黑色,可看到黑底白纹。

问:Objects Java支持跨平台,那么Windows上基于Objects Java的程序,能否直接部署到Linux系统上运行?
答:Objects Java针对不同系统平台有不同的开发包。应用想要跨平台运行,需要在Linux系统中,用相应的Objects Java包重新编译工程源代码。

问:windows系统中用java组件写好工程编辑在无界面的linux中运行报错:“java.lang.UnsatisfiedLinkError: /usr/local/supermap-iobeject/Bin/libWrapj.so: /usr/local/supermap-iobject/jre1.6/lib/amd64/libjawt.so: symbol awt_FreeDrawingSurface,version SUNWprivate_1.1 not defined in file libmawt.so with link time reference”。
答:如果用的是32位的iObjects java可以将KaTeX parse error: Expected 'EOF', got '\bin' at position 27: …jects Java_HOME\̲b̲i̲n̲目录下的libmawt.so文…JRE_HOME\lib\i386\headless目录中的libmawt.so文件;
如果用的是64位的iObjects java可以将KaTeX parse error: Expected 'EOF', got '\bin' at position 27: …jects Java_HOME\̲b̲i̲n̲目录下的libmawt.so文…JRE_HOME\lib\amd64\headless目录中的libmawt.so文件。

问:linux使用Objects Java 6R,运行程序,报错:no Base600 in java.library.path
答:两个可能的原因:1、没有设置Objects Java 6R的Bin的路径到环境变量中。2、以root用户拷贝并解压的Objects Java产品包,而以普通用户在eclipse调试程序,普通用户没有Java组件所有路径的访问权限导致报错。

问:SuperMap iObjects Java 6R中地图输出img,png格式正常,输出为pdf失败,怎么办?
答:SuperMap iObjects Java 6R支持地图输出pdf格式的图片,输出失败的原因是没有安装pdf打印机。

问:SuperMap Objects Java 7C中量算几何对象间的距离的结果单位是什么,在地理坐标系下量算怎么使得到的结果单位为米?
答:java组件中量算距离时有两种方法:(1)Geometrist.distance()返回结果的单位和地图的单位一致;(2)Geometrist.computeGeodesicDistance()返回结果的单位是米(即使地图的单位是度)。

问:如何查找在布局中选中的布局对象
答:先通过MapLayout.HitTest 方法 得到布局选择集,然后LayoutSelection.Item 属性 得到对应的id,通过LayoutElements.SeekID 方法 搜索指定 ID 号的布局元素,最后通过LayoutElements.GetGeometry 方法 得到对应的对象即可。

问:mapcontrol.Action = SuperMap.UI.Action.CreatePoint执行代码后action状态还是之前的状态,这是为什么?
答:当需要将地图状态设置为Create类型的时需要保证地图中至少有一个可编辑图层,否则action设置无效。

问:为什么导入数据集后使用ImportResult.GetSucceedDatasetNames(ImportSetting importSetting)获取数据集名称为空?
答:参数ImportSetting 对象必须是通过ImportResult.SucceedSettings 属性获取的 ImportSetting 对象。

问:iMobile for iOS的二维地图工程,工程编译没有错误,运行,设备上却漆黑一片,这是为什么?
答:请确认工程中是否添加是SuperMap.bundle捆绑包,在没有捆绑包的,地图控件会初始化失败,程序无法正常运行。
PS:SuperMap.bundle位于产品包安装目录SuperMap.framework的Resource中。

问:iOS Deployment Target为6.1时编译通过,然后改成7.0时,有一百多个链接错误,类似:
Apple Mach-O Linker Error
std::basic_string 答:修改工程设置:Apple LLVM 5.0 -Language
Compile Sources As : Objective-C++
Apple LLVM 5.0 -Language-C++
C++ Standard Library :libstdc++(GNU C++ standard library)

问:能否控制地图的比例尺,使地图缩小到一定程度就不能继续缩小?
答:在MapControl所属的ViewController类中实现MapParameterChangedDelegate协议,实现scaleChanged方法。将Map的delegate设为ViewCotroller,地图缩放时会触发scaleChanged,在其中判断新的地图比例尺是否小于设定比例尺,如果小于设定值,设置为设定值。

问:怎样获得地图上选中对象所处的图层?
答:地图中每次能选中其中一个图层的对象,因此在长按地图对象高亮显示后,可以通过循环Map.layers,通过[layer getSelection]获取选择集,然后[selection getCount],判断数目大于0,这样既能获得被选中对象所在的层,也可通过选择集获取对应的记录集,进行后续操作。

问:想要获取设备的硬件号,创建了一个Environment的实例,却无法调用getDeviceID方法,怎么破?
答:getDeviceID前标识的是+号,说明这个方法是类方法,直接通过类名调用即可,不需要创建类的实例。调用如:NSString *strDeviceID = [Environment getDeviceID];

问:设置图层选择集风格Selection.Style无效怎么解决。
答:因为选择集的是否使用默认选择风格默认为true,需要将它设置为false就可以了,即selection.IsDefaultStyleEnabled= false

问:SuperMap iMobile for iOS中,使用SuperMap模板创建的工程,如何修改工程引用的SuperMap.framework路径?
答:点击工程,选择Bulid Setting选项卡,在列表中选择Search Paths,修改选项卡中的Framework Search Paths的路径即可。

问:SuperMap iMobile for iOS中如何获取点击屏幕时的地图坐标信息?
答:实现触摸屏幕手势回调函数touchesBegan,然后通过[[touches anyObject] locationInView:self.view]获取屏幕像素坐标CGPoint,最后使用pixelTomap方法将像素坐标CGPoint转为地图坐标Point2D。

问:通过 Mapcontrol.Map.MinScale = 1/10000设置最小比例尺无效,如何解决?
答:需要使用双精度计算,即使用Mapcontrol.Map.MinScale = (double)1 / (double)10000即可;

问:在刷新地图的时候如何使鼠标的光标不要变为漏斗形状。
答:获取或设置当前地图的等待光标无效,即mapControl.IsWaitCursorEnabled = false;

问:用SuperMap iObject .NET 7C开发的时候,如何实现一个3ds模型颜色的变化?
答:3ds模型颜色不能变化,建议在3dMax里面制作两个不同颜色的模型,添加到kml图层,通过控制kml图层里面模型的可见性来实现。

问:SuperMap iObjects.NET 7C知道地图名如何知道对应的地图对象map
答:通过 Map(Workspace workspace)构造一个map,然后通过map.Open(“地图名”)可以得到对应的map。

问:SuperMap iObjects.NET 7中路由对象如何实现缓冲区分析
答:路由对象不能直接进行缓冲区分析,首先调用GeoLineM.ConvertToLine 方法将路由对象转换为二维线几何对象,再调用BufferAnalystGeometry.CreateBuffer方法 (Geometry, BufferAnalystParameter)即可实现缓冲区分析。

问:SuperMap iObjects.NET 7C使用两次addnew方法,添加了两个对象,为什么只添加成功了第一次的。
答:每次addnew之后需要update,不过如果要这样做的话建议批量操作即可实现。

问:在环境变量中设置了64位的JRE,但是在部署Java组件工程时报没有64位的JRE,是什么原因,怎么解决?
答:Java工程中引用的iObjects java jar包用的是7.10版本,不支持1.5版本的JRE,需安装一个高版本的64位的JRE,另外Supermap iObjects Java 7.10及以上版本只支持1.6及以上版本的JRE。

问:SuperMap iObjects Java中能否实现热力分布效果图,如果能,怎么实现?
答:能,在Java组件中叫核密度分析,可以调用DensityAnalyst类来实现热力图制作。

问:如何提升地图浏览的效率
答:1 设置可见比例尺;2 设置用户缓存,创建三级索引;3 生成地图缓存。

问:如何获取GeoLine的点串对象
答:获取组成面对象的点串,可以用GeoLine.Item属性(VB)获取,C#使用[]获取子串。

问:想让画出来的线对象光滑成曲线(拟合),这个闭合的折线代表地震中的烈度图,实际中应当是连续的闭合曲线。
答:Geometrist 中的smooth可以解决.

问:怎么另存地图?
答:三个步骤:1、map.toXML() 2、maps.add() 3、workspace.save()

问:在Objects Java中,是否有可以取到在deskpro中设置的某一个图层的LABLE标签的最大最小比例尺范围的函数?
答:在SuperMap Objects Java中,专题图本身就是一个图层对象,标签专题图也是一样的。在Deskpro中的标签专题图在Objects Java里面就会生成一个标签专题图图层。获取到这个标签专题图图层后,对它设置可见比例尺即可。具体的方法是: Layer . setMaxVisibleScale 和 setMinVisibleScale

问:将道路制成缓冲区,使路名显示在路中间的制图步骤方法?(像Google地图那样)
答:1、对线数据集做标签专题图,设置合适的字体及大小。 2、做线的缓冲区,选择合适的缓冲距离。 3、将第一步骤做的标签专题图转为文本数据集 4、得到最终效果图

问:类型为INT16的字段调用setFieldValue不能直接传入int型数据,只能传入short型
答:INT16类型的字段确实不能直接用int型的值传入,用short型值传入可以。但是如果没有特殊需要,不建议使用INT16,用INT32比较好。

问:符号预览时的大小和相同符号在地图中显示的大小查很多,预览用的是ImageBuffer在Label的Icon属性中显示的。
答:ResourcePrivew中预览符号是用ImageBuffer显示在label上的,而地图中是将符号显示在MapControl上的,这两者对于符号大小的定义不同(因为这个范例只是用来预览符号,并没有考虑到和实际地图符号进行对比),所以建议符号预览也用MapControl来显示,可以将预览的符号在这个预览MapControl 的跟踪层上去显示。

问:怎么设置分页打印,哪个接口?
答:MapLayout. setHorizontalPaperCount( )
MapLayout. getVerticalPaperCount( )
Printer. print( )

问:在TracklingLayer里面,加一个自定义图片如何加?
答:首先把图片添加到符号库中,存成点符号;然后通过坐标值生成一个GeoPoint对象,设置点对象的点符号为那个图片;最后通过TrackingLayer.Add(Geometry,strTag)添加点对象到跟踪层。

问:为什么非MFC控制台程序调用OGDC的DLL退出程序时系统崩溃。
答:一般情况下是因为没有添加AfxDaoTerm,如果添加后仍然不行,就是DLL环境的问题,这个DLL不能是以静态的方式生成的,更改为MFC共享DLL方式生成。

问:如何判断对象是否重合?重合对象是几何位置完全重合的对象.
答:通过SpatialQueryMode的Identity算子来进行查询

问:如何将面数据集复制到另一个数据源时,将它下面的专题图也一起复制?
答:可以将专题图用ToXML的方法导出为XML文件,然后用FromXML的方法在导入生成专题图。

问:如何导出多个数据集为DXF?
答:首先,为每一个数据集新建一个字段"Layer"或者其他,来标识图层名;然后,把该数据集名赋给这个字段,导出的时候,设置LayerName = "Layer"这个字段即可。

问:多字段组合查询怎么写SQL语句,日期型如何操作?
答:类似这样样子:smid >100 and Name like ‘*西安’ or typeID = 0102; 日期型用‘#’号来处理,例如:#2010-05-21#。

问:如何设置几何对象的风格,并未其添加风格。
答:在简单数据集中几何对象是不带任何风格的,数据的风格通过LayerSetting来控制,所以可以通过获取图层渲染的风格来实现。

问:如何获取三维球上的被选中对象,显示他的某些属性。
答:两种方法:1.通过Scene对象的FindSelection方法,获取选择集数组对象,然后获取其中的Selection3D对象,然后通过ToRecordset方法可以转换成记录集,在获取该数据集的属性并显示;2.通过Layer3D的Selection属性获取Selection3D对象,然后通过ToRecordset方法可以转换成记录集,在获取该数据集的属性并显示。

问:为什么加载个三维模型到球上,加进来的模型一半在球中?
答:这个和模型的有关,可以设置模型的x、y、z坐标,设置Z的值(Z是高程),修改模型的贴地模型为相对与地面的模型——AltitudeMode.RelativeToGround即可。

问:SuperMap Objects .NET不能初始化组件。
答:如果操作系统是64位,改成x86平台编译程序就可以了。

问:如何移动跟踪层的对象?
答:先通过Get获取跟踪层上的对象Geometry,然后通过Geometry的offset方法移动对象。

问:生成等值面的时候,步长不一样的话,应该如何设置?
答:可以通过ExtractedValues这个参数设置不同的等值。

问:岛洞多边形如何存储的?
答:岛洞多边形的岛的点串是正序的,洞多边形的点串是逆序的,一个岛洞多边形是由多个子对象组成。

问:为什么栅格范围专题图创建不成功?
答:专题图类型选为ThemeRange的,应该是ThemeGridRange,所以出错。

问:ThemeLabelCellTemper.LabelExpression = “Round(rain,1)” ,我想把rain字段保留一位小数,但这种写法不行,是否有其它方法可以实现?
答:通过ThemeLable对象的NumericPrecision 属性可以实现这个功能。

问:如何把已知经纬度的点定位到地图上?
答:首先定义一个GeoPoint对象,然后把经纬度的坐标值赋给它;如果地图是经纬度的直接添加点到跟踪层上,然后用EnsureVisble定位点;如果地图是投影的,先把点通过CoordSysTranslator的Forward方法转成投影坐标系的坐标点,然后添加到地图中,并定位。

问:在地图上显示文本的时候,那个点的坐标可以设置为文本的中心点坐标吗?
答:通过TextStyle的TextAlignment属性设置,对齐方式设置为中心点。

问:如何将追踪层上画的所有的点线面保存到数据源里?
答:新建一个CAD数据集,通过AddNew的方法,把跟踪层上的对象添加到记录集中即可。

问:如何获取面对象的节点?
答:GeoRegion[nIndex]就可以或者面对象的点串。

问:为什么操作系统是Windows Server 2008,运行程序时提示license异常,但是配置许可是都显示的是有效。
答:出现这种问题时一定要检查配置完许可显示有效后是否保存配置,点保存配置后,才生效。

问:如何做不连续的分段专题图?比如分三段:0~100 、150200、220300 。ThemeRangeItem. Start / End 接口规定分段要连续,否则会抛异常
答:分段还是正常的连续的,但可以在显示上做文章,将某些分段不显示或者设置风格为透明即可。

问:为什么用SLM 6R配置许可总不成功?
答:请检查用户名和单位名是否与申请许可时上报的一致,不一致则会配置不成功。

问:为什么FillForeColor属性设置没有效果?
答:主要原因是没有设置FillSymbolID属性,因此看不到效果。

问:为什么用GeoRectangle添加对象进去,然后用Bound属性设置对象的范围,但结果范围却没有改变?
答:Bound属性只能返回不能设置。

问:如何给纯属性表数据集增加记录?
答:在调用AddNew方法时参数要写 null,如AddNew(null)。

问:为什么GeoRegion对象没有GetPart方法?
答:在C#中获取GeoRegion子对象是直接用中括号获取的,比如GeoRegion[2] 。

问:定义了一个标签矩阵,如何旋转里边的符号?
答:可以在LabelMatrixSymbolCell的Style属性中可以统一设置符号的旋转角度。

问:如何像SuperMap Deskpro .NET一样 用鼠标拖动三维模型改变位置、大小和旋转角度?
答:只要设置了图层为可编辑,再用Action.Select2选中三维对象,就可以用鼠标拖动改变这些属性了。

问:如何实现像SuperMap Deskpro .NET一样直接添加3d max模型到kml图层?
答:可以用GeoModel的FromFile函数将3ds文件添加进去,然后使用Layer3D.Features得到Feature3Ds ,再调用Feature3Ds.Add方法将前面的GeoModel加进去。

问:在VS2008的配置控件.NET工具箱里找不到超图控件,如何添加?
答:点击“浏览”,在Objects.NET的安装目录里选择SuperMap.Data.dll 、SuperMap.Mapping.dll 、SuperMap.Realspace.dll到工具箱里就可以满足基本使用了。

问:如何合并多个同类型图层
答:用Apend方法追加记录到同一个同层即可。

问:向窗体上拖动MapControl控件时提示“创建MapControl失败”
答:出现这种问题的主要原因是没有Objects.NET的许可,配置的许可有可能是Objects(com)的或是别的软件的。

问:想给3D矢量图层设置贴图,但Layer3DSetting怎么和图层关联?
答:通过Layer3DDataset . AdditionalSetting 属性设置关联

问:询问关联表查询时,怎么样设置joinitems
答:首先新建一个JoinItem对象,设置好要关联的表,关联字段以及关联类型是左连接还是内连接;然后添加到JoinItems中;最后在QueryParameter的joinItems属性中设置好。

问:如何实现打断折线的功能
答:1.取得折线的点串;2.循环点串,相邻两点构成一条线,判断打断点所在线的两个点索引;3.原点串中起点至索引较小值构成的点串+打断点构成打断线1,打断点+索引较大值至终点构成的点串构成打断线2;4.打断线1与打断线2即原线被打断后的结果。

问:Objects Java在64位机器无法打开Oracle数据
答:此问题可能影响因素较多,建议从如下方面检查:1.jdk安装路径不包含特别字符;2.Oracle客户端为32位客户端且安装路径不包含特别字符;3.Objects Java安装路径不包含特别字符;4.系统Path变量中包含正确的Objects Java路径及Oracle客户端路径。

问:专题图是否可单独加载
答:在Objects Java/.NET中,专题图作为一个图层单独加载于地图窗口,可添加多次,与普通图层不冲突,在地图窗口中,专题图与普通图层均作为图层对象管理。

问:为什么同一个工作空间数据在Deskpro中打开很正常,但在Objects .Net中打开后文件型的数据源还在,SQL数据库型的数据源没有被打开?
答:主要是因为该数据是SQL数据源而不是SQL+数据源,在Objects .Net里是打不开SQL数据源的。处理方法为用Deskpro新建一个SQL+数据源,然后将SQL数据源中的数据集全部复制到SQL+数据源中,最后在工作空间中关闭原来的SQL数据源,打开新建的SQL+数据源,保存工作空间即可。

问:对数据集中的某个用户自定义字段进行查询时速度很慢,由何提高查询效率的方法?
答:如果是进行属性查询,建议再查询之前对字段创建字段索引,可以提高查询的效率。

问:问:关联属性表制作专题图之后,图例管理器中已经显示制作专题图成功,但是地图窗口中专题图不显示是怎么回事?
答:需要注意两点:(1)将设置好的JoinItems对象传递给QueryParameter.JoinItems属性;(2)传递(1)中的QueryParameter给Layer.DisplayFilter时,需要注意此layer为Layers.add方法返回的图层对象即专题图图层对象,DisplayFilter必须要是专题图图层对象的。

问:同一数据源中对所有数据集的同一字段创建字段索引,例如对Index字段创建字段索引,有何需要注意的地方吗?
答:在数据库中索引名称必须是唯一的。建议字段索引的名称不要给成相同的,不同的数据集给不同的字段索引名称。

问:Objects .net6R中能对统计专题图固定大小吗?
答:可以,设置ThemeGraph. IsGraphSizeFixed=True,但同时需要注意设置MaxGraphSize,MinGraphSize,注意其单位为逻辑像素单位。

你可能感兴趣的:(组件GIS)