# 2020 SuperMap 常见问题剖析

摘自 SuperMap by lauxb

# 三维篇

图片 说好的三维来啦 图片

1、 SuperMap iDesktop 加载多个模型图层添加到场景中,随着鼠标缩放面出现一闪一闪的现象,造成这种现象的原因是什么?

答:这种现象有两种可能性。

(1)存在重复面。解决办法是通过桌面软件去除重复面,操作步骤:三维数据—模型工具—移除重复面。 (2)共面闪烁。模型图层与地面或者其他图层模型对象存在重叠共面,可以通过抬高模型图层底部高程或者设置模型多边形偏移来解决(图层属性面板-多边形偏移)。

2、在 3ds Max 模型导入 SuperMap iDesktop 后发现模型纹理明显变暗,是否有办法优化?

答:可能存在三个因素的影响,请逐一确认并参照修改:

(1)光照时间影响:关闭场景中的太阳特效或者设置太阳时间为中午。 (2)材质颜色影响:在“三维数据-模型工具-修改材质颜色”功能中将模型材质颜色修改为白色。 (3)顶点颜色影响:在 3ds Max 中将模型顶点颜色设置为白色。

3、SuperMap iClient3D for WebGL 地表设置半透明后怎么把地下网格给关掉?

答:可以设置viewer.scene.terrainProvider.isCreateSkirt = false即可关闭网格。

4、在 SuperMap iDesktop 中添加模型到场景中,定位到图层时不显示,可能的原因有哪些?

答:(1)模型高度比较高或者比较低,在地下或在天上。

解决方案:使用三维数据—模型工具—属性提取—提取底部高程。提取后在数据表中查看提取的数值。数值为负值,则为地下数据,打开场景的地下模式即可。若数值较大,则模型高度较高,在风格设置—底部高程将底部高程降低,数值为提取的高度值。

(2)提供的数据范围跨度大,定位后相机高度太高,模型显示得小,因此看不到。

解决方案:打开模型编辑,再打开模型图层的关联属性表,选中一个对象,场景中会出现选择框,使用鼠标缩放至选择框即可看到。 (3)模型数据范围不正确。

解决方案:在属性表中查看模型的 bounds 范围,进行降序或者升序排列,删除范围错误的数据,再重新计算数据集范围。

5、模型在 SuperMap iServer 发布三维服务之后预览不显示,可能是哪些原因?

答:(1) 模型数据没有切 s3m 缓存,SuperMap iDesktop 中先切缓存之后再发布。

(2) 检查 iDesktop 与 iServer 是否版本保持一致。

(3) 检查工作空间中数据路径是否正确且为相对路径。

6、倾斜摄影模型发布成三维服务的操作流程是什么?

答:(1)使用桌面软件对倾斜摄影模型数据(osgb 格式)生成配置文件。

(2)使用桌面软件倾斜入库功能生成 s3m(s3mb)缓存。

(3)将生成后的缓存 scp 配置文件添加到新球面场景并定位到该模型处,保存场景,保存工作空间。

(4)在 iServer 里用上一步保存的工作空间发布三维服务。

详细流程可参考技术专题http://support.supermap.com.cn:8090/webgl/examples/TopicDOC/LoadObliqueModel_OperateTopic.html。

7、SuperMap iClient3D for WebGL 产品中加载三维影像缓存有白边有什么办法解决?

答:以下两种方案均能解决,推荐使用第一种方案。

(1) 在 SuperMap iDesktop 中保存成地图,对地图切三维缓存并设置背景透明。

(2) 在 WebGL 前端设置影像图层透明色为白色 ,参考代码如下 imagerylayer.transparentBackColor=new Cesium.Color(1,1,1);

Imagerylayer.transparentBackColorTolerance=0.2;

8、SuperMap iClient3D for WebGL 产品中场景中的白模怎样设置绚丽的渐变色?

答:可通过对白模图层分层设色实现,主要接口为 S3MTilesLayer.hypsometricSetting,参考范例为http://support.supermap.com.cn:8090/webgl/examples/webgl/editor.html#flood。

9、 SuperMap iClient3D for WebGL 产品中如何修改地下颜色?

答:开启地下之后设置 scene.underGlobe.baseColor 参数。

