qgis3.18 ;矢量图层动态添加1000个点元素,出现栅格地图底图不能正常显示

1、正常使用m_rasterLaye = new QgsRasterLayer(filename, basename, "gdal");加载一幅.mbtiles格式的地图
2、使用

    QString path = "multipoint?";   
    path.append( QString( "crs=EPSG:4326&")); //参照坐标系
    path.append( QString( "field=id:integer&field=name:string(50)&")); //添加字段属性
    path.append( QString( "index=yes&" )); // 创建索引
    path.append( QString( "memoryid=%1").arg(QUuid::createUuid().toString())); // 临时编码
// 创建新矢量图层
DotLayer = new QgsVectorLayer( path, QString("dot Layer"), QString( "memory"));
添加渲染器
QgsSimpleMarkerSymbolLayer* dot_Renderer_Layer = new QgsSimpleMarkerSymbolLayer();
dot_Renderer_Layer->setColor(Qt::red);
dot_Renderer_Layer->setSize(1.0);

// 创建QgsSymbolLayerList
QgsSymbolLayerList Sym_Layer_List;
Sym_Layer_List.append(dot_Renderer_Layer);

// 构建QgsMarkerSymbol
QgsMarkerSymbol* MarkerSymbol = new QgsMarkerSymbol(Sym_Layer_List);

// 构建QgsSingleSymbolRenderer, 即最终图层的渲染器
QgsSingleSymbolRenderer* Sym_Renderer = new QgsSingleSymbolRenderer(MarkerSymbol);

// 设置当前图层的渲染器
DotLayer->setRenderer(Sym_Renderer);

3、开启一个线程,在线程中开启一个40ms的定时器,使用以下先删除特征
sInstance->m_mapcanvas->freeze();

// 开始编辑会话后,所作的修改不会被永久记录,需要调用commitChanges()以确认保存,或者调用rollBack()撤销修改。
sInstance->DotLayer->startEditing();

if(sInstance->DotLayer->allFeatureIds().size() > 0)
{
    sInstance->DotLayer->deleteFeatures(sInstance->DotLayer->allFeatureIds());//删除特征(清空图层)
}

然后在添加新的特征,确认变化,解锁画布

sInstance->DotLayer->addFeature(feature);

// 确认变化
sInstance->DotLayer->commitChanges(); // alternatively, using rollBack() to Undo the change
sInstance->DotLayer->updateExtents();

sInstance->m_mapcanvas->freeze(false); // 画布解锁

运行程序,加载的地图地图无法显示,要把地图画布缩放很小时,底图才能显示。
或把定时器的时间改为300ms时,底图才能显示。
我查看了,画布默认的MapUpdateInterval时间是250ms,难道是定时器40ms刷新太快了,地图反应不过来,当我把创建的矢量图层不显示时,地图底图又显示出来了,不知道怎么弄了,望朋友们指导。
还有,有没有动态添加大容量图层特征的方法?望指导!

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。