首页 / 浏览问题 / 移动GIS / 问题详情
Android 在线空间查询返回失败,但是没有错误信息
5EXP 2021年08月11日

我用的Android SDK,先对一个点建立缓冲区

// 设置缓冲区分析参数
BufferAnalystParameter bufferAnalystParameter = new BufferAnalystParameter();
bufferAnalystParameter.setLeftDistance(400);
bufferAnalystParameter.setRightDistance(400);
bufferAnalystParameter.setEndType(BufferEndType.ROUND);
// 设置投影坐标系
PrjCoordSys prjCoordSys = mapControl.getMap().getPrjCoordSys();
// 生成缓冲区几何对象
geometryBuffer = BufferAnalystGeometry.createBuffer(geoForBuffer, bufferAnalystParameter, prjCoordSys);

然后在进行在线空间查询:

QueryService service = new QueryService("http://support.supermap.com.cn:8090");
ServiceQueryParameter parameter = new ServiceQueryParameter();
parameter.setQueryMapName("map-china400");
parameter.setQueryServiceName("China");
parameter.setQueryLayerName("Main_Road_L@China");
parameter.setQueryGeomety(geometryBuffer);
parameter.setExpectRecordCount(100000);
parameter.setQueryRecordStart(0);
parameter.setQueryOption(QueryOption.ATTRIBUTEANDGEOMETRY);
parameter.setSpatialQueryMode(SpatialQueryMode.INTERSECT);
service.query(parameter, QueryMode.SpatialQuery);

但是在回调ResponseCallback里被requestFailed回调了,而且返回的错误信息是空的,不知道是哪个参数有问题,望指点,谢谢

1个回答

您好,看一下是否有报错信息,麻烦把报错信息发出来一下。您那边使用的iMobile版本是多少呢?目前online那边有做过修改,如果是之前版本可能会无法进行查询。您那边可以使用这个包试下:链接:https://pan.baidu.com/s/16_6jimkYCamKVWNQSfU0kQ
提取码:5t2t
9,197EXP 2021年08月11日
主要就是没有返回错误信息,比如图层传错也是有错误信息的。SQL查询也是可以的,就是这个空间查询回调了requestFailed,但是错误信息是空字符串。我下周11的版本试试

您好,用了11的版本了,

ServiceQueryParameter.setQueryGeomety()方法,如果直接传点的话是可以的,但是传缓冲后的区域就会返回“错误信息 参数geometry非法,不能为空”。生成缓冲区的方法如下:
public GeoRegion createBuffer(GeoPoint geoForBuffer){

        GeoRegion geometryBuffer = null;                                   // 定义缓冲区分析结果对象

        // 设置缓冲分析几何对象,即跟踪层第一个几何对象,并将其转换成GeoLine类型
        //int index = m_TrackingLayer.indexOf("result");

//            Geometry geometry = m_TrackingLayer.get(index);                     // 获取路径分析结果
//            GeoLine geoLineForBuffer = ((GeoLineM)geometry).convertToLine();    // 将路由对象转换成线对象
//            Geometry geoForBuffer = (Geometry)geoLineForBuffer;

        // 设置缓冲区分析参数
        BufferAnalystParameter bufferAnalystParameter = new BufferAnalystParameter();
        bufferAnalystParameter.setLeftDistance(400);
        bufferAnalystParameter.setRightDistance(400);
        bufferAnalystParameter.setEndType(BufferEndType.ROUND);

        // 设置投影坐标系
        PrjCoordSys prjCoordSys = mapControl.getMap().getPrjCoordSys();

        // 生成缓冲区几何对象
        geometryBuffer = BufferAnalystGeometry.createBuffer(geoForBuffer, bufferAnalystParameter, prjCoordSys);
            // 设置几何对象风格
            GeoStyle style = new GeoStyle();
            style.setLineColor(new Color(50, 244, 50));
            style.setLineSymbolID(0);
            style.setLineWidth(0.5);
            style.setMarkerSymbolID(351);
            style.setMarkerSize(new com.supermap.data.Size2D(5,5));
            style.setFillForeColor(new Color(147, 16, 133));
            style.setFillOpaqueRate(70);

            geometryBuffer.setStyle(style);            // 设置缓冲区分析结果的风格
            mapControl.getMap().getTrackingLayer().clear();                   // 清除跟踪层上原有的结果,即路径分析结果
            mapControl.getMap().getTrackingLayer().add(geometryBuffer, "");   // 添加缓冲区结果到跟踪层

            mapControl.getMap().refresh();
            return geometryBuffer;
    }

请问用缓冲区去空间查询的话需要怎么传参数?

您好,将获取到的缓冲区结果对象Geometry传给查询空间对象参数中即可。您那边看下您现在传的参数是怎么传的。你可以构造一个面对象GeoRegion测试一下
...