当前位置: 首页 > news >正文

QGraphicsView实现简易地图11『指定层级-定位坐标』

前文链接:QGraphicsView实现简易地图10『自适应窗口大小』
提供一个地图初始化函数,指定地图显示的中心点和地图缩放层级
能够让地图显示某一层级的瓦片,并将中心点坐标显示在视图中心。
1、动态演示效果
7级地图-大连-老虎滩 定位到 8级地图-台湾-台北
在这里插入图片描述

2、指定层级-定位坐标的代码

注:WHMapView继承自MapView
void WHMapView::centerAndZoom(const GeoCoord&geoCenter, int zoom)
{m_geoCoord = geoCenter;m_curLevel = zoom - 1;MapDataManager::instance()->setMapLevel(m_curLevel);double len = MapUtility::sceneSize(m_curLevel);setSceneRect(QRect(0, 0, len, len));// 经纬度坐标转场景坐标、视图定位到中心点QPointF offsetPos = QPointF(viewport()->width() / 2.0, viewport()->height() / 2.0);QPointF scenePos = MapUtility::sceneCoordFromGeoCoord(m_geoCoord, m_curLevel);horizontalScrollBar()->setValue(scenePos.x() - offsetPos.x());verticalScrollBar()->setValue(scenePos.y() - offsetPos.y());scaleScene();updateOtherItemPos();
}void MapView::scaleScene()
{// 前面省略与计算无关的代码...// 视口宽度和高度int w = viewport()->width();int h = viewport()->height();// 瓦片像素点坐标、视口坐标QPointF scenePos = MapUtility::sceneCoordFromGeoCoord(m_geoCoord, m_curLevel);QPointF pixelPos = MapUtility::tilePixelCoordFromScene(scenePos, m_curLevel);QPoint viewportPos = mapFromScene(scenePos);// 鼠标所在瓦片的四边 与 视口四边的距离int lPixel = viewportPos.x() - pixelPos.x();int rPixel = w - (viewportPos.x() + PIXMAP_SIZE - pixelPos.x());int tPixel = viewportPos.y() - pixelPos.y();int bPixel = h - (viewportPos.y() + PIXMAP_SIZE - pixelPos.y());// 计算鼠标所在瓦片的四边应该填充的完整图片数量、是否存在剩余像素int leftPixmapCount = lPixel / PIXMAP_SIZE;bool remainLeftPixel = lPixel % PIXMAP_SIZE;int rightPixmapCount = rPixel / PIXMAP_SIZE;bool remainRightPixel = rPixel % PIXMAP_SIZE;int topPixmapCount = tPixel / PIXMAP_SIZE;bool remainTopPixel = tPixel % PIXMAP_SIZE;int bottomPixmapCount = bPixel / PIXMAP_SIZE;bool remainBottomPixel = bPixel % PIXMAP_SIZE;// 计算呈现的瓦片地图左上角的瓦片坐标m_curTileCoord = MapUtility::tileCoordFromGeoCoord(m_geoCoord, m_curLevel);m_topLeftTileCoord.x = qMax(m_curTileCoord.x - leftPixmapCount, 0);m_topLeftTileCoord.y = qMax(m_curTileCoord.y - topPixmapCount, 0);if (remainLeftPixel && m_topLeftTileCoord.x > 0)m_topLeftTileCoord.x -= 1;if (remainTopPixel && m_topLeftTileCoord.y > 0)m_topLeftTileCoord.y -= 1;// 计算呈现的瓦片地图右下角的瓦片坐标int mapSideCount = MapUtility::mapSideCount(m_curLevel);m_bottomRightTileCoord.x = qMin(m_curTileCoord.x + rightPixmapCount, mapSideCount - 1);m_bottomRightTileCoord.y = qMin(m_curTileCoord.y + bottomPixmapCount, mapSideCount - 1);if (remainRightPixel && m_bottomRightTileCoord.x < mapSideCount - 1)m_bottomRightTileCoord.x += 1;if (remainBottomPixel && m_bottomRightTileCoord.y < mapSideCount - 1)m_bottomRightTileCoord.y += 1;// 计算瓦片集合,视口最小瓦片集合+周边瓦片集合vector<TileCoord> vecTileCoord;m_viewAndAroundTileRect = CommonUtility::getViewAndAroundTileCoords(m_topLeftTileCoord.y, m_topLeftTileCoord.x, m_bottomRightTileCoord.y, m_bottomRightTileCoord.x, m_curLevel, vecTileCoord);//showTileCoord();showGraticules();// 上方即为计算瓦片索引的核心代码,省略下方加载瓦片的代码...// 加载瓦片代码...
}

