SuperMap GIS基础产品组件GIS FAQ集锦(3)
【Unity】Unity中如何将场景内容限制在屏幕中间1/3处?
【解决办法】1、新建两个相机,一个代表左边屏幕,一个代表右边屏幕
2、通过Viewport Rect设置相机显示在屏幕中的位置,
左边相机为,x:0,w:0.33;
中间主相机设置为:x:0.33,w:0.34;
右边相机设置为:x:0.67,w:0.33。
这样就使得场景渲染内容,也就是主相机内容只显示在中间位置。
【iObjects .NET】【11.0.1】 请问基于 SuperMap iObjects .NET 组件开发的项目打包时需要将 Bin 下的所有文件都打包进去吗?有办法只打包使用到的吗?
【解决办法】 通常来说为了方便建议全部打包,若实在需要只打包使用到的库的话,建议通过 Dependencies 依赖检查工具检查使用的 dll 依赖情况,将存在依赖的库打包进去即可。
【iObjects Java】【11.0.1】【10.2.1】 请问 SuperMap iObjects Java 组件有办法在追踪图层(TrackingLayer)上绘制几何要素吗?
【问题原因】 追踪图层(TrackingLayer)目前不支持绘制几何要素。
【解决办法】 可以新建对应类型的临时数据集添加到地图后绘制,绘制结束后再将绘制的要素添加到 TrackingLayer 上,绘制结束后移除临时图层,删除临时数据集。
【iObjects Java】【11.0.1】 请问在 Linux 系统上使用 iObjects Java 组件,Linux 系统已经设置了字符集是 zh_CN.utf8,系统本身也是支持显示中文的,但是 iObjects Java 组件生成的日志中文依然显示乱码是什么原因呢?
【解决办法】 需要将 Linux 系统字符集改为 zh_CN.UTF-8。
【iObject Java】在java组件中打开oracle数据源失败,在同一台电脑中使用相同的参数,iDesktop可以打开oracle数据源,为什么?
【解决办法】是因为IDAE没有读到配置的oracle环境变量,需要在Run/Debug Configuration中找到Environment variables中添加上oracle的环境变量
【iObject Java】客户进行模型拆分,对于同一段代码,使用jdk17,程序崩溃,使用jdk8则可以正常执行,为什么?
【解决办法】如果客户只使用二维功能的话,支持目前最新的19版本,如果客户要使用三维功能的话,建议最高使用JDK1.8版本,JDK1.8之后的版本自带高分屏适配功能,iObjects Java组件目前没有在三维方面进行适配
【iObject for Spark】将数据写出Oracle报错provider is read-only,是什么原因?
【问题原因】JDBC的方式连接目前只支持读取,且只支持Oracle Spatial,其它表读取空间数据会丢失
【解决办法】使用SDX方式写出
【iObject for Spark】如何将数据以SDX方式写出ORACLEPLUS?
【解决办法】可以参考以下代码:
val ORACLE_SDXparams = new util.HashMapString, java.io.Serializable
ORACLE_SDXparams.put(SDXFeatureRDDProviderParams.DBType.key, “ORACLEPLUS”) //数据库类型
ORACLE_SDXparams.put(SDXFeatureRDDProviderParams.Server.key, “172.11.11.111:1521/ORCL”) //数据库服务地址
/ORACLE_SDXparams.put(SDXFeatureRDDProviderParams.DataBase.key, “ORCL”) //数据库库名/
ORACLE_SDXparams.put(SDXFeatureRDDProviderParams.User.key, “user”) //用户名
ORACLE_SDXparams.put(SDXFeatureRDDProviderParams.PassWord.key, “pwd”) //密码
ORACLE_SDXparams.put(FeatureRDDProviderParams.ProviderType.key, “SDX”)
FeatureRDDProviderFactory(ORACLE_SDXparams).save(oracleRDD,ORACLE_SDXparams,“test”)
【iObject for Spark】将FeatureRDD写出到数据库后,在库中找不到对应的表,是什么原因?
【问题原因】这是由于表名和数据集名不一致,导致以数据集名去找表时找不到
【解决办法】找到JAVA组件Bin目录下的SuperMap.xml,修改DTNameTableNameSame节点的值为true,使数据集名和表名保持一致
【iObject for Spark】DSF叠加分析结果是什么类型?
【解决办法】DSF叠加分析生成结果为FeatureRDD,而非DSFFeatureRDD
【iObject for Spark】分批求交的分区数设置多少合适?
【解决办法】该参数将数据分成若干个相对独立的单元,一个单元即为一个分区,在进行求交操作时,就能够对数据进行分批并行计算,数据的分批计算次数=分区数/机器CPU核数。分区数的设置需要根据数据情况及机器内存情况而定,建议设置为源数据和叠加数据几何对象总数除以5千到10万的范围内,例如1千万对象的数据,分区数设置范围为100-2000。当分区数越少,数据分批计算的次数越少,执行时间越短,但内存消耗越多,当内存不够时,可以适量把分区数设置大些,这样每个任务要处理的数据量就会小一些,占用内存就会少些。
【iObject for Spark】使用SDX方式读取ORACLE表报错
FeatureRDD IllegalArgumentException: Invalid dataset type: LINKTABLE,是什么原因?
【问题原因】这是由于该表为业务表,没有超图系统字段
【解决办法】需要使用JDBC方式进行连接读取
【iObject for Spark】使用JDBC方式读取ORACLE表报错
RROR com.supermap.bdt.rddprovider.jdbc.JDBCUtils$ - ORA-00904: “SMID”: 标识符无效,是什么原因?
【问题原因】这是由于分区字段设置错误,表中没有SMID
【解决办法】设置正确的ID字段名称即可
【iObjects .NET】请问一下面中心线的接口在哪?
【解决办法】Generalization.RegionToCenterLine
Generalization :制图综合类。该类提供矢量数据融合、碎多边形合并、双线提取中心线、面提取中心线等制图综合功能。
【iObjects.NET】如何判断当前图层是普通图层还是专题图层?
【解决方案】通过获取Layer.Theme 属性,得到Theme对象,判断如果Theme 为null,那就是普通图层,如果Theme 不为null,就是专题图层
【iObjects.NET】如何控制单值专题图的某一个子项可见不可见?
【解决方案】通过ThemeUnique[索引号].IsVisible属性即可控制,设置为ture即为可见,设置为false即为不可见。但是注意,设置完成后,记得刷新地图Map.Refresh();
【iObjects C++】保存工作空间一直失败,可能是什么原因?
【解决方案】WorkSpace有两种方法保存工作空间:
1、一个save,用于保存已经存在的工作空间,不改变原有的名称,即本身存在*.smwu或者*.sxwu。
需要注意以下两点,否则会存在保存失败的情况:
(1)、在调用save之前需要设置pWorkspack->m_WorkspaceConnection.bFailIfExists = false;
(2)、UGWorkSpace打开工作空间的时候,不能采用直接UGWorkSpace->Open(smwu的文件路径)。需要创建UGWorkspaceConnection ,然后设置对应的参数的形式去打开工作空间,否则也会导致失败,UGWorkspaceConnection 的参数设置可以参考以下第2条。
2、另外一个是SaveAs,另存工作空间,即需要重新生成一个*.smwu或者*.sxwu。SaveAs方法中需要填参数:UGWorkspaceConnection,参数必须设置完整,下面是文件型工作空间其中必填的属性参数: UGWorkspaceConnection wscon; wscon.m_strServer = _U(“C:/ceshi.smwu”); wscon.m_nWorkspaceType = UGWorkspace::UGWorkspaceType::WS_Version_SMWU; wscon.m_nVersion = m_pWorkSpace->GetVersion(); UGbool bSuc = m_pWorkSpace->SaveAs(wscon);
【iObjects.NET】使用recordset.geometry修改了对象以后,发现Dataset的的bounds没有变化,该如何解决?
【解决办法】可以调用代码DatasetVector.ComputeBounds ()方法,对数据集重新计算范围即可。
【iObjects.NET】如何获取某条线段的中间点?
【解决方案】geoline.FindPointOnLineByDistance (geoline.Length /2) ,在线上以线长度的一半去找点,得到的点集为线段的中间点、
【iDesktopX】打开工作空间后,向UDBX数据源中新增数据集时,保存工作空间后,第二次打开发现新数据集未保存,请问该如何解决?
【问题原因】UDBX数据源是可以同时打开,并获取其中的数据,但是不能去编辑。
【解决办法】只在希望的程序中打开UDBX数据源,关闭其他程序的占用就能够正常编辑数据了
【iObjects.NET】iObject,NET中如何提取点到线上的最近点?
【解决方法】通过使用ProximityAnalyst.ComputeMinDistance 方法可以实现最近距离计算。
求算“被计算几何对象集合”中每一个对象到“参考记录集”中在查询范围内的所有对象的距离中的最小值(即最近距离)
,并将最近距离信息返回到距离计算结果数组中。
【iObjects.NET】含导洞的矢量面进行拆分,拆分后吧导洞也拆出来了,应该如何解决?
【解决方法】拆分时使用GeoRegion.ProtectedDecompose方法进行拆分。 面对象保护性分解。区别于组合对象将子对象进行简单分解,保护性分解将复杂的具有多层岛洞嵌套关系的面对象分解成只有一层嵌套关系的面对象。
【iObjects.Java】使用Java组件开发无界面程序,如何获取Map对象?
【解决办法】1.首先通过WorkspaceConnectionInfo打开工作空间workspace,然后通过workspace获取地图字符串xml,maps.getMapXML(String name);
2.初始化一个map对象,然后通过map.fromXML()构造
【iObjects.Java】使用Java组件如何创建内存数据源?
【解决办法】使用DatasourceConnectionInfo设置连接参数
DatasourceConnectionInfo info = new DatasourceConnectionInfo();
info.setServer(“:MEMORY”);
info.setEngineType(EngineType.MEMORY);
info.setAlias(“test”);
workspace.getDatasources().create(info);
【iObject Java】iObject Java生成地图缓存,加载到桌面中可以看到地图,发布UGCV5服务,预览不到地图
【解决方案】查看Java组件生成的.sci可以看到Bounds节点下全为0,这种加载到桌面可以出图,但是发布服务不行。需要在生成地图缓存时设置地图缓存的地理范围。贴图
【Spark组件】iObjects for Spark产品在数据读写方面支持greenplum集群 的支持情况怎么样?
【解决办法】
1、bdt数据写入greenplum集群时,不支持jdbc方式写入,否则报错 Caused by: org.postgresql.util.PSQLException: ERROR: currval() not supported
2、bdt数据写入greenplum集群时,支持sdx方式写入,但是不支持分块写入参数,否则会崩溃。
【Spark组件】iObjects for Spark产品在读取矢量数据时,当数据存在脏数据时如何进行过滤,比如有些记录的空间字段为空时?
【解决办法】
可以通过空间函数和谓词下推,在数据库层面过滤。
params0.put(JDBCFeatureRDDProviderParams.Predicates.key, Array(“shape IS NOT NULL AND st_isvalid(shape)”))
【Spark组件】iObjects for Spark产品使用yarn集群,将255w数据以dsf格式写入hdfs系统时报错如下:failed to create_file because this file lease is currently owned by dfsclient_nonmapreduce,怎么解决?
【问题原因】
写小数据量没问题。大数据量才会出现该问题,是因为hdfs写文件是多进程写,不同hdfs client写文件时需要申请文件锁,也就是hadoop的lease租约机制。由于写的数据量大,hadoop yarn集群默认在task任务的map或reduce阶段开启了预测机制来分配资源或进程,进而导致文件写时导致文件输出流异常关闭,客户端进程无法创建文件。
当出现数据倾斜时,mapreduce 阶段会出现掉队者,掉队者是指那些跑的很慢但是最终可以执行成功的任务。此时 mapreduce 的推测机制会生效,可以识别那些跑的任务比较慢的任务,但是不会清理掉队者的任务,而是会产生另一个等效的任务作为备份,并使用首先完成的那个任务的结果,这种技术称为推测执行(speculative execution)。
这种机制是为了保证 mapreduce 的执行效率,但是当操作 hdfs 文件时,如果出现同时写操作,hdfs 的 lease 管理员是不允许同时被两个写入程序占用的。
【解决办法】
将mapred-site.xml配置文件里的mapreduce.map.speculative和
mapreduce.reduce.speculative参数的值均改为false,重启hadoop即可解决。
【Spark组件】iObjects for Spark产品在读写分析结果时,怎么用行内变量等特性来保持名称不变?
【解决办法】
行内变量用%来引用变量,用#来调用变量的属性。示例如下:
–server=%rastersaveassdx.RasterRDD% --dbType=udbx --alias=sichaun --dataset=%rastersaveassdx.inputs.outputDatasetName#name%
【Spark组件】iObjects for Spark产品中如何使用web型的licc正式许可啊?
【解决办法】
- spark standalone模式和yarn-client模式
- 安装web许可中心软件,配置web许可,对外提供web许可服务。需要objects for spark模块。
- 在spark集群节点机器配置系统环境变量 BSLICENSE_SERVER=ws://ip:9183 或者 在代码里设置System.setProperty(“BSLICENSE_SERVER”,“ws://ip:9183”)
- bdt程序里不需要做啥,运行后在日志能看见正常打印。
- yarn-cluster模式
1.在spark-default.conf设置spark.yarn.appMasterEnv.BSLICENSE_SERVER=ws://ip:9183,或者在spark-submit 设置–conf spark.yarn.appMasterEnv.BSLICENSE_SERVER=ws://ip:9183。这样driver端才能读取到变量。 - web许可原理。
spark app的driver端通过BSLICENSE_SERVER变量,通过websocket通信去动态接入许可中心,并申请分配许可。driver端得到许可后,worker节点均不需要许可了。app执行完后,就断开连接,web许可中心回收许可。一套许可同一时间只能一个app占用。因为许可与driver进程绑定的。所以要同时运行多个app就需要多套许可。
能不能连上web许可就在程序里通过System.getProperties()和System.getenv()把变量和属性都打印出来看看有没有BSLICENSE_SERVER变量。因为bdt底层就从这两个里面获取变量再去连接web许可的。
【Java组件】iObjects for Java产品部署在linux完检查依赖库,如报错提示/supermap-idesktopx-10.1.2-0330-5260-86195-linux64-bin-chs/bin/libnss3.so: version `NSS_3.52’ not found (required by /lib64/libssl3.so)类似的,如何解决?
【解决办法】
删除组件自带的库:先查找so库看看哪些目录下有,然后把冲突库删掉,删除组件自带的比如
rm -rf Bin/libnssutil3.so
rm -rf Bin/libnss3.so
【iObject java】java组件放到tomcat里面运行缺库,提示缺少dll
【问题原因】缺少环境变量
【解决办法】需要在tomcat的xml配置文件中添加组件环境变量,如set “path=E:\iobj1110-102518\Bin”
【iObject java】许可驱动安装失败,提示找不到var/lib/dbkg/status
【问题原因】系统缺少对应的软件安装程序
【解决办法】更换支持dbkg等安装管理软件的系统
【iObject java】有iObjects Java 态势推演的示例的吗
【解决办法】暂时没有这个范例,但是实现该功能使用的是先用
AnimationGroup.addAnimation(AnimationGO pAnimation)分组中添加动画的方法向分组中添加动画,该类可以管理动画分组,实现动画的增删;AnimationGO则是具体的动画,可用用来设置动画的一系列属性,主要是用AnimationGO.setGeometry(java.lang.String geometryUuID)设置添加动画的cad数据集中的Geometry对象,之后就是播放时间,起止时间等等属性,接着就是AnimationManager.play()方法进行播放,AnimationManager是动画管理类。该类提供了动画管理类的一系列功能