10、SuperMap iClient3D for WebGL 产品中 scene.open()打开场景时,如何设置自定义请求头?

答:在打开场景之前设置

scene.customRequestHeaders = {
  token: "dfvdgdfg...",
};
1
2
3

11、SuperMap iClient3D for WebGL 产品中如何修改 mvt 标签的底部高程?

答:针对 mvt 矢量图层设置 mvtlayer.style3D.bottomAltitude 为想要的其他高度值。

12、SuperMap iClient3D for WebGL 产品中圆环状扫描线怎样确定半径?

答:可通过调整 ScanEffect 中运行周期(period)和速度(speed)来修改半径,半径(m)=运行周期(s)X 速度(m/s),这两个参数越大,扫描线半径越大。

13、3ds Max 模型导入到 SuperMap iDesktop 后模型边缘不够平滑是否有办法优化?

答:在 SuperMap iDesktop“文件-选项-环境”中开启【场景反走样】,并可适当调整反走样值。

14、在 SuperMap iDesktop 中对三维面设置半透明前景色,生成三维切片缓存后,面内出现三角网线框,如何解决?

答:生成缓存之前,在风格设置中将填充模式由“填充与轮廓”改为“填充”再生成缓存,或者在生成缓存后,将缓存图层填充模式设置为“填充”。

15、在 SuperMap iDesktop 中 TIN 地形镶嵌之后接边处出现类似断崖现象,如何平滑处理?

答:在进行 TIN 地形镶嵌时设置缓坡宽度,此参数值越大地形接边处越平滑。

16、三维切片缓存的对象 ID 默认为 SmID 字段,能否改为自定义字段?

答:通过数据集右键菜单生成缓存和批量生成模型缓存时,在生成缓存界面中选择指定自定义字段作为对象 ID 字段,所选择字段需为数值型字段。

17、在 SuperMap iDesktop 中导入 3DS/SGM 格式模型符号,再对三维点设置符号时,符号颜色不正确,如何解决?

答:颜色的问题是由于模型本身的纹理颜色和点的前景色混合导致,将三维点的颜色设置成白色即可。

18、3ds Max 插件中插入点的参数意义?

答:(1)导出为平面坐标系时,插入点是模型数据导入 udb 数据源的偏移量,导入 udb 数据源之后的模型坐标为 3ds Max 模型坐标加上插入点坐标。

(2)导出为球面坐标时,插入点是模型数据的原点(0,0)对应的经纬度位置。

通常数据生产应用时一般还是选择投影坐标系,但是投影坐标系一般坐标值比较大,为了保证数据精度,生产过程中往往会减去一个偏移值,这个偏移值就是导出平面坐标系的插入点坐标。

19、SuperMap iClient3D for WebGL 中打开场景,如何关闭自动飞行定位,保持视口不变?

答:在打开场景时设置 autoSetView 参数为 false

var promise = scene.open(url, undefined, {
  autoSetView: false, //相机位置不变
});
1
2
3

20、SuperMap iClient3D for WebGL 中如何解决平面场景相机定位不准问题?

答:通过修改相机 convert 参数为 false 来解决,具体如下

scene.camera.setView({
  destination: new Cesium.Cartesian3(x, y, z),
  convert: false, //平面坐标
});
1
2
3
4

21、在 scp 中如何查看在倾斜摄影数据的瓦片边长?

答:用记事本打开 scp,搜索 FileName 标签下包围球半径Radius 标签,瓦片边长大约为该半径值的 1.4142 倍。

22、模型缓存里的 LOD 层级和简化率是什么含义?

答:LOD 层级表示粗糙层的层数,其中 0 层代表次精细层。简化率代表简化百分比,0 代表不简化。

# 二维篇

图片 说好的二维 它来啦 图片

1. 问:SuperMap iDesktopX 中打开数据库型数据源,新建的数据集名称和数据库中存的表名不一致,如何保持一致?

答:iDesktopX 默认数据集名称与对应表名不一致,此举是为了保证数据集名称可自定义的情况下同时还能满足数据库表名约束。在 iDesktopX 中的选项卡【文件】-【选项】-【环境】中勾选“表名与数据集名称保持一致”选项,后续新建的数据集名称将和表名保持一致。