相关文章:

QGraphicsView实现简易地图11『指定层级-定位坐标』

前文链接&#xff1a;QGraphicsView实现简易地图10『自适应窗口大小』 提供一个地图初始化函数&#xff0c;指定地图显示的中心点和地图缩放层级 能够让地图显示某一层级的瓦片&#xff0c;并将中心点坐标显示在视图中心。 1、动态演示效果 7级地图-大连-老虎滩 定位到 8级地图…...

UE5 蓝图入门

基础节点创建&#xff1a; 常量&#xff1a; 按住 1 &#xff0c;点击鼠标左键&#xff0c;创建常量 二维向量&#xff1a; 按住 2 &#xff0c;点击鼠标左键&#xff0c;创建二维向量 三维向量&#xff1a; 按住 3 &#xff0c;点击鼠标左键 乘法&#xff1a; 按住 m 键…...

英语单词学习

house of worship:宗教场所 dote: 喜爱 coffin:棺材 coffeine:咖啡因 expedient:权宜的 buster:破坏者 procrastinate: 拖延 gourmet:美食家 expound:阐述 narcissist:自我陶醉 assassinate:暗杀 salvage: 挽救 savage: 凶猛的 ulcer: 溃疡 obituary:讣告 arbitrary:武断的 abu…...

使用Python编写自动化测试代码规范整理

大家好&#xff0c;我们平时在写自动化测试脚本或者性能测试脚本时&#xff0c;需要注意代码规范&#xff0c;提高代码的可读性与维护性&#xff0c;之前给大家分享过pycharm的两个插件&#xff0c;大家可以参考&#xff1a;Pycharm代码规范与代码格式化插件安装 本文中主要从自…...

实验七 SJK数据库定义与操纵

实验题目 实验七 SJK数据库定义与操纵 实验时间 2023.5.17 实验地点 软件工程基础实验室 实验课时 2 实验目的 ​了解并掌握数据库定义与操纵的知识并能熟练应用 实验要求 ​熟练掌握和使用PL-SQL建立数据库基本表&#xff0c;使用PL/SQL developer操作数据库&a…...

Win10环境下yolov8快速配置与测试-详细

0.0 说明 参考黄家驹的Win10 环境下YOLO V8部署&#xff0c;遇到一些问题&#xff0c;并解决实现&#xff0c;记录如下: 斜线字体是原博客中的创作 0.1 参考链接 https://blog.csdn.net/m0_72734364/article/details/128865904 1 Windows10下yolov8 tensorrt模型加速部署 …...

C++面向对象学习笔记一

本文阅读下述文章&#xff0c;顺手记录学习《C面向对象程序设计》✍千处细节、万字总结&#xff08;建议收藏&#xff09;_c面向对象程序设计千处细节-CSDN博客 目录 前言 正文 浅拷贝和深拷贝 向函数传递对象 静态数据成员和静态成员函数 友元 友元函数 1、将非成员函数声明…...

C++容器之vector类

目录 1.vector的介绍及使用1.1vector的介绍1.2vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector 空间增长问题1.2.4 vector 增删查改1.2.5vector 迭代器失效问题1.2.6 vector 在OJ中的使用。 2.vector深度剖析及模拟实现2.1 std::vector的核心框架接口…...

什么是MVCC?

