在Win32 C/C++;桌面应用程序

在Win32 C/C++;桌面应用程序,c,google-maps,google-maps-api-3,desktop-application,C,Google Maps,Google Maps Api 3,Desktop Application,我们希望将Google地图集成到我们的C/C++win32应用程序中。 整个想法是当用户第一次运行应用程序时,我们要求他们标记自己的位置,然后检索用户所选位置的坐标并保存到数据库或文件中 初始化后,我们希望为用户提供一些预先标记的位置,并允许用户找到从他们的位置到该位置的方向。将提供预先标记位置的坐标 是否有可能通过使用谷歌Api实现我们想要的,如果是,那么如何实现?? 如果有法律问题的话 谢谢。您可以在Windows上使用Qt框架。您可以将win32应用程序与Qt集成。在Qt中,您可以使用QW

我们希望将Google地图集成到我们的C/C++win32应用程序中。 整个想法是当用户第一次运行应用程序时,我们要求他们标记自己的位置,然后检索用户所选位置的坐标并保存到数据库或文件中

初始化后,我们希望为用户提供一些预先标记的位置,并允许用户找到从他们的位置到该位置的方向。将提供预先标记位置的坐标

是否有可能通过使用谷歌Api实现我们想要的,如果是,那么如何实现?? 如果有法律问题的话


谢谢。

您可以在Windows上使用Qt框架。您可以将win32应用程序与Qt集成。在Qt中,您可以使用QWebKit框架与您的应用程序和网页(在本场景中,该网页包含来自Google Maps的地图)进行通信。实际上,您可以使用Qt编写混合应用程序。查看QtQWebKit文档

关于法律问题的答案,最好的办法是看看服务条款,然后咨询律师。如果地理编码数据未与谷歌地图结合使用,则“地图API”服务条款和“地图业务”服务条款均明确禁止使用地理编码数据:

Maps API TOS,相关内容见第10.1.1(g)节:

商业地图采购协议,相关条款为4.1(l):

如果您需要一个更自由的替代方案,您可能想看看——开放数据库许可证涵盖了提供的地理编码数据,该许可证允许使用属性


我需要同样的方法,并通过浏览器对象与谷歌地图接口解决了这个问题

***请阅读并按照说明操作

  • 创建基于对话框的项目

  • 添加一个CExplorer控件。(见:)

  • 当程序的主对话框初始化时,需要初始化全局对象

     CExplorer1 m_Browser;
    
  • 第一个构建块是WriteHTML()

  • 使用数据填充文件并使用浏览器控件打开,同时将Google Maps导航到请求的位置:

  • 变量:

    a纬度

    b经度

    c缩放(设置为10)

    dAPI密钥。(你需要)

    代码(WriteHTML函数的替代方法)

    CString HTML\u文本;
    正确无误;
    CWnd*pWnd=GetDlgItem(idcsgwebbrowser);
    pWnd->GetWindowRect(&rect);
    int w=矩形宽度()-50,h=矩形高度()-50;
    HTML_TEXT.Format(L“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});}),w,h,纬度,经度,API(键);
    文件*fp=wfopen(文件名,L“w”);
    fwprintf(fp,L“%s”,HTML_TEXT.GetBuffer());
    fclose(fp);
    m_Browser.Navigate(文件名,0,0,0);
    
    商业应用程序?在这种情况下,你可能需要一份商业协议。你试过Gmap.Net吗?将从谷歌api检索到的信息(纬度和经度)存储到本地数据库中是否合法。QT中是否有任何内置函数来检索用户选择的位置的纬度和经度信息,并在地图中提供预先标记的位置……我认为没有问题。谷歌地图API使用javascript。因此,首先,您应该使用JavaScript检索lng/lat,然后使用Qt WebKit将其带到您的应用程序中。Qt不是Win32 API,因此答案与question@MichaelHaephrati我没有说Qt是Win32 API,请再次阅读我的答案。我说过可以将Win32应用程序与Qt集成。阅读答案,然后投反对票。也许你刚刚有能力否决投票。在适当的地方测试一下。我想对你的答案投赞成票,但不能,因为你需要先修改它。您确实指出WinAPI应用程序可以与Qt集成,但这并不能解决问题。不是每个人都希望使用Qt,问题是使用纯Win32 API而不添加或集成到其他任何东西。
    void WriteHTML(const wchar_t* html)
    
    {
    
       IDispatch* pHtmlDoc = m_Browser.get_Document();
    
       if (!pHtmlDoc)
    
           return;
    
       CComPtr<IHTMLDocument2> doc1 = NULL;
    
       doc1.Detach();
    
       doc1.Attach((IHTMLDocument2*)pHtmlDoc);
    
       if (!doc1)
    
           return;
    
       // Creates a new one-dimensional array
    
       SAFEARRAY* psaStrings = SafeArrayCreateVector(VT_VARIANT, 0, 1);
    
       if (!psaStrings)
    
           return;
    
       BSTR bstr = SysAllocString(html);
    
       if (bstr)
    
       {
    
           VARIANT* param;
    
           HRESULT hr = SafeArrayAccessData(psaStrings, (LPVOID*)&param);
    
           if (SUCCEEDED(hr))
    
           {
    
               param->vt = VT_BSTR;
    
               param->bstrVal = bstr;
    
               hr = SafeArrayUnaccessData(psaStrings);
    
               if (SUCCEEDED(hr))
    
               {
    
                   doc1->write(psaStrings);
    
                   doc1->close();
    
               }
    
           }
    
       }
    
       // SafeArrayDestroy calls SysFreeString for each BSTR!
    
       if (psaStrings)
    
           SafeArrayDestroy(psaStrings);
     }
    
      wchar_t FileName[2048];
    
      GetCurrentDirectory(2048, FileName);
    
      wcscat(FileName, L"\\test.html");
    
    CString HTML_TEXT;
    CRect rect;
    CWnd *pWnd = GetDlgItem(IDC_SGWEBBROWSER);
    pWnd->GetWindowRect(&rect);
    int w = rect.Width()-50, h = rect.Height()-50;
    HTML_TEXT.Format(L"<!DOCTYPE html><html><meta http-equiv=\"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);
    FILE *fp = _wfopen(FileName, L"w");
    fwprintf(fp, L"%s", HTML_TEXT.GetBuffer());
    fclose(fp);
    m_Browser.Navigate(FileName, 0, 0, 0, 0);