2. 问:在 SuperMap iDesktop 中导入一份 CAD 数据集,想对数据集转换坐标系。但是投影转换按钮为灰色不可用,该如何解决?

答:CAD 数据集通常是不带坐标系的,导入默认为平面无投影,投影转换需要原始数据带有坐标系,所以需要先对 CAD 数据集设置对应的坐标系,然后再进行投影转换。

3. 问:在 SuperMap iDesktop 中打开 MySQL 数据库型数据源,创建中文名称的数据集失败,是什么原因?

答:此问题是由于数据库默认字符集不匹配造成,可在 MySQL 安装目录中找到 my.ini 文件,设置默认的字符集编码:default-character-set=utf8,然后重启 MySQL 服务即可。

4. 问:在 SuperMap iDesktop 中导入影像数据集,如何去除影像的黑边?

答:可以通过以下三种方式去除黑边:

(1)使用【地图裁剪】-【选中对象裁剪】功能,选择影像边界进行裁剪。

(2)将影像数据集添加到地图窗口,右键图层--图层属性,在弹出框中设置图层背景透明。

(2)也可以新建一个面数据集,绘制需要显示的区域面,然后在影像数据集属性菜单中设置数据显示范围。

5. 问:在 SuperMap iDesktopX 中可以保存 MySQL 工作空间,但打开却报错"MySQL Got a packet bigger than 'max_allowed_packet' bytes"?

答:这是由于 MySQL 中max_allowed_packet 值太小数据传输失败,在 my.ini 中增加或者修改max_allowed_packet=16M 即可(根据实际情况设置)。

6. 问:安装许可驱动时报错”hasplmv.exe file(null) processing error”

答:这个一般是有杀毒软件或者安防软件拦截了 hasplmv.exe 这个文件的安装,建议先关闭杀毒或者安防软件再进行安装。

7. 问:在 SuperMap iDesktop 中将镶嵌数据集添加到地图窗口,缩小地图后影像突然消失

答:以下两个原因导致的问题:

(1)镶嵌数据集没有构建概视图,可以右键镶嵌数据集--构建概视图。

(2)镶嵌数据集构建了概视图,但是在构建概视图时设置的最大高度和最大宽度不合适,可以适当调整这两个参数的大小,如在构建概视图时设置的高度和宽度为 5120,可以修改为 2560

8. 问:在 SuperMap iDesktop 中连接 PostGIS 数据库时,使用非管理员账号是否也可以创建数据源?

答:非管理员账号也可以新建 PostGIS 数据源,但是需要先对数据库创建 PostGIS 扩展,Create extension postgis,创建扩展后就可以在 iDesktop 中用非管理员账号创建数据源。

9. 问:在 SuperMap iDesktop 中制作标签专题图,需要同时显示两个字段的内容,并且字段内容之间实现换行,sql 语句应该如何写?

答:UDB、MySQL 和 Oracle 引擎 :字段 A||char(10)||字段 B ;PostGIS 和 PostgreSQL 数据引擎:字段 A||chr(10)||字段 B

10. 问:在 SuperMap iDesktop 中可以实现分层导出 CAD 数据吗?

答:CAD 分层导出是可以实现的,需要在数据集中新建一个名称为 Layer 的宽字符类型字段,然后设置对应的字段值,该字段存储的值就是图层名,然后导出即可。

11. 问:在 SuperMap iDesktop 中在地图中如何将点的图标设置为本地图标,并且没有出现拉伸变形?

答:首先将图片导入到符号库,然后设置点图层风格为上一步导入的符号,将符号大小设置为 0,即使用图标本身的像素大小。

12. 问:现有一个点数据集和面数据集,想要统计每个面中包含的点数量,如何实现?

答:将点数据集中的 SmuserID 值全部设置为 1,在面数据集中新建一个名称为 Count 的整型字段;然后使用“属性更新”功能,将提供属性的数据集设置为点数据集,目标数据集为面数据集,空间关系选择“被包含”,取值方式为“求和”,字段设置为 SmuserID 更新 Count 字段,统计结果会保存在面数据集的 Count 字段中。

13. 问:在 SuperMap iDesktop 地图比较卡有什么办法优化吗?