MVCC是一种数据库的并发控制策略,就是为了解决多个用户同时访问数据库修改同一数据所造成的问题,如何解决这个问题了? 就是通过创建同一个数据的不同的版本,通过创建时间的不同,最后进行数据合并,其就不用给数据库上锁了,其实数据库的锁,虽然说InnoDB已经非常牛逼了,可以使用行…...

数据结构队列学习

引入 众说周知&#xff0c;在队列的题目中&#xff0c;队头指针(front)和队尾指针(rear)有两种指示方法。 &#xff08;1&#xff09;队头指针 ①指向队头元素 ②指向队头元素元素的前一个位置 &#xff08;2&#xff09;队尾指针 ①指向队尾元素 ②指向队尾元素的后一个位置 指…...

Javaweb第五次作业

poet数据库sql语言 create table poet(id int unsigned primary key auto_increment comment ID,name varchar(10) not null comment 姓名,gender tinyint unsigned not null comment 性别, 说明: 1 男, 2 女,dynasty varchar(10) not null comment朝代,title varchar(20) not…...

BetterMouse for Mac激活版:鼠标增强软件

BetterMouse for Mac是一款鼠标增强软件&#xff0c;旨在取代笨重的、侵入性的和耗费资源的鼠标驱动程序&#xff0c;如罗技选项。它功能丰富&#xff0c;重量轻&#xff0c;效率优化&#xff0c;而且完全隐私安全&#xff0c;试图满足你在MacOS上使用第三方鼠标的所有需求。 B…...

红米1s 刷入魔趣 (Mokee)ROM(Android 7.1)

目录 背景准备工具硬件&#xff08;自己准备&#xff09;软件&#xff08;我会在文末提供链接&#xff09; 刷机步骤1. 重启电脑2. 安装驱动3. 刷入TWRP4. 清空数据5. 刷入魔趣6. 开机 结尾下载链接 本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 B…...

MySQL中的事务隔离级别

事务隔离级别 未提交读(Read uncommitted)是最低的隔离级别。通过名字我们就可以知道&#xff0c;在这种事务隔离级别下&#xff0c;一个事务可以读到另外一个事务未提交的数据。这种隔离级别下会存在幻读、不可重复读和脏读的问题。提交读(Read committed)也可以翻译成读已提交…...

多线程应用实战

文章目录 1、如何实现多线程交替打印字母和数字&#xff0c;打印效果&#xff1a;A1B2C3D4...AutomicBlockingQueueReentrantLockLockSupportSynchronizedWaitNotifyTransferQueueWay 2、实现多个线程顺序打印abc3、实现阻塞队列 1、如何实现多线程交替打印字母和数字&#xff…...

selenium解放双手--记某电力学校的刷课脚本

免责声明:本文仅做技术交流与学习... 重难点: 1-对目标网站的html框架具有很好的了解,定位元素,精准打击. 2-自动化过程中窗口操作的转换. 前置知识: python--selenium模块的操作使用 前端的html代码 验证码自动化操作 Chrome & Chromedriver : Chrome for Testing ava…...

JDK 17有可能代替 JDK 8 吗

不好说&#xff0c;去 Oracle 化是很多公司逐步推进的政策。 JVM 有 OpenJ9。很多公司可能会用 IBM 的版本。 JDK 这东西&#xff0c;能用就不会升级。 JDK 太基础了&#xff0c;决定了后面的很多 jar 的版本。 https://www.ossez.com/t/jdk-17-jdk-8/14102...

代码随想录算法训练营第36期DAY23

DAY23 530二叉搜索树的最小绝对差 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(null…...

Leetcode 3128. Right Triangles

Leetcode 3128. Right Triangles 1. 解题思路2. 代码实现 题目链接&#xff1a;3128. Right Triangles 1. 解题思路 这一题的话对于任意一个位置&#xff0c;如果该位置为1&#xff0c;假设其所在行中1的个数 r i r_i ri​&#xff0c;所在列中1的个数为 c j c_j cj​&#…...

力扣经典150题第五十三题:基本计算器

目录 力扣经典150题第五十六题&#xff1a;基本计算器示例提示解题思路 力扣经典150题第五十六题&#xff1a;基本计算器 给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数&#xf…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...