首页 / 浏览问题 / 云GIS / 问题详情
iserver使用updateFeatures报错
5EXP 2020年09月30日

使用产品:iserver 8c 810 操作系统:win7 x64
数据类型: udb

问题描述:使用java api中的restDataProvider.updateFeatures方法,报错the number of 'fieldNames' and 'fieldValues' are not equal

Datasources datasources = workspace.getDatasources();
        com.supermap.data.DatasourceConnectionInfo newDatasourceConnectionInfo = new com.supermap.data.DatasourceConnectionInfo(
                TARGET_PATH + "/" + filename + ".udb", "sqlquery1", "");
        datasource1 = datasources.open(newDatasourceConnectionInfo);
        // 初始化一个 REST 地图服务提供者。
        RestDataProviderSetting providerSetting = new RestDataProviderSetting();
        //指定 REST 地图服务提供者所使用的 REST 服务地址。
        providerSetting.restServiceRootURL = DATA_SERVICE_PATH;
        // 构建 RestMapProvider 对象
        RestDataProvider restDataProvider = new RestDataProvider(providerSetting);
        List<DataProvider> providers = new ArrayList<>();
        providers.add(restDataProvider);
        //获取任务数据
        List<Feature> jzData = getData(datasource1, JIANZHU_DATASET_NAME);
        //更新数据
        restDataProvider.updateFeatures(BASE_FILENAME, JIANZHU_DATASET_NAME, jzData);

1个回答

你好,请问报错是否是由updateFeatures这个方法执行导致的,如果是的话请您检查一下您的参数构造是否有问题,看下您自己构造的getData()方法;如果排查为并非参数问题,建议您更换最新版本进行使用,8c产品目前已经过支持周期了;
2,842EXP 2020年09月30日

1.打断点确定报错是updateFeatures导致的

2.iserver版本是10i,发问题时点错了

3.getData方法如下,我是从udb文件中取数据,然后更新到iserver

    /**
     * 从文件获取数据
     */
    public static List<Feature> getData(Datasource datasource, String name) {
        List<Feature> featureList = new ArrayList<>();
        // 得到数据集集合类,得到面数据集,通过数据源复制数据集
        DatasetVector datasetVector = (DatasetVector) datasource.getDatasets().get(name);

        //打开记录集
        com.supermap.data.Recordset recordset = datasetVector.getRecordset(false, CursorType.STATIC);//可修改

        // 遍历recordset,获取要素
        while(!recordset.isEOF()){
            com.supermap.data.GeoRegion geometry = (GeoRegion)recordset.getGeometry();
            Feature feature = new Feature();
            if (geometry != null) {
                Point2Ds point2DS = geometry.getPart(0);
                com.supermap.data.Point2D[] points = point2DS.toArray();
                Point2D[] pointsArr = new Point2D[points.length];
                for(int i=0;i<points.length;i++){
                    pointsArr[i] = new Point2D(points[i].x, points[i].y);
                }
                Geometry geometry1 = new Geometry();
                geometry1.points = pointsArr;
                geometry1.type = GeometryType.REGION;
                feature.geometry = geometry1;
                //释放资源
                geometry.dispose();
            }

            // 复制字段属性
            FieldInfos fieldInfos = recordset.getFieldInfos();
            int count = fieldInfos.getCount();
            String[] fieldNames = new String[count];
            String[] fieldValues = new String[count];
                for (int i = 0; i < count; i++) {
                    FieldInfo fieldInfo = fieldInfos.get(i);
                    if (!fieldInfo.isSystemField()) {
                        try {
                            String fieldname = fieldInfo.getName();
                            fieldNames[i] = fieldname;
                            fieldValues[i] = "";
                            Object fieldValue = recordset.getFieldValue(i);
                            if(fieldValue != null) {
                                fieldValues[i] = fieldValue.toString();
                            }
                        }catch (Exception e){
                            System.out.println(e);
                        }
                    }
                }
            feature.fieldNames = fieldNames;
            feature.fieldValues = fieldValues;
            featureList.add(feature);
            recordset.moveNext();
        }

        recordset.close();
        recordset.dispose();
        return featureList;
    }

...