首页 / 浏览问题 / 移动GIS / 问题详情
android请问如何判断点是否在缓冲区内
12EXP 2021年06月01日

android mobile 10i

您好请问我通过GeoLine生成一个缓冲区,我应该如何判断一个坐标是否在当前缓冲区内?

        Geometry geometry = m_mapcontrol.getMap().getTrackingLayer().get(0);
        // 将路由对象转换成线对象
//        GeoLine geoLineForBuffer = ((GeoLineM) geometry).convertToLine();
        Geometry geoForBuffer = (Geometry) geometry;
        // 设置缓冲区分析参数
        BufferAnalystParameter bufferAnalystParameter = new BufferAnalystParameter();
        //设置(左)缓冲区的距离
        bufferAnalystParameter.setLeftDistance(400);
        //设置右缓冲区的距离
        bufferAnalystParameter.setRightDistance(400);
        //设置缓冲区端点类型
        bufferAnalystParameter.setEndType(BufferEndType.ROUND);
        // 设置投影坐标系
        PrjCoordSys prjCoordSys = m_mapcontrol.getMap().getPrjCoordSys();
        // 生成缓冲区几何对象
        geometryBuffer = BufferAnalystGeometry.createBuffer(geoForBuffer, bufferAnalystParameter, prjCoordSys);

1个回答

您好,可以通过空间查询的方式来判断,使用方法:datasetVector.query()
9,197EXP 2021年06月01日

我用的这个写法和数据集无关啊,DEMO里用的本地地图,我改成在线的天地图创建不出

DatasetVector,
DatasetVector d = datasets.create(dd);

告诉我 数据集的数据源是只读的
在线的天地图数据源是只读的,不能创建数据源。如果是针对几何对象可以使用Geometry.isWithin()

我的需求是根据缓冲区判断点是否在其中

recordset里放了一个由线生成的缓冲区,缓冲是这样设置的

//设置(左)缓冲区的距离
bufferAnalystParameter.setLeftDistance(400);
//设置右缓冲区的距离
bufferAnalystParameter.setRightDistance(400);
Recordset recordset = datasetVectorBuffer.query(geoPoint, 1, CursorType.DYNAMIC);
Geometry geometry = recordset.getGeometry();

上面这样查询的时候,这个query的第二个参数应该传多少?另外如果geometry 是空就代表点不在其中是吗?

你目前使用的这个方法是查询某个对象的缓冲区范围内 ,第一个参数是某个空间对象,第二个是缓冲区半径,也就是查询该数据集里面落在该空间对象的缓冲区的记录。建议您那边看下api文档,每个参数都是有介绍的。

兄弟,你们的这个介绍没啥意义呀,完全是在摸黑探索

”bufferDistance : 缓冲区的半径。单位与被查询数据集的单位一致”这介绍完全看不懂

我就是想通过一个geoPoint看它是否在我的缓冲区里

 datasetVectorBuffer.query(geoPoint, 1, CursorType.DYNAMIC);

这个方法是不是在查我要的东西?如果不是我要怎么用

如果您只想查询两个对象的关系可以直接使用Geometrist.isWithin方法,如果包含返回为true,反正为false。您现在用的这个方法是查询数据集中的记录集是否有落到某个对象的缓冲区内,按照您的需求就是点数据集datasetVector,第一个参数就是线对象GeoLine,第二个参数就是缓冲区半径。
...