ArcGis地图

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

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
//tpk
Mapload_Widgets::Mapload_Widgets(QApplication* application, QWidget* parent /*=nullptr*/):QMainWindow(parent), form(new Ui::Form)
{// Create the Widget viewm_mapView = new MapGraphicsView(this);// 加载 Tile Pack 地图文件,路径为宏定义const QString worldMapLocation = QString(WORLDMAPPATH);const QString countryMapLocation = QString(COUNTRYMAPPATH);TileCache* worldTileCache = new TileCache(worldMapLocation, this);TileCache* countryTileCache = new TileCache(countryMapLocation, this);ArcGISTiledLayer* worldTiledLayer = new ArcGISTiledLayer(worldTileCache, this);ArcGISTiledLayer* countryTiledLayer = new ArcGISTiledLayer(countryTileCache, this);// 设置附加图层透明度countryTiledLayer->setOpacity(0.7F);// 实例化地图,设置附加图层Basemap* basemap = new Basemap(worldTiledLayer, this);m_map = new Map(basemap, this);m_map->operationalLayers()->append(countryTiledLayer);// Set map to map viewm_mapView->setMap(m_map);// set the mapView as the central widgetsetCentralWidget(m_mapView);// 隐藏界面下方的"Powered by Esri"m_mapView->setAttributionTextVisible(false);
}

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、设置地图中心点位置

m_mapView->setViewpointCenter(m_CenterPoint);

5、画线测距

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

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

m_mapView->setAttributionTextVisible(false);

7、画各种图形

ArcGis Qt跨平台开发【4】–绘图层(overlay)
ArcGis Qt跨平台开发【5】–绘制矩形和圆
c一下生成的画线代码:(待验证)

#include <QCoreApplication>
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQuickView>#include "Esri/ArcGISRuntime/Map.h"
#include "Esri/ArcGISRuntime/MapQuickView.h"
#include "Esri/ArcGISRuntime/Geometry.h"
#include "Esri/ArcGISRuntime/SimpleLineSymbol.h"
#include "Esri/ArcGISRuntime/Graphic.h"using namespace Esri::ArcGISRuntime;int main(int argc, char *argv[])
{QGuiApplication app(argc, argv);// Create a mapMap* map = new Map(BasemapStyle::ArcGISStreets, 34.056295, -117.195800, 16);// Create a map viewMapQuickView* mapView = new MapQuickView();mapView->setMap(map);// Create line geometryPoint startPoint(-117.195800, 34.056295, SpatialReference::wgs84());Point endPoint(-117.185800, 34.046295, SpatialReference::wgs84());PolylineBuilder polylineBuilder(SpatialReference::wgs84());polylineBuilder.addPoint(startPoint);polylineBuilder.addPoint(endPoint);Polyline polyline = polylineBuilder.toPolyline();// Create line symbolSimpleLineSymbol* lineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle::Solid, Qt::blue, 2.0f);// Create graphicGraphic* lineGraphic = new Graphic(polyline, lineSymbol);// Add graphic to the map viewmapView->graphicsOverlays()->at(0)->graphics()->append(lineGraphic);// Show the map viewmapView->show();return app.exec();
}
function drawCircle(centerX, centerY, radius) {var circle = new QGeoCircle(centerX, centerY, radius);var polygonBuilder = new PolygonBuilder();var polygon = polygonBuilder.fromCircle(circle, 360);var graphic = new Graphic();graphic.geometry = polygon;graphicsOverlay.graphics.append(graphic);
}

8、航迹

arcgis飞行轨迹动画_ArcGIS轨迹回放

9、显示自定义图片

Graphic:使用PictureMarkerSymbol实例化Graphic,添加到GraphicsOverlay中

// 用于GeometryEngine::ellipseGeodesic方法的参数类,指定图片标记的位置
GeodesicEllipseParameters ellipseParams(Point(X, Y, SpatialReference::wgs84()), 1, 1);
PictureMarkerSymbol* pictureMarkerSymbol = new PictureMarkerSymbol(image, this);
graphic = new Graphic(GeometryEngine::ellipseGeodesic(ellipseParams),pictureMarkerSymbol, this);
overlay->graphics()->appendgraphic);

9、更改图片标记的方向和位置

//ArcGIS更改图片标记的方向和位置
//Graphic::setGeometry(),PictureMarkerSymbol::setAngle()
GeodesicEllipseParameters ellipseParams(Point(x, y, SpatialReference::wgs84()), 1, 1);
graphic->setGeometry(GeometryEngine::ellipseGeodesic(ellipseParams));
pictureMarkerSymbol->setAngle(degree);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/76174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue+NodeJS实现邮件发送

一.邮箱配置 这里以QQ邮箱为例,网易邮箱类似. 设置->账号 二.后端服务搭建 index.js const express require(express) const router require(./router); const app express()// 使用路由文件 app.use(/,router);app.listen(3000, () > {console.log(server…

项目上线部署--》网站运行机制

网站运行机制 &#x1f31f;名词解释 域名 DNS 服务器 服务器 &#x1f31f; 网站请求流程 静态页面 动态页面 前后端分离的页面 前后端不分离的页面 &#x1f31f;写在最后 &#x1f31f;名词解释 域名 www.baidu.comwww.taobao.comwww.qq.com 域名俗称网址&#xf…

Linux centos7 bash编程训练__打印各类形状

