如何查询某个点周边一定范围有哪些几何对象

1 投票
地图上绘制了很多个不同形状的几何对象,我想要实现的是:给出一个坐标值,以这个点为中心,获取半径5KM范围里面的所有几何对象列表。
2月 22, 2017 分类:  918次浏览 | 用户: Memor (9 分)

1个回答

1 投票
 
已采纳
你这是用的SuperMap iObject .NET吗?

你这里需要循环地图的所有图层对应的数据 Layer.Dataset ,每个图层都进行点查询,参考代码如下:

mapControl.MouseDoubleClick +=FrmMain_MouseDoubleClick;

void FrmMain_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            try
            {
                //生成缓冲区
                Point2D point2d = mapControl.Map.PixelToMap(new Point(e.X, e.Y));
                GeoPoint geopoint = new GeoPoint(point2d.X, point2d.Y);
                BufferAnalystParameter bufferAnalystParameter = new BufferAnalystParameter();
                bufferAnalystParameter.EndType = BufferEndType.Round;
                bufferAnalystParameter.LeftDistance = 6;
                bufferAnalystParameter.RadiusUnit = BufferRadiusUnit.Meter;
                bufferAnalystParameter.SemicircleLineSegment = 4;
                GeoRegion geoRegion = BufferAnalystGeometry.CreateBuffer(geopoint, bufferAnalystParameter);

                mapControl.Map.TrackingLayer.Add(geoRegion, "Region");
                mapControl.Map.RefreshTrackingLayer();
                
                //设置查询参数
                QueryParameter parameter = new QueryParameter();
                parameter.SpatialQueryObject = geoRegion;
                parameter.SpatialQueryMode = SuperMap.Data.SpatialQueryMode.Intersect; ;

                //对指定查询的图层进行查询
                Layer layer = mapControl.Map.Layers[0];
                DatasetVector dataset = layer.Dataset as DatasetVector;
                Recordset recordset = dataset.Query(parameter);
                recordset.MoveFirst();
                while ( !recordset.IsEOF)
                {
                    recordset.MoveNext();
                }

            }
            catch (Exception ex)
            {
               
            }
        }
2月 22, 2017 用户: 秦凰 (2 分)
采纳于 3月 16, 2017 用户:bocogxc
谢谢,我用的是C++组件,我先根据你给的参考代码尝试用C++来实现。
如果用java组件的话,该怎么写呢?
用java写,也是与.net的逻辑和接口一样,接口名称基本一样,只是java组件是函数的命名方式是set与get,这点写法上与.net有略微区别,所以仿照.net的流程写,改改函数名称即可,而且我们的联机帮助文档有接口的详细描述,可以通过关键字进行搜索接口。
...