qt 环境下mapx组件的鼠标跟踪

时间:2022-03-27 07:10:54

经过两天的研究mapx组件人坐标转换还是没有转换成功,因为不管怎么变,定点转换的经纬度坐标始终与期望的值有较大的偏差。最后还是想老大请教了一下,划了半天功夫就研究出来了(不愧是老大,仰慕之情犹如滔滔江水……):老大说,组件导出的包文件中坐标转换函数在qt环境下有问题,你使用vc下面的dll就可以了,还给了一个链接让参考,再次感谢这位博主。http://blog.csdn.net/zirandeai/article/details/51160111

下面给出vc做的动态库,,可以直接下载。https://pan.baidu.com/s/1kVNN0OJ

下载后将文件放在项目路径下,然后将.pro文件加入.lib的文件路径,具体如下:LIBS += ../Eagle/MapXLib1.lib

将.h文件加入到头文件中,最后显示的加载dll文件(本人是显示的加载动态库)。

在头文件中声明一个QLibrary变量,初始化的时候加载dll。这样就可以直接使用mapx坐标转换函数了。

{

    ui->setupUi(this);
    mapx = NULL;
    QAxWidget *widget = new QAxWidget(this);
    widget->setControl("{9D6ED188-5910-11D2-98A6-00A0C9742CCA}");
    widget->move(10,10);
    widget->resize(size().width()-10,size().height()-10);
    mapx = new CMapX(widget->asVariant().value<IDispatch*>());
    pLayer = mapx->Layers()->CreateLayer("test");
    mapx->ZoomTo(3,120.06872, 29.35692);
    QObject::connect(widget, SIGNAL(MouseMove(int, int, double, double)), this, SLOT(MapxMouseMove(int, int, double, double)));

}
MouseMove(int, int, double, double)是mapx的信号

void MainWindow::MapxMouseMove(int Button, int Shift, double X, double Y){

    if(lib.load()){
        double Lng = 0.0;
        double Lat = 0.0;
        CoordScreen2Map(mapx->asVariant().value<IDispatch*>(),X,Y,Lng,Lat);
        qDebug()<<"mapx"<<Lng<<"mapy"<<Lat;

        pFeatureFactory = mapx->FeatureFactory();
        pFeature = pFeatureFactory->CreateSymbol();
        pPoint = pFeature->Point();
        pPoint->Set(Lng,Lat);
        pLayer->AddFeature(pFeature->asVariant().value<IDispatch*>());
    }
    else {
        qDebug()<<"error";
    }
}