答: 点击菜单栏【地图】-【制图】中【性能诊断】按钮,浏览地图,性能诊断窗口会以柱状图展示每个图层的查询/绘制耗时,将鼠标放在耗时较长的柱状图上,可获取较慢图层的名称、查询、绘制耗时,同时可根据【输出窗口】中绘制耗时优化文档和查询耗时优化文档对数据进行优化。

14. 问:在 SuperMap iDesktop 中如何通过输入坐标点来绘制点?

答:可以根据如下步骤进行操作:

(1)在数据源里新建一个点数据集,将点数据集添加到地图窗口,右键图层--开启可编辑,点击对象操作——对象绘制——点。

(2)在绘制设置里选中参数化设置。

(3)键盘按 Tab 键进行输入坐标值,x 坐标值输完继续按 Tab 键输入 y 坐标值,输完回车即可。

15. 问:在 SuperMap iDesktop 中将一个数据集添加到地图窗口,当有多个数据对象部分重叠时,能否根据属性来设置对象的显示顺序?

答:可以在图层管理器中右键选择图层属性,在对象显示顺序中选择相应字段。

16. 问:在 SuperMap iDesktop 中将影像数据添加到地图窗口,影像显示为黑色,如何解决?

答:一般情况下,黑色是因为图像显示有一定的拉伸策略,可在图层属性中设置影像的拉伸方式,若不确定拉伸方式,推荐优先选择最值拉伸。

17. 问:在 SuperMap iDesktop 中能否将多个 mongo 瓦片合并成一个瓦片?

答:新建一个地图窗口,在“地图”选项卡“数据”组中,点击“瓦片管理”按钮。在地图窗口右侧弹出“瓦片管理”面板。点击合并添加需要合并的瓦片即可。此功能需要瓦片数据的坐标系、瓦片块大小、索引范围、图片类型需要保持一致。

18. 问:现在有两份栅格数据集,需要将高分辨率的栅格数据更新到低分辨率的栅格数据上,该如何操作?

答:可以使用数据更新功能,此功能需要满足的条件是两个栅格数据集的像素格式和坐标系一致,同时范围上有重叠。

19. 问:在 SuperMap iDesktop 中是否可以制作像百度地图一样有立体效果的二维地图?

答:使用在“数据”选项卡“数据处理”组中,单击“地图制图”下拉按钮,选择“平面立体地图”,设置合适的偏移量,将平面立体地图可以将原来简单显示的平面地图变成有立体感的地图,结合最大最小比例尺,放大地图到一定的比例尺范围,就显示到该区域建筑的立体效果。

20. 问:在 SuperMap iDesktop 中怎么把空间对象转为 geojson 或 wkt?

答:可以在地图窗口中选择需要转换的对象,鼠标右键--导出为文件,即可选择导出为 geojson 或 wkt 格式。

# 服务器篇

图片 说好的服务器 它来啦 图片

1、Windows 上启动 SuperMap iServer 黑窗口闪退?

答:请检查当前机器 SuperMap iServer 默认端口 8090、8015 是否被占用,如果这两个端口被占用则无法正常启动服务。可以通过以下两种方式解决:

(1)关闭占用端口的应用程序,然后重新启动 SuperMap iServer。

(2)修改 SuperMap iServer 产品包中的默认端口号。修改%SuperMap iServer 安装目录%\conf\server.xml8090 和 8015 为其它未占用端口,保存修改后的文件重新启动 SuperMap iServer。

2、数据库型数据源在 SuperMap iDesktop 中打开并更新了数据,但是 SuperMap iServer 端没有更新?

答:将%SuperMap iServer 安装目录%\webapps\iserver\WEB-INF\iserver-system.xml 文件中 refreshDatasource 设为true(默认为 false 未开启同步更新),重启 SuperMap iServer。当 SuperMap iDesktop 中更新数据时,SuperMap iServer 中的数据会在设定的时间内同步更新。

3、SuperMap iPortal 注册服务后没有代理的地址?

答:SuperMap iPortal 10.1 之前的版本默认没有开启服务代理,10.1 及之后的版本默认开启了服务代理的。开启服务代理请参照 iPortal 帮助文档“开始 > 管理 iPortal > 站点配置 > 代理配置 > 服务代理 > 内置服务代理的配置”进行开启。