利用for循环&#xff0c;打印各种不同的三角形、矩形和菱形。 主要是fort循环嵌套使用&#xff0c;及条件判断等。 因方法简单&#xff0c;不作更多解释&#xff0c;部分注释可以帮助初学者掌握代码。 下面列出代码&#xff0c;供参考。 #! /bin/bash ## 打印输出各种*型形…

觉非科技数据闭环系列 | BEV感知研发实践

随着自动驾驶迈向量产场景&#xff0c;“BEV感知数据闭环”已成为新一代自动驾驶量产系统的核心架构。数据成为了至关重要的技术驱动力&#xff0c;发挥数据闭环的飞轮效应或将成为下半场从1到N的胜负关键。 觉非科技在此方面已进行了大量的研究工作&#xff0c;并在实际量产项…

解决nbsp;不生效的问题

代码块 {{title}} title:附 \xa0\xa0\xa0件,//或者 <span v-html"title"></span> title:附 件&#xff1a;,效果图

Elasticsearch近实时架构

1 Elasticsearch 与 Lucene 的结构理解 一个Elasticsearch索引由一个或多个分片&#xff08;shards&#xff09;组成。这些分片可以是主分片&#xff08;primary shard&#xff09;或副本分片&#xff08;replica shard&#xff09;。每个分片都是一个独立的Lucene索引&#xf…

Unity 性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法

Unity 性能优化Shader分析处理函数&#xff1a;ShaderUtil.GetShaderGlobalKeywords用法 点击封面跳转下载页面 简介 Unity 性能优化Shader分析处理函数&#xff1a;ShaderUtil.GetShaderGlobalKeywords用法 在Unity开发中&#xff0c;性能优化是一个非常重要的方面。一个常见…

修改Tomcat的默认端口号

1、找到Tomcat的安装路径。 2、打开conf文件夹。 3、用记事本打开server.xml文件 4、找到 <Connector port"8080" protocol"HTTP/1.1"&#xff0c;其中的8080就是tomcat的默认端口&#xff0c;将其修改为你需要的端口即可。

github 创建自己的分支 并下载代码

github创建自己的分支 并下载代码 目录概述需求&#xff1a; 设计思路实现思路分析1.进入到master分支&#xff0c;git checkout master;2.master-slave的个人远程仓库3.爬虫调度器4.建立本地分支与个人远程分支之间的联系5.master 拓展实现 参考资料和推荐阅读 Survive by day…

Prometheus 监控指南:如何可靠地记录数字时间序列数据

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

第69步 时间序列建模实战:ARIMA建模(R)

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们使用R进行SARIMA模型的构建。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Re…

html的日期选择插件

1.效果 2.文档 https://layui.gitee.io/v2/docs/ 3.引入 官网地址&#xff1a; https://layui.gitee.io/v2/ 引入&#xff08;在官网下载&#xff0c;&#xff09;jquery-1.7.2.min.js,layui/layui.js **<link href"js/layui/css/layui.css" rel"stylesh…

Mysql数据库基础和增删改查操作

一、数据库基本概念 数据&#xff1a;描述事物的符号记录&#xff0c;包括数字&#xff0c;文字、图形、图像、声音、档案记录等&#xff0c;以“记录”形式按统一的格式进行存储。 表&#xff1a;将不同的记录组织在一起用来存储具体数据。 数据库&#xff1a;表的集合&…

10.2 整流电路

在分析整流电路时&#xff0c;为了突出重点&#xff0c;简化分析过程&#xff0c;一般均假定负载为纯电阻性&#xff1b;整流二极管为理想二极管&#xff0c;即导通时正向压降为零&#xff0c;截止时反向电流为零&#xff1b;变压器无损耗&#xff0c;内部压降为零等。 一、整…

java封装国密SM4为 jar包,PHP调用

java封装国密SM4为 jar包,PHP调用 创建java工程引入SM4 jar包封装CMD可调用jar包PHP 传参调用刚用java弄了个class给php调用,本以为项目上用到java封装功能的事情就结束了,没想到又来了java的加密需求,这玩意上头,毕竟不是强项,没办法,只好再次封装。 但是这次的有点不…

thinkPhp5返回某些指定字段

//去除掉密码$db new UserModel();$result $db->field(password,true)->where("username{$params[username]} AND password{$params[password]}")->find(); 或者指定要的字段的数组 $db new UserModel();$result $db->field([username,create_time…

总结986

时间记录&#xff1a; 7:10起床 8:00~下午2:00课程设计&#xff0c;偷学了3小时 2:17~3:55午觉 4:10~5:30计网 5:35~6:41数据结构 7:00~7:22继续数据结构课后习题重做 7:23~8:07考研政治&#xff0c;做题20道纠错 8:15~8:39每日长难句 8:39~10:21 14年tex2纠错标记 1…

【算法训练-数组 四】【合并】:合并两个有序数组

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【数组合并】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

LeetCode(力扣)122. 买卖股票的最佳时机 II

LeetCode122. 买卖股票的最佳时机 II 题目链接代码 题目链接 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/ 代码 class Solution:def maxProfit(self, prices: List[int]) -> int:result 0for i in range(1, len(prices)):result max((prices[i…

沙丁鱼优化算法(Sardine optimization algorithm,SOA)求解23个函数MATLAB

一、沙丁鱼优化算法 沙丁鱼优化算法(Sardine optimization algorithm,SOA)由Zhang HongGuang等人于2023年提出&#xff0c;该算法模拟沙丁鱼的生存策略&#xff0c;具有搜索能力强&#xff0c;求解精度高等特点。 沙丁鱼主要以浮游生物为食&#xff0c;这些生物包括细菌、腔肠…