首页 / 浏览问题 / 云GIS / 问题详情
动态分段时出现数据集不存在或者没有参数
24EXP 2017年07月24日

执行动态分段时,第一次刷新页面显示referenceLineM参数不存在,再次刷新就会显示路由数据集不存在。关闭isever打开工作空间后发现路由数据集就莫名其妙的消失了,请问这是为什么?以下是我的js代码,请老师帮忙看一下哪里有问题,十分感谢。

var map, layer, themeLayer,
    url="http://localhost:8090/iserver/services/map-bike-sharing/rest/maps/beijing",
    url2="http://localhost:8090/iserver/services/spatialAnalysis-bike-sharing/restjsr/spatialanalyst";
function init(){
    layer = new SuperMap.Layer.TiledDynamicRESTLayer("beijing", url, { transparent: true, cacheEnabled: true }, { maxResolution: "auto" });
    layer.events.on({"layerInitialized":addLayer});
    map = new SuperMap.Map("map",{allOverlays:true, controls: [
        new SuperMap.Control.LayerSwitcher(),
        new SuperMap.Control.ScaleLine(),
        new SuperMap.Control.Zoom(),
        new SuperMap.Control.Navigation({
            dragPanOptions: {
                enableKinetic: true
            }})]
    });
}

function addLayer() {
    map.addLayers([layer]);
    map.setCenter(new SuperMap.LonLat(12963487.7761907, 4852179.97174134),12);
}
//生成动态分段
function GenerateSpatialData(){
    clearThemeLayer();

    //配置数据返回Option
    var option = new SuperMap.REST.DataReturnOption({
            expectCount: 1000,
            dataset: "Routes@北京市",
            deleteExistResultDataset: true,
            dataReturnMode: SuperMap.REST.DataReturnMode.DATASET_ONLY
        }),
        //配置动态分段Parameters
       parameters = new SuperMap.REST.GenerateSpatialDataParameters({
            routeTable: "Routes@北京市",
            routeIDField: "SmID",
            eventTable: "EventTable@北京市",
            eventRouteIDField: "SmID",
            measureStartField: "FromM",
            measureEndField: "ToM",
            dataReturnOption: option
        }),
        //配置动态分段iService
        iService = new SuperMap.REST.GenerateSpatialDataService(url2, {
            eventListeners: {
                processCompleted: generateCompleted,
                processFailed: generateFailded
            }
        });

    //execute
    iService.processAsync(parameters);

    //completed
    function generateCompleted(generateSpatialDataEventArgs) {
        //配置专题样式
        var style1, style2, style3;
        style1 = new SuperMap.REST.ServerStyle({
            fillForeColor: new SuperMap.REST.ServerColor(242, 48, 48),
            lineColor: new SuperMap.REST.ServerColor(242, 48, 48),
            lineWidth: 1
        });
        style2 = new SuperMap.REST.ServerStyle({
            fillForeColor: new SuperMap.REST.ServerColor(255, 159, 25),
            lineColor: new SuperMap.REST.ServerColor(255, 159, 25),
            lineWidth: 1
        });
        style3 = new SuperMap.REST.ServerStyle({
            fillForeColor: new SuperMap.REST.ServerColor(91, 195, 69),
            lineColor: new SuperMap.REST.ServerColor(91, 195, 69),
            lineWidth: 1
        });

        //配置专题项
        var themeUniqueIteme1, themeUniqueIteme2, themeUniqueIteme3;
        themeUniqueIteme1 = new SuperMap.REST.ThemeUniqueItem({
            unique: "3",
            style: style1
        });
        themeUniqueIteme2 = new SuperMap.REST.ThemeUniqueItem({
            unique: "2",
            style: style2
        });
        themeUniqueIteme3 = new SuperMap.REST.ThemeUniqueItem({
            unique: "1",
            style: style3
        });
        var themeUniqueItemes=[themeUniqueIteme1, themeUniqueIteme2, themeUniqueIteme3];

        var themeUnique = new SuperMap.REST.ThemeUnique({
            uniqueExpression: "type_L",
            items: themeUniqueItemes,
            defaultStyle: new SuperMap.REST.ServerStyle({
                fillForeColor: new SuperMap.REST.ServerColor(48, 89, 14),
                lineColor: new SuperMap.REST.ServerColor(48, 89, 14)
            })
        });

        var themeParameters = new SuperMap.REST.ThemeParameters({
            themes: [themeUnique],
            datasetNames: ["SpatialData"],
            dataSourceNames: ["北京市"]
        });

        var themeService = new SuperMap.REST.ThemeService(url2, {
            eventListeners:{
                "processCompleted": themeCompleted,
                "processFailed": themeFailed
            }
        });

        themeService.processAsync(themeParameters);

        function themeCompleted(themeEventArgs) {
            if(themeEventArgs.result.resourceInfo.id) {
                themeLayer = new SuperMap.Layer.TiledDynamicRESTLayer("路况信息",
                    url2, {cacheEnabled:false, transparent: true, layersID: themeEventArgs.result.resourceInfo.id}, {"maxResolution": "auto"});
                themeLayer.events.on({"layerInitialized": addThemeLayer});
            }
        }
        function addThemeLayer() {
            map.addLayer(themeLayer);
        }
        function themeFailed(e) {
            alert(e.error.errorMsg);
        }
    }
    //failed
    function generateFailded(e) {
        alert(e.error.errorMsg);
    }
}
//移除专题图层
function clearThemeLayer(){
    if(themeLayer) {
        map.removeLayer(themeLayer,true);
        themeLayer = null;
    }
}

