如何在 C++ 语言中将谷歌地图 API 与 MFC 或 QT 一起使用?

Posted

技术标签:

【中文标题】如何在 C++ 语言中将谷歌地图 API 与 MFC 或 QT 一起使用?【英文标题】:How to use google map API with MFC or QT in c++ language? 【发布时间】:2018-04-21 08:27:54 【问题描述】:

我有一个问题,如何在我的开发程序中使用 google map api。

我的程序在 Visual Studio 2017 环境中由 C++ 语言实现,而 MFC 通常用于图形界面。

我想使用google map api开发两个版本的程序。 第一个是在没有互联网连接的情况下在我的程序中使用谷歌地图。 第二个是互联网连接。

如果有人知道怎么做,请回答我的问题。

【问题讨论】:

【参考方案1】:

Qt C++ 提供了一个 QWebChannel,它填补了 C++ 应用程序和 html/javascript 应用程序之间的空白。

您需要在 C++ 中创建一个 QWebChannel 并注册一个 JavaScript 辅助对象。该对象公开了公共方法,这些方法可以从 HTML 中的 JavaScript 调用。

QWebEngineView::setUrl() 托管一个具有 Google 地图的页面。 QWebEnginePage::runJavaScript() 为您提供了操纵地图的能力。 C++调用JS,JS调用C++——真是厉害!

【讨论】:

【参考方案2】:

我遇到了和你一样的需求。我找到的解决方案是使用嵌入式浏览组件并从该组件访问谷歌地图。 请参阅我的article 关于此实现。 基本上,这里是将此类组件添加到 MFC 应用程序的说明:

    打开 Visual C++ 并按照以下步骤操作: 从“文件”菜单中选择“新建”。 选择 MFC 应用程序向导 (exe)。 输入项目名称并选择位置。 单击确定。当出现第 1 步的对话框时,选择适合您的应用程序的应用程序类型 - 单文档、多文档或基于对话框。在本例中选择“基于对话框”。 单击下一步。 选择应用程序功能和支持。 第 2 步的对话框要求您选择应用程序需要的任何功能和支持——例如,关于框或自动化支持。 WebBrowser 控件是一个 ActiveX 控件,因此选择 ActiveX 控件。点击下一步进入下一步。

    选择项目样式。 第 3 步的对话框用于定义您的项目。您只有一个项目样式选项,即标准 MFC。但是您可以在源代码中指明是否希望 IDE 生成 cmets,并且您可以指定要如何使用 MFC 库。默认选择适用于大多数应用程序。单击下一步转到下一步。命名文件和类。第 4 步的对话框显示 Visual C++ 创建的所有文件和类的名称。您可以将它们更改为更具描述性的名称或您的规范要求的名称。点击完成。

    添加 WebBrowser 控件。

与 Google 地图接口的实际部分嵌入在也应托管的 HTML 代码中,因此我的解决方案将浏览器的托管与与 Google 地图的接口相结合。

此示例中的 HTML 代码格式为:

HTML_TEXT.Format(L"<!DOCTYPE html><html><meta http-equiv=\"IE X-UA-Compatible\" content=\"IE = edge\"><body><div id =\"googleMap\" style=\"width:%dpx;height:%dpx\"><script>function myMap()var mapProp = center:new google.maps.LatLng(%f, %f), zoom : 10;var map = new google.maps.Map(document.getElementById(\"googleMap\"), mapProp);marker = new google.maps.Marker(position: new google.maps.LatLng(%f, %f),map: map);</script><script src = \"https://maps.googleapis.com/maps/api/js?key=%s&callback=myMap\"></script></div></body></html>", w, h, Latitude, Longitude, Latitude, Longitude, API_KEY);

如您所见,您可以使用经度纬度生成带有指向给定位置的标记的地图。您还需要obtain an API_KEY from Google。

【讨论】:

感谢您的回答。但我没有成功地做到这一点。请逐步让我知道您的诀窍(例如,写代码的地方在哪里)。事实上,我在生成的对话框的 OnInitDialog() 函数中写下了您的代码(例如调用 WriteHTML func.、Method2)。奇怪的是,当我调用 WriteHTML 时,m_Browser.get_Document() 没有得到任何对象指针。你能帮我更多吗?我还有一个问题。你试过 Visual Studio 2017 吗? 我正在使用 Visual Studio 2013 Ultimate。那是因为我在被邀请加入 BizSpark 后获得了 Microsoft 的免费许可证。如果你把你的代码发给我 haephrati@gmail.com 我会看看。 谢谢。当您发送源代码时,请始终删除临时和大文件,例如 .sdf

以上是关于如何在 C++ 语言中将谷歌地图 API 与 MFC 或 QT 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

需要谷歌地图API

如何从谷歌地图 API 获取楼层号或套房与纬度

如何在谷歌地图中将文本设置为标记

如何在flutter中将标记从firebase(真实数据库)检索到新的google maps api

如何使用谷歌地方 api 获得与谷歌地图相同的结果

如何制作与谷歌地图 api 连接的按钮网格?