4、SuperMap iClient JavaScript 在进行数据集 SQL 查询时,设置 toIndex 为-1,但是最多只能返回 1000 条记录?

答:数据集 SQL 查询默认 maxFeatures 最大返回数量是 1000,如果需要返回更多,可以将 maxFeatures 属性值设大。

5、SuperMap iClient JavaScript 加载地图,字体偏小或者显示模糊,可 SuperMap iServer 预览正常?

答:iClient 代码对接的时候,需设置相应的比例尺或者分辨率,对应的设置参考各地图库的 API 接口,例如 iClient for Leaflet 设置地图的比例尺或分辨率是在 L.Proj.CRS 接口中设置:

var crs = L.Proj.CRS("EPSG:4326", {
  origin: [-180, 90],
  scales: [1 / 1000, 1 / 500, 1 / 100, 1 / 50],
  //resolutions:[0.0000023767925225662276,0.0000011883962612831138,2.376792522566227e-7]
});
1
2
3
4
5

6、SuperMap iClient JavaScript 数据区域以外有很多不透明的白色区域?

答:原因在于图层未设置背景透明。设置图层transparent属性为true即可,例如 SuperMap iClient for Leaflet 中使用L.supermap.tiledMapLayer对接地图,可以将对接参数设置为L.supermap.tiledMapLayer(url, {transparent: true}).addTo(map)

7、SuperMap iClient JavaScript 能否控制某一个子图层上的要素按条件显示?

答:可以。将子图层显示参数类 SuperMap.LayerStatus 中的 displayFilter 属性设置 SQL 过滤条件,即可按条件显示。

8、SuperMap iClient for Leaflet 进行几何查询时无法查询到数据?

答:如果是通过 Leaflet 绘制插件得到的几何对象去查询图层,请检查原始数据集本身是否为地理坐标系,如果不是则需要通过L.Util.transform方法进行坐标转换,将前端构造的几何对象转为投影坐标系再进行查,最后将返回的结果通过投影转换,转为地理坐标系的对象最终在前端显示。

9、SuperMap iClient for Leaflet 如何对接带 Key 的 iPortal 服务?

答:通过“url?key=keyvalue”的方式访问。例如 URL 地址可以是:http://support.supermap.com.cn:8099/ywutslmu/iserver/services/map-china400/rest/maps/China_4326?key=CBIrkfXEAjydLrfp364qgM3P

10、SuperMap iServer 如何通过 HTTPS 加密通信?

答:按照帮助文档步骤进行配置(开始 > 云端一体化 > GIS 系统与安全 > SuperMap GIS 系统安全机制 > 保护系统安全 > HTTPS 加密通信)。在线访问地址如下:http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iServer/Subject_introduce/Security/systemSecurity/HTTPS/HTTPS.htm

11、如何迁移 SuperMap iServer 服务到另一台机器?

答:如果数据均在共享磁盘(如 nas 存储),则无需考虑数据。若需将数据与 iServer 一同迁移,请保证数据文件与原服务器完整路径一致(数据库类型数据需要保证新机器能正常连通数据库服务器),具体方法:

(1) 在旧机器中,使用 SuperMap iServer 管理页面->备份与恢复功能,进行备份。

(2) 将旧机器备份后的文件拷贝到新机器,在新机器 SuperMap iServer 管理页面->备份与恢复中进行恢复。

12、SuperMap iClient for Leaflet 如何控制图层顺序?

答:可使用 Map pane 来进行控制,具体代码如下示例:

map.createPane("labels"); //创建窗格实例
map.getPane("labels").style.zIndex = 650; //设置zIndex值
L.tileLayer(url, { pane: "labels" }).addTo(map); //将图层绑定到窗格
1
2
3

