vc++开发地图

vc++开发地图1 概述 1 mapbox 官网 https docs mapbox com mapbox gl js example github https github com mapbox mapbox gl native 2 mapX 使用 VC 创建 MapX 控件步骤 在 vc 中作用 mapx C

大家好,我是讯享网,很高兴认识大家。

1、概述

(1)mapbox
官网:https://docs.mapbox.com/mapbox-gl-js/example/
github: https://github.com/mapbox/mapbox-gl-native

(2)mapX
使用VC++创建MapX控件步骤
在vc中作用mapx
C++ 如何根据地理坐标范围获取瓦片地图并使用CImage库实现多张图片(瓦片地图)的快速合并
用VC实现GIS系统基本功能(mapx)
(3)arcEngine
ArcEngine10.2 VC++实现地图浏览基本功能


讯享网

2、arcgis

chatgpt给出的arcgis使用代码:

#include <iostream> #include <conio.h> #include <Windows.h> #include <atlbase.h> //引入ArcGIS相关头文件 #import "esriSystem.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids #import "esriGeometry.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids #import "esriDisplay.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids #import "esriCarto.olb" raw_interfaces_only, raw_native_types, no_namespace, named_guids using namespace std; int main() { 
    //初始化COM组件 CoInitialize(NULL); //创建一个MapControl对象 CComPtr<IMapControl3> pMapControl; HRESULT hr = pMapControl.CoCreateInstance(CLSID_MapControl); if (FAILED(hr)) { 
    cout << "Failed to create MapControl" << endl; return 1; } //获取ArcGIS安装路径 CComPtr<ISetup> pSetup; hr = pSetup.CoCreateInstance(CLSID_Setup); BSTR bstrPath; pSetup->get_ARCGIS_INSTALL_DIR(&bstrPath); CString strPath(bstrPath); //加载ESRI.ArcGIS.Display.dll和ESRI.ArcGIS.System.dll CString strDisplayPath = strPath + _T("bin\\ESRI.ArcGIS.Display.dll"); CString strSystemPath = strPath + _T("bin\\ESRI.ArcGIS.System.dll"); HINSTANCE hinstDisplay = LoadLibrary(strDisplayPath); HINSTANCE hinstSystem = LoadLibrary(strSystemPath); //设置MapControl的父窗口 HWND hWnd = GetConsoleWindow(); hr = pMapControl->put_HWND((OLE_HANDLE)hWnd); //设置MapControl的显示范围 CComPtr<IMap> pMap; pMapControl->get_Map(&pMap); CComPtr<IEnvelope> pEnvelope; pEnvelope.CoCreateInstance(CLSID_Envelope); pEnvelope->PutCoords(0, 0, 100, 100); CComPtr<IActiveView> pActiveView; pMap->QueryInterface(IID_IActiveView, (void**)&pActiveView); pActiveView->Extent = pEnvelope; //加载地图文档 CString strMapPath = _T("C:\\data\\example.mxd"); CComPtr<IMapDocument> pMapDoc; pMapDoc.CoCreateInstance(CLSID_MapDocument); hr = pMapDoc->Open(CComBSTR(strMapPath)); if (FAILED(hr)) { 
    cout << "Failed to open map document" << endl; return 1; } //获取MapControl中的AxMapControl对象 CComPtr<IAxMapControl3> pAxMapControl; hr = pMapControl.QueryInterface(&pAxMapControl); if (FAILED(hr)) { 
    cout << "Failed to get AxMapControl interface" << endl; return 1; } //将地图文档中的地图添加到AxMapControl中 long lCount = 0; hr = pMapDoc->get_MapCount(&lCount); for (int i = 0; i < lCount; i++) { 
    CComPtr<IMap> pDocMap; hr = pMapDoc->get_Map(i, &pDocMap); if (FAILED(hr)) { 
    cout << "Failed to get map from map document" << endl; return 1; } pAxMapControl->AddLayer(pDocMap, i); } //刷新地图 pAxMapControl->Refresh(); //开始消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { 
    TranslateMessage(&msg); DispatchMessage(&msg); } //释放资源 pMapControl.Release(); pAxMapControl.Release(); pMap.Release(); pActiveView.Release(); pEnvelope.Release(); pMapDoc.Release(); pSetup.Release(); CoUninitialize(); return 0; } 

讯享网

chatgpt给出的使用mapCtrl Active控件代码:

讯享网好的,下面是使用MFC界面中加入MapControl Active控件的示例代码: 在VC++2008中创建一个MFC应用程序项目。 打开资源视图,双击IDD_DIALOG1对话框,将MapControl控件拖拽到对话框中,并调整其大小和位置。 双击IDD_DIALOG1对话框,在ClassWizard中添加成员变量,将MapControl控件命名为m_mapControl,并选择类型为CMapCtrl。 在OnInitDialog函数中添加以下代码: BOOL CMyDlg::OnInitDialog() { 
    CDialogEx::OnInitDialog(); // 初始化 COM 组件 CoInitialize(NULL); // 设置 MapControl 父窗口为对话框 m_mapControl.SetParent(this); // 获取 ArcGIS 安装路径 CComPtr<ISetup> pSetup; HRESULT hr = pSetup.CoCreateInstance(CLSID_Setup); BSTR bstrPath; pSetup->get_ARCGIS_INSTALL_DIR(&bstrPath); CString strPath(bstrPath); // 加载 ESRI.ArcGIS.Display.dll 和 ESRI.ArcGIS.System.dll CString strDisplayPath = strPath + _T("bin\\ESRI.ArcGIS.Display.dll"); CString strSystemPath = strPath + _T("bin\\ESRI.ArcGIS.System.dll"); HINSTANCE hinstDisplay = LoadLibrary(strDisplayPath); HINSTANCE hinstSystem = LoadLibrary(strSystemPath); // 设置 MapControl 显示范围 CComPtr<IEnvelope> pEnvelope; pEnvelope.CoCreateInstance(CLSID_Envelope); pEnvelope->PutCoords(0, 0, 100, 100); CComPtr<IActiveView> pActiveView; m_mapControl.GetOcx()->QueryInterface(IID_IActiveView, (void**)&pActiveView); pActiveView->Extent = pEnvelope; // 加载地图文档 CString strMapPath = _T("C:\\data\\example.mxd"); CComPtr<IMapDocument> pMapDoc; pMapDoc.CoCreateInstance(CLSID_MapDocument); hr = pMapDoc->Open(CComBSTR(strMapPath)); if (FAILED(hr)) { 
    MessageBox(_T("Failed to open map document")); return FALSE; } // 将地图文档中的地图添加到 MapControl 中 long lCount = 0; hr = pMapDoc->get_MapCount(&lCount); for (int i = 0; i < lCount; i++) { 
    CComPtr<IMap> pDocMap; hr = pMapDoc->get_Map(i, &pDocMap); if (FAILED(hr)) { 
    MessageBox(_T("Failed to get map from map document")); return FALSE; } m_mapControl.AddLayer(pDocMap, i); } // 刷新地图 m_mapControl.Refresh(); return TRUE; } 
小讯
上一篇 2025-03-04 18:36
下一篇 2025-02-08 13:19

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/28512.html