1个回答

   //配置数据返回Option
    var option = new SuperMap.REST.DataReturnOption({
            expectCount: 1000,
            dataset: "Routes@北京市", // 返回结果保存到该数据集
            deleteExistResultDataset: true, // 若存在该数据集就先删除,再穿件并存储结果
            dataReturnMode: SuperMap.REST.DataReturnMode.DATASET_ONLY
        }),
        //配置动态分段Parameters
       parameters = new SuperMap.REST.GenerateSpatialDataParameters({
            routeTable: "Routes@北京市",
            routeIDField: "SmID",
            eventTable: "EventTable@北京市",
            eventRouteIDField: "SmID",
            measureStartField: "FromM",
            measureEndField: "ToM",
            dataReturnOption: option
        }),

你的动态分段的路由表是 Routes@北京市 ,返回结果保存到 Routes@北京市 并且若已经存在就删除。
请参考类参考:GenerateSpatialDataParametersDataReturnOption

1,780EXP 2017年07月25日

之前的问题已经解决。现在点击动态分段按钮,图层出现但是道路不在页面中显示,F12后显示这两种错误,请问这两种错误怎么解决?

获取不到图片,http 400错误一般是请求参数错误。
可能的原因是:
1.该临时图层的坐标系与当前加载的地图的坐标系不一致不能叠到一起,ps:iServer服务生成的临时图层与数据集坐标系一致。
2.生成的临时图层为空,检查相关参数设置。

请根据该功能实现的过程依次检查代码以及可能的数据问题。就最终的报错看,可以直接浏览器访问该报错的url,去掉后面的请求参数直接查看临时图层服务资源,比如:
http://support.supermap.com.cn:8090/iserver/services/map-world/rest/maps/World/tempLayersSet

在临时图层中图片不显示,请问这是不是就说明问题出在参数设置上呢?

对,建议先检查数据,参考:动态分段专题 和iDesktop帮助文档:动态分段
来制作和使用数据。

临时图层中已经显示,但是在网页中还是不出现,请问是为什么呢?

1.检查js代码,注意TiledDynamicRESTLayer的url和layersID等参数是否填写正确
2.检查是否是叠加地图的问题,两个以上地图叠加需要注意坐标系、比例尺一致

可以只添加这个临时图层查看结果。

每次执行动态分段的时候,服务就停止,然后又自动重启,请问这是为什么?

贴下相关日志。主要看iServer/logs文件夹下,catalina.log、iServer.log和iServer/bin目录下的崩溃日志,hs_err_pid***.log 这三个日志。
超过8000个字符,无法发送

跨域,请求是jsonp?
试下在服务类构造函数加个参数,使发POST请求
isInTheSameDomain:true
比如:

//配置动态分段
​​​​​​​iService iService = new SuperMap.REST.GenerateSpatialDataService(url2, {
  eventListeners: {
    processCompleted: generateCompleted,
    processFailed: generateFailded
  },
  isInTheSameDomain:true
});

...