SuperMap GIS基础产品组件GIS FAQ集锦(5)
【iObjects .NET】怎么使用iObjects .NET组件模板?
【解决办法】为了方便用户使用 SuperMap iObjects .NET 组件进行各类应用的开发,SuperMap 提供了一系列的开发模板集成到 Microsoft Visual Studio 的开发环境中,可以通过这些模板建立对应的工程项目。
需要10i的包,只支持与 Visual Studio 2010、Visual Studio 2012 的 IDE 开发环境的集成。
不能用11i的包,因为11i最低的vs也需要vs2017版本。
【iObjects .NET】三维建模怎么贴图?
【解决办法】三维建模贴图的两种方法:
1、如果数据集中对象较多的话,建议使用图层风格设置为其贴图。先将贴图的全路径存储到属性表中,然后通过Layer3DSettingVector设置顶部贴图和底部贴图字段。具体可以参考帮助文档Layer3DSettingVector部分,有示范代码
2、如果数据集中对象不多的话,可以通过GeoModel3D.Style3D为单个对象赋材质:
GeoStyle3D.SideTextureFiles :获取或设置用于侧面纹理渲染的一系列图片文件的全路径。对三维场景中的线、面几何对象设置拉伸高度时,会形成拉伸面,拉伸面就是侧面,使用该属性指示的图片可对侧面进行纹理渲染。该属性仅当将三维场景中的线、面几何对象的高度模式设置为非地表高度模式时有效。由于可设置多张例如:形成了9个拉伸面,如果设置9张侧面贴图,则每个面一张贴图;设置8张侧面贴图,则前7个面分别各用一张贴图,最后两个面共用一张贴图;设置7张侧面贴图,前6个拉伸面各用一张贴图,后三个面共用一张贴图;依次类推。
【iObjects .NET】单值专题图怎么更改单项的颜色?类似于桌面的单值专题图更改颜色。
【解决办法】1.通过mapControl1.Map.Layers[0].Theme获取专题图
2.通过ThemeUnique.Item 获取到获取指定序号的单值专题图子项。
3.通过ThemeUniqueItem.Style 为其重新设置风格。
【UE】保存关卡后UE5工程路径下没有Layerinfo文件夹
【解决办法】我们新版产品做了相关的调整,运行时候,右键图层管理, 在场景属性界面有个场景保存,点击后会在文件夹中生成 Layerinfo文件夹。贴图
【UE】按步骤安装的UE5插件,也申请了许可,为什么控制器部件什么都点不了
【解决办法】目前我们 UE支持的版本是5.0,检查一下软件版本。
打开示例关卡,选择 SuperMap 内容文件夹下面的 Map 文件夹,双击打开 Map 场景,或新建MAP后,在插件页面进行操作。(如果默认情况下不显示插件内容,可以点击该图右下角位置的视图选项,勾选显示插件内容,显示出插件包的内容。)
【iObjects Spark】如何将DataFrame转为FeatureRDD?
【解决方案】使用SparkSQLUtils的toFeatureRDD方法,如下:
val featureRDD= SparkSQLUtils.toFeatureRDD(resultDF, featureTypeName, null)
【iObjects C++】【11.0.1】 请问 iObjects C++ 节点编辑时如何设置节点捕捉效果?
【解决办法】 建议参考以下代码开启在节点编辑模式下开启节点捕捉效果:
UGMapEditorWnd* mapWnd = mapControl->GetUGMapWnd();
mapWnd->SetUserAction(UGDrawParamaters::uaTrack);
UGEditToolPack* toolPack = mapWnd->GetEditToolPack();
toolPack->SetSnapeToolEnable(true);
toolPack->SetAccessibilityActionPointMode(UGEditType::EAA_AddPoint);
【iObjects Java】【11.0.1】 在 Linux 操作系统中已配置 Oracle 11g 客户端后依然无法正常打开 Oracle 数据源怎么解决?
【问题原因】 iObjects Java 组件运行时并没有正确地读取 Oracle 11g 客户端环境。
【解决办法】 建议参考以下步骤逐一排查异常原因并修复:
- 在 iObjects Java 组件的 Bin 目录下检查 libSuEnginOracle.so 文件依赖;
ldd libSuEnginOracle.so | grep not - 检查当前 Oracle 客户端位数版本是否与 iObjects Java 组件位数一致;
- 确认 Oracle 客户端是否是从 Oracle 官网下载的,若是,请联系超图技术支持提供 Oracle 11g 客户端,iObjects Java 组件目前无法正常读取从 Oracle 官网下载的部分客户端环境;
- 目前在 Linux 操作系统上使用 iObjects Java 组件打开 Oracle 数据源,需要使用 IP:Port\实例名,部分 Linux 系统上不能单独使用 TNS 监听中配置的网络服务名。
【iObject Java】【11.0.1】【10.2.1】 请问 iObjects Java 组件如何使用 Web 许可?
【解决办法】 iObjects Java 组件中提供了 BSLicense 类用于登录 web 许可中心,使用详情可参考 iObjects Java 组件帮助文档。
public static void main(String[] args) {
int[] loginFeatures = new int[] { 10002, 10003 };
// 登录Web许可
BSLicense.login("192.168.17.32", 9183, loginFeatures);
// 连接Web许可中的许可模块,验证Web许可获取是否成功,成功返回0。
License lic = new License();
int code = lic.connect(10002);
System.out.println("code = " + code);
// 登出Web许可
BSLicense.logout();
// 再次连接许可模块,验证Web许可是否已经无效,返回值应该为非0值。
code = lic.connect(10002);
System.out.println("code = " + code);
System.out.println("end");
}
【iObjects Java】【11.0.1】 请问 iObjects Java 组件如何从工作空间对象中获取 Map 对象?
【解决办法】 建议参考以下逻辑:
Map map = new Map(workspace);
String mapName = workspace.getMaps().get(0);
map.open(mapName);
【iObject JAVA】怎么设置矢量数据集的坐标系呢?
【解决方法】Dataset下有个setPrjCoordSys方法,可以直接设置坐标系。
【iObjects.Net】在场景中,如何开启并设置VR效果?
【解决方案】
SceneControl sceneControl=new SceneControl();
Scene scene=sceneControl.Scene;
scene.IsStereoEnabled = true;//获取或设置是否开启立体显示功能,默认是为 false,即没有开启立体显示功能。
scene.StereoMode = StereoMode.Htcvive_VR;//获取或设置立体显示的模式
这里设置为虚拟现实头盔呈现方式。此方式专为外部设备HTC Vive虚拟现实头盔提供支持。
【iObjects.Net】三维图层管理器里,想修改图层树的图层名称,请问用哪个方法?
【解决方案】图层名是不能修改的,默认格式就是数据集名@数据源名。实际修改的是图层标题,Layer3D.Caption图层的名称在图层所在的场景中唯一标识此图层。并且该标识不区分大小写。代码如下://修改图层标题
SceneControl sceneControl=new SceneControl();
LayersControl layersControl=new LayersControl();
Layer3D layer3D = sceneControl.Scene.Layers[0];//获取场景中index=0的图层
layer3D.Caption = "moioh";//设置图层标题
layersControl.Scene = sceneControl.Scene;
layersControl.Layer3DsTree.Update();//图层树更新
【iObjects.Net】怎样获取场景中的单值专题图图层?
【解决方案】
//通过layer3D拿到Layer3DDataset的Theme3DUnique,获取专题图图层
SceneControl sceneControl=new SceneControl();
Layer3D layer3D = sceneControl.Scene.Layers[0];
Layer3DDataset layer3DDataset= layer3D as Layer3DDataset;
Theme3DUnique theme3DUnique1= layer3DDataset.Theme as Theme3DUnique;
【iObjects.Net】数据集怎样根据字段条件进行更新属性值?
【解决方案】关键代码如下:
DatasetVector datasetVector = workspace.Datasources[0].Datasets["aa"] as DatasetVector;
bool a= datasetVector.UpdateField("name", "'成都'", "name='丰富'");
"name"为需要更新的字段名,需要更新的字段不能够为系统字段,也就是说不可以为sm开头的字段(smUserID除外);“‘成都’”为指定的表达式,这里是更新后的字段值; "name=‘丰富’"为要更新记录的查询条件,如果为空字符串,则更新表中所有的记录。
注意语句写法,少中间那个分隔符返回值就会为false。
【iObjects.Net】在组件中如何判断当前电脑有试用许可?
【解决方案】
License license = new License();//新建许可信息类
license.Connect(65400);//65400是试用许可的模块号
【iObjects.Net】KML图层里添加对象之后LayerControl图层管理器里看不到添加的对象,请问该如何解决?
【解决方案】代码需要将添加的feature更新到LayerControl里。
SceneControl sceneControl=new SceneControl();
LayersControl layersControl=new LayersControl();
Layer3DKML layer3DKML = sceneControl.Scene.Layers[0] as Layer3DKML;//获取场景中的KML图层
GeoPlacemark placemark = new GeoPlacemark();//新建三维地标几何对象
Feature3D feature3D = new Feature3D();//新建三维要素类
feature3D.Name = "aa";
feature3D.Geometry = placemark;
layer3DKML.Features.Add(feature3D);//KML图层添加三维要素类
String kml = feature3D.ToKML();
feature3D.FromKML(kml); //从KML字符串中导入三维要素对象
layersControl.Layer3DsTree.RefreshNode(layersControl.Layer3DsTree.Layer3DsNode);
sceneControl.Scene.Refresh();
【iObjects.Net】组件中提取TIN地形某点的高程用哪个接口更好?
【解决方案】推荐CacheProcessor3D.GeometryMatchTIN 方法 (String, List<(Of <(Geometry>)>), MatchParameter),其中String代表TIN地形缓存配置文件(sct文件),List<(Of <(Geometry>)>)代表指定的线、面对象集合。MatchParameter设置匹配参数。
另外注意该接口只支持地理坐标系的点。
【iObjects.Net】倾斜入库哪个接口可以生成s3mb格式的缓存?
【解决方案】
ObliquePhotogrammetryBuilder.OutFileType=CacheFileType.S3MB;//倾斜入库输出的文件类型为S3MB
【iObjects.Net】组件里怎样将场景里的导航罗盘和比例尺关闭?
【解决方案】设置代码如下:
NavigationControl.IsVisible=false;//设置导航罗盘控件不可见
SceneControl.Scene.IsScaleLegendVisible=false;//设置比例尺不可见
【iObjects java】在linux系统下创建含中文字符的数据源失败
【问题原因】使用的linux系统环境不支持中文
【解决办法】更换系统字符集为zh_CN.gbk
【iObject java】Java组件生成三维切片缓存,生成过程中失败。
【解决办法】setFileType只能选择CacheFileType.S3MB或者是CacheFileType.S3MBlock,选择为CacheFileType.S3M就会出现生成了缓存但是没有*.scp文件的情况
【iObject Java】在Linux中导入dwg,其中中文字段值变成这种“/M+5CFFBM+5B7COM+5B5C7M+5B8DF”,如何解决?
【解决办法】因为导出dwg的AutoCAD版本的问题,另存为高版本 2007、2018,再在Linux中导入数据源就可以了
【iObject Java】Java组件更新日期型字段,支持传入字符串吗?
【解决办法】11.1.0版本的Java组件支持传入“XXXX-XX-XX”格式的字符串和Date类型的值
【iObjects Java】Java组件计算两个模型对象是否相交用哪个方法?
【解决办法】使用方法:BooleanOperator3D.intersect()
【iObjects Java】运行Java报错no SuBase in java.library.path,该如何解决?
【解决办法】
1.在Java组件的bin路径下执行ldd libWrapjCore.so |grep not看是否缺依赖
2.环境变量中配置LD_LIBRARY_PATH和PATH两个变量值
【iObjects Java】Java组件如何计算椭球面积?
【解决办法】Geometrist类里面有个计算经纬度面积computeGeodesicArea(Geometry geometry, PrjCoordSys prjCoordSys)
【iObjects Java】【11.1.0】新版本Java组件中对矢量数据集创建和删除矢量金字塔的接口是什么?
【解决办法】
1、创建矢量金字塔:DatasetVector.buildVectorPyramid()
2、删除矢量金字塔:dropVectorPyramid()
【iObjects】WMS、WFS、WCS、iServerREST服务支持哪些版本?
【解决办法】WMS:1.0.0、1.1.0、1.1.1、1.3.0;
WFS:1.0.0、1.1.0、2.0.0;
WCS:1.0.0、1.1.0、1.1.1、1.1.2;
iServerREST:iServerREST地图服务
【iObjects】WMS服务能否指定打开某些图层?
【解决办法】可以,直接打开默认加载全部图层,但当WMS服务中存在无效图层,请求数据会返回空,这时需要指定加载有效的图层。具体操作:在URL中增加参数 LAYERS=xxx&xxx&… 或者 TITLES=xxx&xxx&…,xxx为可以为layer名和title名,图层的title名可通过桌面查看。
【iObjetcs Java】Linux_arm、Linux_x86上Web数据源打不开
【解决办法】1、首先请确认是否为依赖库的问题。将环境变量PATH和LIB_LIBRARY_PATH设置到SuperMap的bin包下,采用命令 “ldd -r 库名称”,如下图,通常检查libcurl、libSuEngineXXX(XXX为相应服务名称)。
2、定位到问题库后,需要在下面地址中拷贝对应版本的库到bin目录下,重新 “ldd -r 库名称” 查看,直到所有库均没有问题再尝试打开Web数据源。
【iObject.NET】如何让一列字段被赋同一个值?
【解决办法】
方法1:常规数据集编辑,数据集转记录集,遍历更新属性。
方法2:使用更新列接口即可DatasetVector.updateField,
该接口只需要调用一次,就可以更新整列,并且更新效率比遍历更快。
建议使用方法2。
【iObject.NET】如何实现轨迹重建分析功能?
【解决办法】
方法1:使用iobject.net的接口AddressMatch来实现,该接口使用的是纯本地数据,和iserver没有关系。
方法2:使用.net调用iserver的rest api,向isever已经发布的地址匹配服务address进行请求,该方法就是单纯使用.net和前端一样向iserver发送rest/post/get请求,和iobject没有关系。