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; }

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