QT调用百度地图API并根据经纬度在地图上标点以及GPS转百度地图坐标


环境 QT5.7.1+VS2015

QT5.7.1已经没有webkit 组件了,取而代之的是QtWebEngine

要使用QtWebEngine,需要进行以下设置

1.项目->属性->c/c++->常规->附加包含目录 添加$(QTDIR)\include\QtWebEngineWidgets

2.项目->属性->链接器->输入->附加依赖项 添加

Qt5WebEngineWidgetsd.lib
Qt5WebEngine.lib

注意是Qt5WebEngineWidgetsd.lib,不是Qt5WebEngineWidgets.lib。最后的d代表debug.

如果用Qt5WebEngineWidgets.lib 会出现以下错误

QWidget: Must construct a QApplication before a QWidget

3.在QT设计师中拖入控件Widget,右键提升为QWebEngineView

QT调用百度地图API并根据经纬度在地图上标点以及GPS转百度地图坐标_第1张图片

  4.cpp中

#include  

ui.setupUi(this); 
 QUrl url("C:\\Users\\Administrator\\Desktop\\test.html");
 ui.widget->load(url);

效果图如下

QT调用百度地图API并根据经纬度在地图上标点以及GPS转百度地图坐标_第2张图片

地图显示完成后还需要与JS交互。

QT5.6以后与JS交互可以使用runJavaScript()函数

地图未加载完成时,无法实现交互,因此需要加入loadFinished(bool)进行判断

maptest.html完整代码如下




	
	
	
	
	test



	

maptest.h 头文件代码

#ifndef MAPTEST_H
#define MAPTEST_H

#include 
#include "ui_maptest.h"

class MAPTEST : public QMainWindow
{
	Q_OBJECT

public:
	MAPTEST(QWidget *parent = 0);
	~MAPTEST();

private:
	Ui::MAPTESTClass ui;
private slots:
	void loadFinished(bool a);
};

#endif // MAPTEST_H

maptest.cpp文件


#include "maptest.h"
#include 

MAPTEST::MAPTEST(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
	QString path = QDir::currentPath();
	QUrl url(path.append("/maptest.html"));
	ui.widget->load(url);
	connect(ui.widget, SIGNAL(loadFinished(bool)), this, SLOT(loadFinished(bool)));//加载地图完成后执行loadFinished函数
}

MAPTEST::~MAPTEST()
{

}

void MAPTEST::loadFinished(bool a)
{
	if (a == true)
	{
		double lon[4], lat[4];
		lon[0] = 121.50866; lon[1] = 121.50863; lon[2] = 121.50899; lon[3] = 121.50902;
		lat[0] = 31.28867; lat[1] = 31.28860; lat[2] = 31.28845; lat[3] = 31.28855;
		for (int i = 0; i < 4; i++)
		{
			QString command = QString("addpoint(%1,%2)").arg(QString::number(lon[i], 'f', 6)).arg(QString::number(lat[i], 'f', 6));
			ui.widget->page()->runJavaScript(command);
		}
	}	
}
效果图
QT调用百度地图API并根据经纬度在地图上标点以及GPS转百度地图坐标_第3张图片
当传入的坐标为WGS84坐标系下的坐标时,由于百度地图采用的坐标系不同,需要进行转换,才能将坐标正确地显示在百度地图上。
cpp和头文件不变,html 文件加上 convertor.translate(pointArr, 1, 5, translateCallback),其中1应该是WGS84坐标系,5是百度地图的坐标系



    
    
    
    
    GPS转百度


    
结果示意图
QT调用百度地图API并根据经纬度在地图上标点以及GPS转百度地图坐标_第4张图片





你可能感兴趣的:(QT调用百度地图API并根据经纬度在地图上标点以及GPS转百度地图坐标)