前言

本文主要介绍地图一般操作,包括设置观察点,旋转,放大,缩小。

实现代码

1.创建arcgis widget工程,这次选择另一种在线地图lightGrayCanvas,online basemap有很多种类型,可以去官网的sdk查看(SDK online),也可以在QtCreator里F1查看帮助文档。

然后自定义一个垂直布局,后面要添加一些按钮上去。

Arcgis_demo::Arcgis_demo(QWidget* parent /*=nullptr*/):QMainWindow(parent)
{QWidget* pMainWidget = new QWidget;QVBoxLayout* pMainLayout = new QVBoxLayout;pMainWidget->setLayout(pMainLayout);// Create the Widget viewm_mapView = new MapGraphicsView(this);// Create a map using the topographic Basemapm_map = new Map(Basemap::lightGrayCanvas(this), this);// Set map to map viewm_mapView->setMap(m_map);// set the mapView as the central widgetpMainLayout->addWidget(m_mapView);setCentralWidget(pMainWidget);m_mapView->setAttributionTextVisible(false);this->addButtons(pMainLayout);
}

2.定位,旋转,缩放

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

坐标

sdk里位置的表达一般使用Point类,它的基类是Geometry,我们可以理解为是几何图形的基类。Point只是几何图形的一种,还有Envelope,Multipart,MultiPoint这几种,我们可以把Point理解为QPointF,因为经纬度坐标是double类型的。

对于Point定义的时候要注意使用哪种空间参考,这里使用的是wgs84坐标系,

Point pt(116.4104, 39.8818, SpatialReference::wgs84());

关于坐标系的知识,本人也不是专业做地图的,这里不就卖弄了,大家自行查看sdk或者baidu。

比例尺

对应的就是scale的值,比例尺是表示图上距离比实际地理距离缩小的程度。比如,地图上的1cm代表实地距离100km,就可以写成 1∶10,000,000,相当于scale = 10000000,单位是米。

// 比例尺设置
double scale = 30000.0;
m_mapView->setViewpointCenter(pt, scale);// 放大
double cur_scale = m_mapView-currentViewpoint(ViewpointType::CenterAndScale).targetScale();
cur_scale -= 10000.0;// 缩小
double cur_scale = m_mapView>currentViewpoint(ViewpointType::CenterAndScale).targetScale();
cur_scale += 10000.0;

这里设置观察点的比例尺为30000米,放大缩小时,每次差值为1000米。

需要注意的是,旋转map的时候可以不去设置viewpoint观察点,因为旋转是整个地图做旋转。但是缩放的话是基于观察点的,所以如果不先调用setViewpointCenter设置观察点就去缩放,是没有效果的。

获取当前比例尺和旋转角度,也可以用下面的方法:

double cur_scale = m_mapView->mapScale();
double rotation = m_mapView->mapRotation();

效果图

代码网盘地址:

链接:https://pan.baidu.com/s/10-GHB9kST8EXfn_UzlLBbg 
提取码:xd4i

地图的基本操作就介绍完了,下一篇文章说一下如何去创建绘制点线面符号。

Arcgis runtime sdk for Qt 开发记录(三)地图基本操作相关推荐

  1. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据编辑...

    1.前言 在上一篇我们已经实现了离线地理数据库的下载,这一篇我们着重介绍离线数据库的加载与编辑. 由于ArcGIS Runtime SDK for Android 10.2.X版本并没提供要素绘制功能 ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据下载...

    1.前言 1.1.环境准备: ArcGIS for Desktop 10.4.1(10.2.1以上版本即可) ArcGIS for Server 10.4.1 (10.2.1以上版本即可) Postg ...

  3. 《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView

    1.前言 在上一篇内容里介绍了 关于ArcGIS Android开发的未来("Quartz"版Beta)相关内容,期间也提到了关于API接口的重构,开发思路的调整,根据2015UC ...

  4. 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)...

    1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述

    1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...

    1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...

  7. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述

    1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步...

    1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用...

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

最新文章

  1. 使用程序解决一道逻辑推理题
  2. matlab 罗盘图与羽毛图
  3. opensuse 42.2 mysql_【Linux】Grub模式硬盘安装openSUSE 42.2
  4. 跟我学PHP第二篇- 配置Mysql以及PHP WampServer篇(1)
  5. Spring的AOP-底层原理
  6. 娄底八中的初中计算机考试,众人同心勤耕耘 敢叫日月换新天
  7. 100人每人100元每次一人分1元给另一人问题matalb 求解
  8. Netty 基本介绍与核心组件(EventLoop、ChannelPipeline、ChannelHandler)
  9. docker 中 安装 openssh-server
  10. 2018年高考631选计算机,2021年高考650分可以上什么大学 650分左右的院校
  11. 2018年全国卷Ⅰ卷理科数学图片版
  12. tensorboard的安装与使用
  13. matlab教程 for循环,Matlab简单教程:循环
  14. 如何组织一个高效的开发团队?
  15. 使用Ambari快速部署Hadoop大数据环境
  16. FileZilla 下载
  17. ContestHunter #26 B 玩骰子
  18. MSI Z390主板双SSD+HDD,win10系统下安装Ubuntu18.04LTS双系统总结
  19. 设计数据密集型应用 第五章:复制
  20. 性能:如何减少延迟提升内存分配效率

热门文章

  1. php mpdf导航栏信息,PHP Mpdf-如果表不适合实际页面,则将其移到下一页
  2. 空调风扇内机不转故障分析与检修
  3. Genymotion3.0+virtualbox6.0安装包
  4. solr 一些前缀例如:q、fq、df 的用法
  5. 堪比 007 电影!通过一张照片找到拍照者的精确位置
  6. html中使用css实现版心定位
  7. stm32cubeide烧写程序_STM32 Cube IDE 下实现 IAP —— (1) 程序跳转
  8. 西门子 博途V16安装 TIA Portal V16安装 详细流程(含免费下载)
  9. android 卸载预装软件,安卓全机型卸载预装软件免费版下载_安卓全机型卸载预装软件最新版下载_3DM软件...
  10. 技术前沿与经典文章16:历史上54位伟大物理学家、科学家的专属LOGO(二)