SuperMap iObject常见问题解答集锦(七)
来源:互联网 发布:在淘宝开一个店多少钱 编辑:程序博客网 时间:2024/04/26 05:12
作者:皇皇
问:如何锁定地图可显示范围?
答:Map.LockedViewBounds:
锁定的地图可视范围,只显示指定的可视范围内的地图,其余的地图内容不显示。设置后,地图将不能平移缩放,处于锁定状态。
注意:
设置LockedViewBounds 之前,需要先设置this.mapControl.Map.IsViewBoundsLocked = true;
问:SuperMap Objects.NET 2012 SP2可以打开iServerJava发布的Rest真空间服务吗?
答:可以的。使用Scene.Open方法就可打开,只需要填写两个参数,第一个是iServer数据服务的URL,第二个是三维场景名称。或者在已经打开的场景里使用Layer3Ds.Add(String, Layer3DType, String, Boolean)重载方法添加真空间服务图层,第一个参数就是iServer数据服务的URL。
问:在进行三维通视分析的时候如何设置观察点的附加高程?
答:在场景中点选了观测点后,按住shift键后拖拽鼠标,拉伸到适当的高度,在达到适当的高度后,点击鼠标左键,会弹出对话框,在对话框中可以直接设置想要的观察点高度。
问:通过Map.LockedViewBounds属性设置MapControl地图控件中锁定的地图可视范围后,并没有出现预期的效果,为什么?
答:首先需要设置MapControl地图控件中是否锁定地图的可视范围,即设置Map.IsViewBoundsLocked =true.
问:DGN数据导入执行失败,DGN数据根本没有导入到数据源中,为什么?
答:DGN导入需要FME动态库支持,导入DGN之前需要在技术资源中心的下载专区下载相应的FME动态库包,将FME动态库包放置到Objects .NET安装目录的bin包下,同时在ImportSettingDGN中设置IsUseFME为true,执行导入即可。
问:添加3ds模型到KML图层中,并且想保存该模型在当前KML图层,如何实现?
答:1、把模型作为GeoPlacemark添加到Feature3Ds中。
2、使用Layer3D.UpdateData方法更新渲染所需要的数据。
3、最后使用Feature3Ds.ToKMLFile方法将三维要素集合对象输出成KML文件。
问:动画模型添加到跟踪层,无法控制效果?
答:可以控制动画效果,需要从跟踪层先取出GeoModel,修改动画,然后设置回去。
sceneControl.getScene().getTrackingLayer().add(geoModel, “model”);
……
TrackingLayer3D trackingLayer3D = sceneControl.getScene().getTrackingLayer();
int nIndex = trackingLayer3D .indexOf(“model”);
GeoModel geoModel = (GeoModel)trackingLayer3D .get(nIndex);
geoModel.getAnimation().setEnabled(true);
trackingLayer3D .set(nIndex, geoModel);
问:同一个三维场景打开两个窗口来显示,A场景窗口修改了图层的可见性,保存场景保存工作空间,刷新一下B场景窗口之后,B场景并没有更新,怎么回事?
答:这种情况属于正常。我们存储在工作空间中的场景信息是一个xml字符串,场景打开是把xml字符串加载到场景对象的内存中。当A窗口保存后,修改了xml字符串,此时B窗口并没有得到修改的通知,需要重新打开场景到B窗口,才能重新加载xml获取该设置信息,使得B场景窗口更新。
问:编译机上编译的Objects .NET工程,将工程exe拷贝至其他安装了Objects .NET的运行机上运行,运行失败。报SuperMap.Data引用及版本错误,为什么?
答:出现此种情况一般有以下三种原因:1、运行机上的当前用户对于Objects .NET安装路径没有访问权限,此种情况可以将Objects .NET的bin包拷贝到有权限访问的文件夹下,更改环境变量中的path即可;2、当前运行exe的用户不是管理员身份,此种情况运行exe时右键以管理员身份运行即可;3、编译机上编译所使用的Objects .NET版本于运行机上安装版本不一致,此种情况也是最常见的,此时只要统一编译机及运行机上的组件版本即可正常运行
问:在服务端使用Objects Java输出图片,新创建工作空间和地图控件,然后进行一些出图步骤,最后把Workspace和MapControl都dispose掉,程序会崩溃。崩溃日志中有“EXCEPTION_ACCESS_VIOLATION”及“com.supermap.data.WorkspaceNative.jni_Open”信息
答:崩溃原因:使用的是SDB数据源,换其他类型的数据源程序正常。
对于SDB数据源,程序需要采用以下方式启动:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// 要实现的类和方法 }
} );}
问:地图平移、缩放等操作后,会触发什么事件?
答:用户对地图平移、缩放后,地图将刷新,重新绘制,绘制完成后,将触发Map.Drawn事件。
问:如何计算两条线的夹角?
答:通过取两条直接的任意各两点,使用Geometrist.ComputeFillet方法,计算线与线的倒圆角,然后,通过GeoArc.SweepAngle属性,获取圆弧所扫过的角度。那么,两条线的夹角 = 180 - 倒圆角弧段对应的角度。
问:使用SuperMap Objects .NET打开数据,为什么工作空间能打开,而工作空间下的数据源打不开了?
答:有两种可能:1.文件型的工作空间或数据源被其他的程序所占用,因此数据源打不开;2.在系统盘Windows/System32文件夹下有一个sqlite3.dll的文件,它与软件bin文件下的sqlite3.dll同名文件冲突了,所以打不开。因此,可以将系统盘下的sqlite3.dll文件重命名,数据源就可以打开了。
问:进行最短路径分析,以距离和时间综合来作为阻力值,时间字段为TimeCost,距离字段为SmLength,然后设置weightFieldInfo.Name为”TimeCost”+”SmLength”,最后的路径分析结果感觉还是只是距离值起了阻力效果,设置的时间因素没有作用,怎么回事?
答:如果要综合两个字段值作为阻力值,应该先创建一个字段假设名称为Cost,再将距离和时间字段值运算后的结果赋给Cost,设置weightFieldInfo.FTWeightField和weightFieldInfo.TFWeightField属性都为Cost。需要注意,weightFieldInfo.Name这只是一个标识名称,用来标识weightFieldInfo对象的,在设置TransportationAnalystParameter.WeightName属性时将这个标识名称设置进去,表示采用这个标识的weightFieldInfo作为分析的权重字段信息。
问:如何通过代码将圆对象添加到面数据集中?
答:1.获取DatasetVector; 2.DatasetVector.getRecordset(True,CursorType.Dynamic);
3.构建圆对象GeoCircle,并调用GeoCircle.ConvertToRegion 方法,将圆对象转换为面对象,才能成功将圆成功添加到面数据集当中;
4.Recordset.AddNew方法; 5.Recordset.Update方法; 6.Recordset.dispose方法;
问:在添加圆、圆弧、扇面、椭圆、矩形、圆角矩形等几何对象时,为何会失败?
答:上述对象主要用于CAD图层,当需要向线图层或面图层添加上述对象时,需要将上述对象通过ConvertToLine或ConvertToRegion方法转换,再将转换结果添加至对应图层中。
问:SuperMap Objects .NET 中哪些类不能被创建?
答:在 SuperMap Objects .NET 中帮助文档里没有写构造函数的类,通常都不能被创建。最常用的例如Geometry,DatasetVector,TrackingLayer,Datasource,Recordset等。
问:如何将三维几何对象添加到三维跟踪层中?
答:三维几何对象需要以GeoModel的形式向三维跟踪层中添加,构造了三维几何对象后(如GeoCircle3D,GeoSphere),使用Geometry3D.GetGeoModel(int slices,int stacks)方法获取几何模型,再添加到跟踪层。使用Geometry3D.GetGeoModel(int slices,int stacks)方法传的两个细分参数经验值为72。
问:程序迁移之后,重新生成解决方案运行程序,会报FileLoadException错,无法正常运行程序,为什么?
答:此种报错一般是由于引用的动态库路径、Path中Objects .NET路径以及项目属性中的工作目录路径不一致造成;在运行程序时重新引用下动态库,将项目属性中的工作目录制定到重新引用动态库的对应文件夹,然后重新生成解决方案即可。实际解决操作可参照:http://www.gisforum.net/bbs/dispbbs.asp?boardid=123&id=201471&page=1&star=1
问:对三维点图层制作三维单值专题图,设置了一个三维符号作为单值的风格,实际的地物大小不一,那么怎么设置这个符号的缩放倍数呢?
答:可以设置每一个单值的GeoStyle3D,使用接口Marker3DScaleX/Y/Z设置符号缩放倍数。
问:SuperMap Objects Java怎么避免标签压盖的现象?
答:避免标签的压盖,调用Map类的setOverlapDisplayed方法即可
问:使用SuperMap Objects .NET如何将一条GeoLine3D转成飞行路径,并保存为fpf文件?
答:首先,获得希望转换的GeoLine3D,使用Route. FromGeoLine3D()方法生成一条路线,然后,将这条飞行路线添加到飞行路径中(一条飞行路径可以有多条路线),使用方法Routes.Add(),最后,用Routes.ToFile()直接生成一个.fpf后缀的文件。
问:可以往跟踪层上批量添加对象吗,怎么做?
答:可以的。具体步骤:首先设置TrackingLayer.SetEditBulk(true)开始批量添加,然后就循环调用TrackingLayer.Add方法添加对象,最后调用TrackingLayer.FlushBulkEdit()保存添加的数据,并且设置TrackingLayer.SetEditBulk(false)以结束批量添加。
问:在有界面的linux下怎样配置SuperMap Objects Java 的许可?
答:在linux下配置SuperMap Objects Java的许可,需要使用命令java -jar 运行 Bin路径下的com.supermap.license.jar包,即可弹出和windows下相同的配置界面,配置完毕后还需要配置SuperMap Objects Java的环境变量,环境变量的路径为当前SuperMap Objects Java的Bin路径。(变量设置方法:export UGO_HOME=/opt;export LD_LIBRARY_PATH=
问:如何通过栅格数据展现网络信号质量等现象?
答:建议将网络信号信息(包括坐标信息和信号质量信息)存储至属性表数据集,再根据所有坐标信息创建空栅格数据集,之后向栅格数据集中填入栅格值。
问:设置布局图例对象中某些项不可见,为什么不起作用?
答:在设置了GeoLegend对象的ItemsVisible之后,需要执行GeoLegend.Load()重新加载,然后在布局对象集合中通过setGeometry方法更改当前的布局对象,达到设置的效果。
问:在使用ObjectsJava开发时,Swing的菜单项会总被SceneControl遮挡,怎么解决呢?
答:在创建JMenuItem之前先掉用这句代码设置一下:JPopupMenu.setDefaultLightWeightPopupEnabled(false);所述问题就不会出现了。
问:Dataset.getBounds()与Layer.getBounds()有何区别?
答:对矢量数据集而言,Dataset.getBounds()得到的数值为所有几何对象的范围并集;对栅格数据集而言,Dataset.getBounds()得到的数值为整个栅格的范围
【1】当地图坐标系为经纬度坐标系或平面坐标系时,Dataset与Layer类中getBounds()得到的值一致。
【2】当地图坐标系为投影坐标系、数据集为经纬度坐标系且地图已设置动态投影时,getBounds()得到的值不一致,Layer.getBounds()值为Dataset.getBounds()经地图投影坐标系投影转换后的范围。
问:怎么保存地图?
答:三个步骤:(1)map.ToXML();(2)maps.SetMapXML();(3)workspace.save()
问:为什么SuperMap Objects Java的地图在不同计算机显示效果不一样?
答:这是因为计算机的分辨率不一致引起的。可以在SuperMap Objects Java的bin目录下的配置文件设置supermap.ini文件中设置CustomMapRatioEnable为true,出图计算机及最终显示地图的计算机均需配置。
问:如何设置图层高亮显示风格?
答:设置图层高亮的显示风格,首先需要获取选择集Selection,可以通过Layer的getSelection()方法获取,然后调用Seleciton的setStyle(GeoStyle style)
方法,(按需求设置GeoStyle),即可获得自己需要的图层高亮显示风格。
问:使用Geometrist类中computeGeodesicArea方法时,如何设置坐标系信息?
答:Geometrist类中computeGeodesicArea方法第二个参数即为坐标系信息,将坐标系设置为对应的经纬度坐标即可,如
PrjCoordSys prjXY = new PrjCoordSys();
GeoCoordSys geoSys = new GeoCoordSys();
geoSys.setType(GeoCoordSysType.GCS_WGS_1984);
prjXY.setType(PrjCoordSysType.PCS_EARTH_LONGITUDE_LATITUDE);
prjXY.setGeoCoordSys(geoSys);
问:为何GeoRegion.getArea获取得到的数值非常小?
答:GeoRegion是可以任意创建的对象,单个几何对象(点、线、面等)不带有坐标信息,所以在计算面积时,是通过面对象中点串坐标来计算,对于经纬度面对象,建议对面对象进行投影转换后再计算面积。
问:若在AIX机器上,运行SuperMap Objects Java时,出现【java.lang.UnsatisfiedLinkError:Wrapj600】&【Dependent module libptools_ptr.a(shr.o) coult not be loaded】,会是什么原因?
答:此错误显示缺少系统文件【libptools_ptr.a】,可通过AIX系统安装包或其它方式获取【libptools_ptr.a】文件后,将此文件拷贝至SuperMap Objects Java安装目录下Bin文件夹即可。
问:使用SuperMap Objects .NET时,在场景中,不希望有地下网格的效果,如何修改?
答:目前没有接口可以修改这个风格,但可以通过修改安装目录下SuperMap Objects .NET\Bin\Resource文件夹里的underground.jpg文件进行修改,建议使用图片大小为256*256的JPG文件。
问:在VS2008中使用SuperMap Objects .NET,为什么找不到LayersControl控件?
答:这个问题有两个可能:
1.使用的SuperMap Objects .NET版本比较早,在6.0版中还没有加入LayersControl控件
2.没有在工具箱中加入SuperMap.UI.Control.dll文件中的控件
问:SymbolLibrary.FindSymbol() 和SymbolGroup为什么都无法获取“System 0”的符号?
答:SymbolLibrary.FindSymbol() 和SymbolGroup 这两个方法都无法获取系统符号,只有用ToolKit.Draw()的方法才可以获取系统符号。且在ToolKit.Draw()中对绘制的符号进行了反走样的处理,显示效果和桌面的效果相同。ToolKit.Draw()参数中的Geometry需传设置了SymbolID的GeoStyle。
问:如何查看SuperMap Objects Java版本号?
答:查看版本号有两种方法:1)选择一个jar包,通过winrar方式打开jar包,再以记事本方式打开META-INF文件夹中MANIFEST.MF文件,可看到【Manifest-Version: 6.1.1.8930】,6.1.1.8930即为SuperMap Objects Java版本号;2)在命令行中运行Java -cp com.supermap.data.jar文件全路径 com.supermap.data.AboutBox即可在弹出的窗体中看到版本信息。
问:为什么将SDB中的数据添加到场景中,制作三维专题图不显示?
答:在使用SDB数据源中的数据制作三维专题图时,在将制作好的三维专题图加入到三维场景中后,需要调用该三维专题图层的Layer3DDataset.UpdateData() 方法,才能显示制作的三维专题图。
问:在窗体的closing事件中,释放工作空间和三维场景资源时,系统报错“vshost.exe已停止工作”,把释放资源代码注释后,一切正常。这是什么原因造成的?
答:关于“在窗体关闭的时候,系统报错 ”的问题,可检查下关闭的顺序是否正确,正确顺序如下: 1、关闭scene 对象; 2、关闭SceneControl对象; 3、关闭Workspace对象。 例如: this.mapControl.Map.Close(); this.sceneControl.Scene.Close(); this.mapControl.Dispose(); this.sceneControl.Dispose(); this.workspace.Dispose();
问:在创建栅格数据集的时候,使用类DatasetGridInfo的setBlockSize方法时,怎样设置栅格数据集像素分块存储的大小?
答:栅格数据集像素分块存储的大小单位是像素,默认值为128,设置值的大小必须是64的倍数。
问:如何获取三维场景中模型对象的高度
答:GeoModel对象中没有直接获取模型高度的属性方法,不过可以通过BoundingBox的范围间接获取该模型的高度
问:二次开发做了一个简化的图例控件,地图在添加图层后,如何能告知图例控件刷新呢?
答:SuperMap Objects Java中Layers类可以添加一个监听,用于监测图层添加事件,通过Layers.addLayerAddedListener可实现地图添加图层后LayerAddedListener监听被触发。
问:向三维图层选择集中添加了对象,刷新地图,为什么没有高亮显示?
答:添加到了Selection3D后,需要使用Selection3D. UpdateData方法来渲染选择集,才能高亮显示。
问:制作分段专题图的时候,为何子项添加失败?
答:有以下两种可能。1.默认的ThemeRange .Precision =0.1,如果设置的分段值的小数位数大于了一位,则会添加失败,需要根据实际的小数位数来修改精度。2.两个子项的起始值一定要和上一子项的终止值相同,及上一区间为[1,2],下一区间就是[2,3]。
问:在场景中添加多个Bubble时,如何确定每个用户控件与bubble对应的位置?
答:在bubble的BubbleInitialize事件和BubbleResize事件里面通过bubble的ID号来判断当前的bubble,从而根据当前bubble的对象来确定用户控件的位置。
问:通过设置三维图层过滤表达式,来控制显示的对象,刷新场景后,没有看到过滤效果,是什么原因?
答:只是刷新还不行,还需要使用场景的scene.updatedata方法来更新场景中的数据。
问:为什么使用JoinItem关联外表做标签专题图的时候,使用关联字段制作标签专题图失败?
答:因为关联字段有可能是两个表里面都有的字段,当使用此字段做标签专题图的时候,不能识别使用哪个表的字段,因此失败。所以在使用关联字段或者两个表其它名称相同字段时,都需要在字段前面加上表名。例如数据集World和capital,关联字段为Country,则使用Country做标签专题图的时候,表达式字段为World.Country.
问:空间查询使用CAD数据集时,程序报异常。
答:当前版本的底层算法暂时不支持对CAD数据集进行空间查询。建议把CAD数据集转换为简单数据集(点/线/面等),再使用空间查询。
问:工程中存在多个地图控件时,多个地图控件与工作空间如何联系?有何注意事项?
答:每个地图控件都可通过MapControl.getMap().setWorkspace与工作空间进行连接,各地图控件之间的展示互不影响。在删除数据集时,需确定每个地图控件中均没有与此数据集相关联的图层。
问:三维场景中取某一三维线对象及其在地面的投影线上的点集构建闭合三维面对象失败,有什么方法让该闭合面对像显示?
答:在构建完该三维面对象之后,设置该三维面对像的某方向的偏移量offset,例如x方向便宜0.000001度,构建的该三维面对像即可以正常显示。
问:在桌面中新建场景,三维球为成白色,是什么原因?
答:可能是两个原因导致的:1.由于OpenGL版低造成,查看当前OpenGL版本,若低于1.5,需要安装最新的显卡驱动即可。2.机器的颜色环境为16位(增强色),应该将机器环境设置为32位(真彩色)。
问:如何在Windows窗体应用程序中,在 .NET Framwork 4.0框架下,使用SuperMap Objects .NET?
答:首先:工程属性的Application页面中的Target framework属性需要修改为.NET Framework 4。默认为.NET Framework 4 Client Profile。在不修改的情况下会编译出错。
其次:在工程中新建一个名为app.config文件,添加如下代码
- SuperMap iObject常见问题解答集锦(七)
- SuperMap iObject常见问题解答集锦 (一)
- SuperMap iObject常见问题解答集锦(二)
- SuperMap iObject常见问题解答集锦(三)
- SuperMap iObject常见问题解答集锦(四)
- SuperMap iObject常见问题解答集锦(五)
- SuperMap iObject常见问题解答集锦(六)
- SuperMap iObject常见问题解答集锦(八)
- SuperMap iObject常见问题解答集锦(九)
- SuperMap iObject常见问题解答集锦(十一)
- SuperMap iObject常见问题解答集锦(十二)
- SuperMap iDesktop常见问题解答集锦(七)
- SuperMap iServer常见问题解答集锦(一)
- SuperMap iServer常见问题解答集锦 (二)
- SuperMap iServer常见问题解答集锦(三)
- SuperMap iServer常见问题解答集锦 (四)
- SuperMap iServer常见问题解答集锦 (五)
- SuperMap iServer常见问题解答集锦 (六)
- The Rise of Worse is Better
- 高质量C++/C编程指南(林锐)
- 小胖说事-------tabbar去掉横线的方法
- http session cookie 关系总结
- 【jzoj4709】【Matrix】
- SuperMap iObject常见问题解答集锦(七)
- 怎样自动将word转换成为PDF文件
- VIM中cscope的快捷键操作方法
- 大三前端实习日志
- linux系统信息
- Eclipse调试(2)各种类型断点设置
- #170 Rotate List
- MyBatis插入数据返回主键
- SSRF漏洞的挖掘经验