经过两天的研究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";
}
}