超图使用问题汇总

文章详细列举了超图软件在地图切片、矢量瓦片生成、属性查询、BIM模型应用、许可管理、ArcGIS服务集成以及子域优化等方面的问题和解决方案,包括正确设置坐标系、使用idesktopx切矢量瓦片、查询数据源的注意事项、iServer服务发布和许可更新流程,以及通过nginx实现子域负载均衡以提升性能。
摘要由CSDN通过智能技术生成

超图使用问题汇总

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由用户管理中的“令牌”生成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值