MapWinGis缩放时不隐藏点及选中不可见点的技术问询
解决MapWinGis点图层缩放隐藏及全选问题
方案一:关闭点的自动隐藏(禁用聚合/简化)
MapWinGis默认会在缩放级别较低时自动隐藏重叠点以优化渲染,你可以通过修改图层参数关闭该行为:
在C++/MFC中,获取目标SHP_POINT图层后,设置对应的渲染选项:
// 假设pLayer为你的IShapefile指针 pLayer->PutAutoSimplify(VARIANT_FALSE); // 关闭自动简化逻辑 // 或者针对性关闭点重叠避让 pLayer->SetRenderingOption(rdoAvoidPointOverlap, VARIANT_FALSE);
设置完成后,所有点会在任何缩放级别下保持可见,此时使用多边形选择工具即可选中范围内全部点。
方案二:直接基于空间查询实现全选(不依赖可见性)
如果需要保留点的自动隐藏以避免渲染卡顿,可以绕过地图默认选择逻辑,直接对Shapefile执行空间查询:
- 先获取用于选择的多边形几何对象(比如从地图选择操作中拿到
IShape类型的多边形) - 使用Shapefile的
SelectShapes方法,强制忽略要素可见性:
// pShpFile为SHP_POINT类型的Shapefile指针 // pSelectPolygon为用于选择的多边形IShape指针 pShpFile->SelectShapes(pSelectPolygon, SELECTION_INTERSECTION, TRUE); // 第三个参数设为TRUE表示忽略要素可见性,选中所有符合空间条件的点
也可以手动遍历所有点要素进行判断:
pShpFile->ClearSelection(); long numShapes = pShpFile->GetNumShapes(); for (long i = 0; i < numShapes; i++) { IShape* pPoint = pShpFile->GetShape(i); // 判断点是否包含在多边形内 if (pSelectPolygon->PointInPolygon(pPoint->GetX(0), pPoint->GetY(0))) { pShpFile->SelectShape(i); } pPoint->Release(); }
这两种方式都能确保选中多边形范围内的所有点,不受当前缩放级别下的可见性限制。
内容的提问来源于stack exchange,提问作者xuqiang
相关产品推荐
相关产品推荐

