yanyun1987231 2021-07-13 17:54 采纳率: 0%
浏览 128

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刷新太快了,地图反应不过来,当我把创建的矢量图层不显示时,地图底图又显示出来了,不知道怎么弄了,望朋友们指导。
还有,有没有动态添加大容量图层特征的方法?望指导!

  • 写回答

1条回答 默认 最新

  • 有问必答小助手 2021-07-15 18:28
    关注

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

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

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

    评论

报告相同问题?

问题事件

  • 创建了问题 7月13日

悬赏问题

  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout