超图使用问题汇总
1. 切地图栅格瓦片的时候,必须确认生成地图的源数据坐标系已经被识别,否则无法进行全球剖分
下图就是未识别坐标系的情况
2. 切地图矢量瓦片的时候,需要使用idesktopx来切,idesktop无法生成矢量瓦片。
矢量瓦片切片时,存储类型参数选择紧凑是cf格式,选择原始是mvt格式。
3. 使用超图的cesium客户端开发矢量地图属性查询应用时,需注意查询数据源:
// 官方网站给的例子
var result = mvtMap.querySourceFeatures({
sourceLayer: selectLayer.id,
filter: ["==", "label2", "g4"],
});
// 实际应用,发现需要采用如下设置才能查询
var result = mvtMap.querySourceFeatures({
sourceLayer: selectLayer["source-layer"],
filter: ["==", "label2", "g4"],
});
4. 使用超图的cesium客户端开展BIM模型属性查询主要注意的点
- 4.1 针对要发布的iDesktop工作空间,需要存在作为显示的<font color="FF00BB">BIM模型场景</font>、需要查询<font color="FF00BB">BIM模型数据源</font>,如下图所示:
- 4.2 iServer发布空间时,需要勾选三维服务和数据服务,如下图所示
- 4.3 iServer发布服务后,使用需要注意的点:
- 4.3.1 三维服务使用要点:
try{
//场景添加S3M图层服务
// open打开的路径需要到:.../realspace这一级
var promise = scene.open("http://localhost:8090/iserver/services/3D-KongJian/rest/realspace");
viewer.flyTo(promise);
}
catch(e){
if (widget._showRenderLoopErrors) {
var title = '渲染时发生错误,已停止渲染。';
widget.showErrorPanel(title, undefined, e);
}
}
接上述点
- 4.3.2 数据服务要点:
try{
//场景添加S3M图层服务
// open打开的路径需要到:.../realspace这一级
var promise = scene.open("http://localhost:8090/iserver/services/3D-KongJian/rest/realspace");
viewer.flyTo(promise);
Cesium.when(promise,function(layers){
// iServer管理服务界面,找到上述场景三维服务“3D-KongJian”的路径,到.../realspace/datas路径下,就是此处find需要定位的图层名字
var layer = scene.layers.find('隧道模型改材质gb2312@平面数据源');
//读取子图层信息,通过数组的方式返回子图层的名称以及子图层所包含的对象的IDs
layer.setQueryParameter({
// url对应到iServer发布时,创建的数据服务路径,此处需要填到.../rest/data这一级
url:"http://112.163.107.224:8090/iserver/services/data-KongJian/rest/data",
// dataSourceName 对应到我们需要查询的数据源,.../rest/data/datasources这一级下列表中的数据源名字
dataSourceName : "平面数据源",
// dataSetName 对应到我们需要查询的数据集,.../rest/data/datasources/xxx数据源/datasets这一级下列表中的数据集名字
dataSetName : "隧道模型gb2312"
});
});
}
catch(e){
if (widget._showRenderLoopErrors) {
var title = '渲染时发生错误,已停止渲染。';
widget.showErrorPanel(title, undefined, e);
}
}
5. iServer许可过期后,需要重新申请激活
- 首先,停止IServer;
- 然后,找到@iServer安装目录/support/SuperMapLicenseCenter/SuperMap.LicenseCenter(for .NET 4.0).exe,管理员身份运行;
- 然后,生成*.report的运行报告,如下图所示;
- 然后,打开超图许可申请官网申请,选择运行报告上传后,点击“提交”;
- 然后,申请成功,邮箱会接受到官方发放的*.licx许可文件
- 然后,SuperMap.LicenseCenter(for .NET 4.0).exe中加载*.licx许可文件,进行“更新”激活就行,如下图所示;
- 最后,重新启动iServer即可使用
注:后面确认,可以直接申请License后,替换默认存放目录的内容:C:\Program Files\Common Files\SuperMap\License
生成*.report的运行报告
激活*.licx许可文件
6. 超图iClient3D for Cesium使用ArcGIS在线影像服务的方式
6.1 使用ArcGisMapServerImageryProvider接口
//方式一:通过ArcGisMapServerImageryProvideri接口,但不支持CGCS2000坐标系
var layer = viewer.imageryLayers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
url: 'https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer'
}));
viewer.flyTo(layer);
6.2 使用iServer转发ArcGIS的影像服务,再用客户端访问iServer发布的服务。
使用iServer转发ArcGIS的影像服务的步骤:
- 数据源:ArcGIS REST地图服务,如下数据源选择图所示
- ArcGIS地图服务地址:https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer。配置如下图所示
- 服务类型:WMTS1.0.0服务。服务选择如下图所示
- 启用地图瓦片缓存。
- 发布。
数据源选择图示:
配置图示:
服务选择图示:
客户端访问iServer发布的WMTS服务:
- 图源WMTS参数识别。打开iServer发布的WMTS服务,比如
@iserver服务器地址:8090/iserver/services/map-arcgis/wmts100
,定位参数,如下图所示 - 客户端代码参数填充。
定位wmts100服务参数图示:
客户端调用代码:
//方式三:通过WebMapTileServiceImageryProvider接口,构造WMTS地址
// 填充参数到服务的wmts相关的xml中定位查找
var wmtsLayer = viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
url: '@iServer服务器地址:8090/iserver/services/map-arcgis/wmts100',
layer: 'World_Imagery',
format: "image/png",
style: 'default',
tileMatrixSetID: "Custom_World_Imagery",
maximumLevel: 17,
}));
viewer.flyTo(wmtsLayer);
7. iserver子域优化
子域环境搭建及使用:
由于浏览器对同一个域名服务的并发请求数量有限制,通过部署多个子域名,加大向iServer发送数据请求的并发量,从而达到提升加载速度的目的。以下以nginx为例搭建环境:
- 描述:利用nginx客户端,映射不同的端口地址来对iServer进行访问,搭建子域环境,提升性能。
- 应用场景:充分利用server机器的硬件性能,加大并发量,提升加载速度。
具体使用:
参考:http://support.supermap.com.cn:8090/webgl/Cesium/examples/TopicDOC/subdomains.html
7.1 nginx客户端部署
修改nginx.conf文件,如下图所示,修改完成重启nginx,则 http://localhost:8081/iserver、http://localhost:8082/iserver、http://localhost:8083/iserver 都会指向http://localhost:8090/iserver
server {
listen 8091;
listen 8092;
listen 8093;
server_name localhost,127.0.0.1,192.168.43.100;
...
location /iserver {
proxy_pass http://localhost:8090;
proxy_redirect off;
proxy_buffering off,
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
7.2 代码使用
scene.open()打开场景
var promise = viewer.scene.open('http://{s}/iserver/services/3D-CBD/rest/realspace', undefined, {
subdomains: ['localhost:8081', 'localhost:8082', 'localhost:8083']//设置子域
});
scene.addS3MTilesLayerByScp()添加模型
var config = {
subdomainConfig: {
urlScheme: " http://{s}/iserver/services/3D-CBD/rest/realspace",
subdomains: ['localhost:8081', 'localhost:8082', 'localhost:8083']//设置子域
},
name: "building"
};
var promise = viewer.scene.addS3MTilesLayerByScp('http://localhost:8090/iserver/services/3D-CBD/rest/realspace/datas/building/config', config);
Cesium.when(promise, function (layer) {
viewer.flyTo(promise);
});
地形
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: new Cesium.CesiumTerrainProvider({
url: ' http://{s}/iserver/services/3D-terrain/rest/realspace/datas/dem',
subdomains: ['localhost:8081', 'localhost:8082', 'localhost:8083']//设置子域
})
});
影像
var imageLayer = viewer.imageryLayers.addImageryProvider(new Cesium.SuperMapImageryProvider({
url: ' http://{s}/iserver/services/3D-image/rest/realspace/datas/image',
subdomains: ['localhost:8081', 'localhost:8082', 'localhost:8083']//设置子域
}));
viewer.flyTo(imageLayer);
MVT
mvtMap = scene.addVectorTilesMap({
url: 'http://{s}/services/map-mvt-JingJinDiQuDiTu/restjsr/v1/vectortile/maps/JingJin',
subdomains: ['localhost:8081', 'localhost:8082', 'localhost:8083']//设置子域
canvasWidth: 512,
name: 'testMVT',
viewer: viewer
});
7.3 效果
加载效果:从网络请求里看是否有不同端口的请求,比如’localhost:8081’, ‘localhost:8082’, ‘localhost:8083’
8. iclient for ceisum 与 iserver数据查询交互
空间查询:
// 通过点击查询用于表示单体化的面要素,添加到场景中高亮显示。
// 注意:空间查询操作只能针对二维数据 三维数据无法操作
// 如果需要获取空间对象的Z坐标,做法如下:
// - 首先同时制作两份数据,一份二维,一份三维,两份数据的空间对象标识码一致
// - 发布时,一个数据源,同时包含两个数据集:二维数据集和三维数据集
// - iclient使用时,先利用空间查询得到二维数据集的空间对象标识码,再去获取三维数据集的控件对象Z坐标
function queryByPoint(queryPoint) {
var queryObj = {
"getFeatureMode": "SPATIAL",
"spatialQueryMode": "INTERSECT",
"datasetNames": [dataSourceName + ":" + dataSetName], // 约定格式:数据源:数据集
"geometry": {
id: 0,
parts: [1],
points: [queryPoint],
type: "POINT"
}
};
queryObjJSON = JSON.stringify(queryObj); // 转化为JSON字符串作为查询参数
$.ajax({
type: "post",
url: dataServiceUrl,
data: queryObjJSON,
success: function (result) {
var resultObj = JSON.parse(result);
// console.log(resultObj)
if (resultObj.featureCount > 0) {
addClapFeature(resultObj.features[0]);
}
},
error: function (msg) {
console.log(msg);
}
})
}
SQL查询
function doSqlQuery(sqlStr) {
var sqlParameter = {
"datasetNames": [dataSourceName + ":" + dataSetName], // 约定格式:数据源:数据集
getFeatureMode: "SQL",
queryParameter: {
attributeFilter: 'SMAREA>500' // 这里需要注意:字段名必须转为大写
}
};
var url = "http://www.supermapol.com/realspace/services/data-cbd/rest/data/featureResults.rjson?returnContent=true"; // 数据请求url建议都加上featureResults.rjson?returnContent=true,有助于返回值的解析
var queryData = JSON.stringify(sqlParameter);
$.ajax({
type: "post",
url: url,
data: queryData,
success: function (result) {
var resultObj = JSON.parse(result);
console.log(resultObj);
if (resultObj.featureCount > 0) {
onQueryComplete(resultObj.features);
}
},
error: function (msg) {
console.log(msg);
},
// complete: function () {
// console.log("complete");
// }
})
// $.ajax({
// url: url,
// async: true,
// data: queryData,
// method: "POST"
// }).done(function (result) {
// var resultObj = JSON.parse(result);
// console.log(resultObj);
// if (resultObj.featureCount > 0) {
// onQueryComplete(resultObj.features);
// }
//
// })
}
9.超图二维面转三维面
idesktopx功能菜单:
【数据】–>【类型转换】–>【面->线】
【数据】–>【类型转换】–>【线->点】
【三维数据】–>【TIN工具】–>【提取数据】
这一步需要确定提取地形的sct、采样距离(默认1m)、匹配类型(默认顶面)等参数
【数据】–>【类型转换】–>【三维点->三维线】
【数据】–>【类型转换】–>【三维线->三维面】
但是,当前版本的idesktopx存在bug,三维线转三维面只会转换第一条记录
10.超图“处理自动化模型”使用汇总
iDesktopX新建好“处理自动化模型”后,右键“导出模型”,得到xxx.xml的“处理自动化模型”文件。
http://127.0.01:8090/ --> 界面打开“服务管理” --> “快捷操作-处理自动化”
打开处理自动化界面:
文件 --> 导入模型 --> 选择xxx.xml“处理自动化模型”文件
以【创建数据源为例】:
点击【发布】,发布为自定义模型。
在“模型”界面,选择刚刚发布的模型,右键选择“打开资源页”
根据官方教程,拼凑url、token、请求参数
1.http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iServer/Server_Service_Management/Geoprocessing/usingby_REST_API.htm
2.https://blog.csdn.net/supermapsupport/article/details/122863108
例如
资源页url + jobs token保存到http头的Authorization字段中
或者 资源页url + jobs? + token=xxxx
http://127.0.0.1:8090/iserver/services/geoprocessing/restjsr/gp/v2/sps.WorkflowProcessFactory.models.%E8%87%AA%E5%AE%9A%E4%B9%89:datasource.create/jobs
Authorization字段值为:dWqNBsS5mhkbRzi_E6vXWNqkD1M15lLMnaK2ffgHURcWWqtrCITVhkVZ86VEKiGHvlHpExH_TETYWM_egnAhHw…
或者:
http://127.0.0.1:8090/iserver/services/geoprocessing/restjsr/gp/v2/sps.WorkflowProcessFactory.models.%E8%87%AA%E5%AE%9A%E4%B9%89:datasource.create/jobs?token=dWqNBsS5mhkbRzi_E6vXWNqkD1M15lLMnaK2ffgHURcWWqtrCITVhkVZ86VEKiGHvlHpExH_TETYWM_egnAhHw…
请求参数保存到body中:
比如:
{
“parameter” : {
“datasource.udbx”:“F:/supermap_data/workflow/hello/4.udbx”
},
“environments”: [
{
“type”:“BDT_Spark_Environment”
}
]
}
具体参考官方文档。
此外,token由用户管理中的“令牌”生成。