QGIS二次开发之选择要素功能

通过查看qgis源码,发现qgis标识的功能在QgsMapToolSelectionHandler类和QgsMapToolIdentify类中;在选择图形时QgsMapToolSelectionHandler发出geometryChanged信号,然后通过重写的QgsMapToolIdentifyAction类进行接收,从而实现选中图形的高亮和以及数据的显示。

参考这两个类和官方文档,重写了一个选择工具类
.h文件

#include <QObject>
#include <QList>
#include <QScopedPointer>
#include<qmath.h>
#include <qgsmapcanvas.h>
#include <qgsmaptoolidentify.h>
#include <qgsrubberband.h>
#include <qgsmapmouseevent.h>
class QgsMapToolSelectFeatures : public QgsMapToolIdentify
{
   
    Q_OBJECT
public:
    QgsMapToolSelectFeatures(QgsMapCanvas *mapCanvas);
protected:
    //重写鼠标移动
    void canvasMoveEvent(QgsMapMouseEvent *e) override;
    //重写鼠标按下
    void canvasPressEvent(QgsMapMouseEvent *e) override;
    //重写鼠标抬起
    void canvasReleaseEvent(QgsMapMouseEvent *e) override;

    void initRubberBand();
    void identifyFromGeometry();
signals:
	//发出选中的要素信号
    void sigSelectFeatureChange(QList<QgsFeature>);
private:
    // 是否正在选择
    bool mSelectionActive = false;
    QScopedPointer<QgsRubberBand> mSelectionRubberBand;
    QColor mFillColor = QColor(
  • 7
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
QGIS是一个开源的地理信息系统软件,而MATLAB是一个商业化的数值计算软件。要在QGIS二次开发中调用MATLAB,需要先将MATLAB引擎集成到QGIS中。 首先,需要安装MATLAB引擎。将MATLAB安装目录中的bin文件夹路径添加到系统环境变量中。然后在QGIS的Python控制台中运行以下代码: ``` import os os.environ['PATH'] += ';C:/Program Files/MATLAB/R2020a/bin/win64' # 根据MATLAB版本和安装路径修改 import matlab.engine eng = matlab.engine.start_matlab() ``` 通过以上代码,可以成功启动MATLAB引擎并将其赋值给变量`eng`。 接下来,可以使用MATLAB引擎的各种功能。例如,可以调用MATLAB函数进行地理数据的处理和分析。以下是一个简单的示例: ``` # 在QGIS中获取选择的图层 layer = iface.activeLayer() features = layer.selectedFeatures() # 将选中的要素发送给MATLAB进行处理 matlab_features = matlab.double([[f.geometry().asPoint().x(), f.geometry().asPoint().y()] for f in features]) result = eng.my_matlab_function(matlab_features) # 调用MATLAB函数my_matlab_function # 在QGIS中显示结果 for f, r in zip(features, result): f['result'] = r # 将结果保存到图层属性表中 layer.updateFields() ``` 在上述示例中,首先通过QGIS获取选择的图层和要素,然后将要素的坐标数据转换为MATLAB的double类型并传递给MATLAB函数`my_matlab_function`,最后将结果保存到图层属性表中。 总之,通过在QGIS的二次开发中调用MATLAB引擎,可以充分利用MATLAB强大的数值计算和分析功能来处理地理信息数据。注意,此过程需要安装MATLAB并且拥有有效的MATLAB许可证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值