1、概述

官网:https://developers.arcgis.com/qt/
官网:官网指导
官网:Add graphics to a map view
官网:Esri官方博客
官网(github):https://github.com/Esri
Arcgis runtime sdk for Qt 开发记录(系列文章)
Cockpit-GUI-Design
ArcGis地图-LMLPHP

1.1 数据格式

ArcGIS Runtime不能直接加载shp数据,或者mxd地图文档。ArcGIS Runtime所能支持的数据格式,我们可以称之为Package,目前包括MPK,TPK,GPK以及APK四种格式。

  • Map package(MPK) :包含地图文档(mxd)以及图层引用的数据,这样便于用户或组织在ArcGIS Online上进行分享。
  • Tile package(TPK):包含地图文档的缓存数据,也就是切片后的数据,TPK一方面便于用户或组织在ArcGIS Online上分享数据,另一方面也为离线条件下访问数据提 供一种方案。
  • Geoprocessing package(GPK):是将一个能够成功运行的地理处理模型创建成一个压缩文件,方便分享分析和地理处理的工作流程。
  • Locator package(APK):是将包含一个定位器或复合定位器的工具打包成一个方便、便携的文件,便于用户或组织在ArcGIS Online上分享。

2、创建地图

//online:
m_mapView = new MapGraphicsView(this);    
m_map = new Map(Basemap::lightGrayCanvas(this), this);    
m_mapView->setMap(m_map); 
pMainLayout->addWidget(m_mapView);
setCentralWidget(pMainWidget);
m_mapView->setAttributionTextVisible(false);
//本地
m_mapView = new MapGraphicsView(this);  	//初始化mapview窗体
TileCache *titlecahe=new TileCache(("C:/Users/dujia/Desktop/aaa.tpk"),this);  //加载本地apk
ArcGISTiledLayer *titleLayer=new ArcGISTiledLayer(titlecahe,this);  //新建平铺图层
Basemap *baseMap=new Basemap(titleLayer);  	//底图-----------
m_map = new Map(baseMap, this);  			//加载底图
m_mapView->setMap(m_map);  					//将地图设置到map_view

3、定位、旋转、缩放

void Arcgis_demo::addButtons(QVBoxLayout* layout)
{
    // 定位
    QPushButton* pButtonLocate = new QPushButton("locate");
    connect(pButtonLocate, &QPushButton::clicked, this, [this](){
        // 经纬度坐标,这里用了“天坛公园”的位置
        Point pt(116.4104, 39.8818, SpatialReference::wgs84());
        // 比例尺设置
        double scale = 30000.0;
        m_mapView->setViewpointCenter(pt, scale);
    });
    layout->addWidget(pButtonLocate);
 
    // 旋转 30°
    QPushButton* pButtonRotate = new QPushButton("rotate");
    connect(pButtonRotate, &QPushButton::clicked, this, [this](){
        double cur_rotation = m_mapView->currentViewpoint(ViewpointType::CenterAndScale).rotation();
        cur_rotation += 30.0;
 
        m_mapView->setViewpointRotation(cur_rotation);
    });
    layout->addWidget(pButtonRotate);
 
    // 放大
    QPushButton* pButtonZoomIn = new QPushButton("zoom in");
    connect(pButtonZoomIn, &QPushButton::clicked, this, [this](){
        double cur_scale = m_mapView->currentViewpoint(ViewpointType::CenterAndScale).targetScale();
        cur_scale -= 10000.0;
 
        m_mapView->setViewpointScale(cur_scale);
    });
    layout->addWidget(pButtonZoomIn);
 
    // 缩小
    QPushButton* pButtonZoomOut = new QPushButton("zoom out");
    connect(pButtonZoomOut, &QPushButton::clicked, this, [this](){
        double cur_scale = m_mapView->currentViewpoint(ViewpointType::CenterAndScale).targetScale();
        cur_scale += 10000.0;
 
        m_mapView->setViewpointScale(cur_scale);
    });
    layout->addWidget(pButtonZoomOut);
}

4、鼠标点坐标

void T3::onMouseClicked(QMouseEvent &event)
{
	//单机地图时触发
	Point point = m_mapView->screenToLocation(event.x(), event.y());  //本地坐标转地图坐标

	qDebug() << "point::" <<point << ":::" << point.x()<<"::"<<point.y();

	Geometry geometryWgs84 = GeometryEngine::project(point, SpatialReference::wgs84());   //坐标转化

	qDebug() << "pointxxxxxx:::" << geometryWgs84;
}

5、画线测距

t和arcgis for qt在地图上做测距(画线和显示距离,单位km)

6、去除底部文字(powered by Esri)

m_mapView->setAttributionTextVisible(false);
09-11 15:49