首页 / 浏览问题 / 移动GIS / 问题详情
imobie 叠加分析成功后,查询结果数据集报错,且数据源中的数据集全部被删除
82EXP 2021年05月20日

绘制的面分别和多个数据集叠加分析,叠加分析成功后,通过如下方式查询数据集报错:

var queryParameter = QueryParameter();
queryParameter.groupBy = arrayOf("地类名");
var groupResult = resultDatasetIntersect.query(queryParameter);

错误信息为:

no such table:XX(Sqlite code 1 SQLITE_ERROR): , while compiling: SELECT SMID FROM XX GROUP BY 11 (OS error - 11:Try again)

并且,原本数据源中的数据集全部被清空,请问是什么原因导致的呢?

1个回答

您好,您那边具体使用的产品是什么产品呢?报错信息是因为没有那张表,也就是数据集丢失了。您那边在做叠加分析后有做其他操作吗?特别是操作后造成程序发生崩溃的逻辑。
9,197EXP 2021年05月21日

使用的产品是supermap imobile,版本是1012版本的

叠加分析后,用结果数据集做了查询操作,崩溃的代码如下:

var groupResult = resultDatasetIntersect.query(queryParameter);

另外,在执行这段代码前,我将移动端的地图文件考到pc上用idesktop打开,数据源中有叠加分析结果的数据集,但是执行的时候,就出错了,并且,地图文件中的数据源下面的数据集全部被清空了

您那边具体使用什么产品呢?看代码不是iMobile for Android的接口
是的,是supermap imobile 10i for android
代码是用kotlin写的,不是java
您那边现在还能重现吗?可以给我一个重现的demo和数据。
这个真的不好意思,这些地图数据是涉密的。
给个能重现的demo就可以,因为这个功能点是没有问题的,需要看下你们的逻辑
这个,我可以把执行的那段代码发你吗?因为东西有点多,这个又比较急
发我qq吧,联系方式私信你

执行的逻辑是,移动端绘制了几个面,然后几个图层中的数据做叠加分析,图层是导入的shp数据,然后添加到地图中的。叠加分析的方法代码如下:

fun OverlapAnalyst(mapName: String) {
        try {
            // 返回被相交的记录集与用于相交的记录集

            var layerName = "${mapName}@${mWorkspace!!.maps.get(0)}"
            var layer = mMapControl!!.map.layers.get(layerName);
            val queryResultIntersected = layer.dataset as DatasetVector

            // 创建一个面矢量数据集,用于存储相交分析返回的结果
            var da=udbDatasource!!.datasets["resultDatasetIntersect${mapName}"]
            if(da!=null){
                udbDatasource!!.datasets.delete("resultDatasetIntersect${mapName}");

            }
            val resultDatasetIntersectName = udbDatasource!!.datasets.getAvailableDatasetName(
                "resultDatasetIntersect${mapName}"
            )

            val datasetvectorInfoIntersect = DatasetVectorInfo()
            datasetvectorInfoIntersect.type = DatasetType.REGION
            datasetvectorInfoIntersect.name = resultDatasetIntersectName
            datasetvectorInfoIntersect.encodeType = EncodeType.NONE

            val resultDatasetIntersect = udbDatasource!!.datasets.create(
                datasetvectorInfoIntersect
            )

            // 设置叠加分析参数
            val overlayAnalystParamIntersect = OverlayAnalystParameter()
            overlayAnalystParamIntersect.sourceRetainedFields = overlapfields!!.toTypedArray()
            overlayAnalystParamIntersect.setTolerance(0.001);
            var data = geometricObjList!!.toTypedArray()
            var res = OverlayAnalyst.intersect(
                queryResultIntersected, data,
                resultDatasetIntersect,
                overlayAnalystParamIntersect
            );

            if (res) {
               var resultRecord=resultDatasetIntersect.getRecordset(false, CursorType.DYNAMIC);
                var dataList=ArrayList<BtOverLap>();


                for(i in 0 until resultRecord.recordCount){
                    var overLap=BtOverLap();
                    resultRecord.moveNext();
                    var dlm=resultRecord.getFieldValue("地类名");
                    var area=resultRecord.getFieldValue("SmArea")
                    var objectId=resultRecord.getFieldValue("OBJECTID")


                }
                var dataset=udbDatasource!!.datasets["resultDatasetIntersect${mapName}"];
                if(dataset!=null){
                    udbDatasource!!.datasets.delete("resultDatasetIntersect${mapName}");
                }

//                resultDatasetIntersect


            }
            else{
                udbDatasource!!.datasets.delete("resultDatasetIntersect${mapName}");
            }
        } catch (e: Exception) {
            loadingDialogViewBase.closeLoadingdialog()
            MyLog(context).e("OverlapAnalyst","叠加分析失败,失败原因:${e.message.toString()}");
//            CommonUtility().showToast(e.message.toString(), context);


        }


    }
...