(文档地址:https://leafletjs.com/reference-1.7.1.html#map-pane)

13、为什么在 Linux 系统上启动 SuperMap iServer 服务时,报如下类似错误:“Unable to set localhost. This prevents creation of a GUID”?

答:出现这种现象时,请在 /etc/hosts 文件中,配置主机名对应的 IP 地址,即将主机名映射到具体的 IP 地址。如加上下面最后一行,表示将机器名 linux-3z6l 映射到 192.168.112.213。

	# Syntax:
	# IP-Address Full-Qualified-Hostname Short-Hostname

	127.0.0.1	localhost
	192.168.112.213 linux-3z6l linux-3z6l
1
2
3
4
5

14、如果忘记 SuperMap iServer 初始化时创建的管理员账户密码怎么办?

答:在 SuperMap iServer 的%SuperMap iServer 安装目录%\bin 目录下有个 passwordreset.bat/passwordreset.sh 文件,专门用来处理用户忘记系统初始化时的管理员账户密码问题。如果忘记系统初始化时的管理员账户密码,可以通过以下操作重新创建管理员账户:

(1) 停止 SuperMap iServer 服务,即执行%SuperMap iServer安装目录%\bin 目录下的 shutdown.bat /shutdown.sh 文件。

(2) 执行 passwordreset.bat/passwordreset.sh 文件 。

(3) 重启 SuperMap iServer 服务,即执行 startup.bat/startup.sh 文件。服务启动后访问 SuperMap iServer 首页时,系统会自动跳转到创建管理员账户界面,此时只需重新创建管理员账户即可。

15、如何调整 SuperMap iServer 中数据库检查的频率?

答:SuperMap iServer 支持调整数据库检查的频率,即检查“数据库型 工作空间”是否改变或“数据库型数据源”是否断开的时间间隔。解决方法是:修改系统配置文件%SuperMap iServer 安装目录%\webapps\iserver\WEB-INF\iserver-system.xml 中的 <checkDatasourceConnectionInterval>参数值,修改完成后保存文件并重新启动 SuperMap iServer 即可生效。

16、SuperMap iServer 运行时 catalina.log 日志文件中出现较多条 INFO 级别的异常信息,例如“java.io.IOException: 断开的管道”,或“java.io.IOException: 您的主机中的软件中止了一个已建立的连接”。应该如何解决?

答:产生原因是服务端正在处理浏览器发过来的请求,未等服务端响应,浏览器关闭,从而导致服务端处理完后结果无法返回给浏览器产生异常信息,这一类信息一般不影响使用,建议将日志等级提高,通过 SuperMap iServer 内置 Tomcat 文件中的日志级别修改为WARNING(默认为FINE)即可,具体修改方法为:

(1) 用文本编辑器打开%SuperMap iServer安装目录%/conf/logging.properties文件

(2) 修改1catalina.org.apache.juli.AsyncFileHandler.level = FINE为:1catalina.org.apache.juli.AsyncFileHandler.level = WARNING

17、SuperMap iClient for Leaflet 通过地物编辑接口更新数据之后,如何刷新地图?

答:调用图层的redraw方法刷新地图,例如:layer=L.supermap.tiledMapLayer(url,{cacheEnabled:false}); layer.redraw();

18、SuperMap iClient for Leaflet 通过动态投影的方式对接地图,所有的地图参数都配置正确了还是不出图是什么原因?

答:对接动态投影除了配置地图的基本参数外还需要设置一个关键参数prjCoordSys,比如将 4326 的地图动态投影到 3857 需要在图层参数类中这样设置:L.supermap.tiledMapLayer(url,{prjCoordSys:{"epsgCode":3857}}).addTo(map);

19、SuperMap iServer 浏览地图时,为什么会出现同一标签字体不同的情况?

答:因为部署 SuperMap iServer 服务的系统中不存在该标签所使用的字体库。

解决方法是:在该系统中,安装该标签所使用的字体库。例如:Linux 下字体库的安装目录为 %SuperMap iServer安装目录%/support/fonts,将缺失字体放到该目录下,重启 SuperMap iServer 即可生效。

20、使用 SuperMap iServer 服务管理器中的“快速发布服务”向导发布文件型工作空间时,为什么“本地浏览”按钮不可用?

答:可能存在如下两种情况:

(1) SuperMap iServer 服务不在本地,可以使用“远程浏览”进行选择。

(2) IE9、IE10、Chrome、Safari 下,由于浏览器的安全控制,无法获取欲发布工作空间的准确路径,可以使用“远程浏览”进行选择。