Qgis二次开发-加载本地离线瓦片地图

news2025/2/24 3:43:48

1.使用详情

  • 准备离线瓦片地图数据:首先,需要获取离线瓦片地图数据。可以从一些开源地图提供商(如OpenStreetMap)下载地图切片数据,或者使用一些工具(如MapTiler)将自己的地图数据切片成瓦片格式。确保将切片数据保存在本地目录中。
  • 添加QGIS功能:在Qt项目中,可以使用QGIS的功能来加载和显示地图数据。在代码中导入必要的QGIS模块,如qgis_coreqgis_gui。然后,可以创建一个QgsApplication对象,并设置QGIS的环境变量。
  • 加载离线瓦片地图:使用QGIS的QgsRasterLayer类来加载瓦片地图。首先,创建一个QgsRasterLayer对象,并将地图数据的路径作为参数传递给它。然后,可以使用QgsMapCanvas类创建一个地图画布,并设置其范围和分辨率。最后,将QgsRasterLayer对象添加到地图画布中。
  • 显示地图:将地图画布添加到Qt窗口中,并在窗口中显示地图。可以使用Qt的布局管理器来管理窗口中的控件。

方法1:使用TMS.xml来加载本地瓦片地图

内容如下:

<GDAL_WMS>
    <Service name="TMS">
        <ServerUrl>file:///F:GisCtrl/x64/out/huairou/{z}/{x}/{y}.png</ServerUrl>
    </Service>
    <DataWindow>
        <UpperLeftX>-180</UpperLeftX>
        <UpperLeftY>90</UpperLeftY>
        <LowerRightX>180</LowerRightX>
        <LowerRightY>-90</LowerRightY>
        <TileLevel>15</TileLevel>
        <TileCountX>2</TileCountX>
        <TileCountY>1</TileCountY>
        <YOrigin>bottom</YOrigin>
    </DataWindow>
    <Projection>EPSG:3568</Projection>
    <BlockSizeX>256</BlockSizeX>
    <BlockSizeY>256</BlockSizeY>
    <BandsCount>3</BandsCount>
    <Cache />
</GDAL_WMS>

具体的xml文件解析如下:

WMS -- Web Map Services — GDAL documentation

然后将xml文件放到地图的目录下:

代码实现:

    QgsRasterLayer *layer = new QgsRasterLayer("F:/GisCtrl/x64/out/huairou/TMS.xml");

此方法不好用,我使用这个方法之后,对于高德下载的瓦片地图使用起来会存在问题,高德的地图层级从1开始,这个方法对于从0层开始的可能效果要好一些。

方法2:搭建一个nginx的gis本地服务(推荐这种)

修改nginx的nginx.conf文件,添加如下的路径,我监听的本地9090端口。

    server {
        listen       9090;
        server_name  abc.com;
        
		location / {
                root 'D:\APP\nginx-1.15.8\file';
                autoindex on;
                autoindex_exact_size off;
                autoindex_localtime on;
                charset utf-8;
                try_files $uri $uri/ /index.html;
        }
        
        location /download {
                alias F:\GisCtrl\x64\out\huairou;
                allow all;
                autoindex on;
        }

      }

启动服务,成功之后,看起来就像这样。 

代码实现:我使用的是高德的瓦片地图。

	QgsXyzConnection xyz;
	xyz.url = QStringLiteral("http://localhost:9090/download/{z}/{x}/{y}.png");
	xyz.zMin = 0;
	xyz.zMax = 16;
	xyz.tilePixelRatio = 1.0;

	QgsXyzConnectionUtils::addConnection(xyz);

	QString url2 = xyz.encodedUri();
	QgsRasterLayer *layer = addRasterLayerPrivate(url2, "OMG","wms");

具体的QgsXyzConnection类定义:看如下文章。

Qgis二次开发-加载高德在线地图失败报错Raster layer Cannot instantiate the ‘wms‘ data provider_Mr.codeee的博客-CSDN博客

同样,这样方法也适用于加载高德在线地图。 

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

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

相关文章

【ChatGLM_01】ChatGLM2-6B本地安装与部署(大语言模型)

基于本地知识库的问答 1、简介&#xff08;1&#xff09;ChatGLM2-6B&#xff08;2&#xff09;LangChain&#xff08;3&#xff09;基于单一文档问答的实现原理&#xff08;4&#xff09;大规模语言模型系列技术&#xff1a;以GLM-130B为例&#xff08;5&#xff09;新建知识库…

分布式限流方案及实现

优质博文&#xff1a;IT-BLOG-CN 一、限流的作用和意义 限流是对高并发访问进行限制&#xff0c;限速的过程。通过限流来限制资源&#xff0c;可以提高系统的稳定性和可靠性&#xff0c;控制系统的负载&#xff0c;削峰填谷&#xff0c;保证服务质量。 服务限流后的常见处理…

CSS动画——实现波浪摇摆效果...

一、效果展示 以下主要实现四个动画&#xff1a; 元素上下摇摆动画波浪上下摇摆动画气泡上升及消失动画连续气泡右飘动画 二、实现思路 这里主要讲一下波浪上下摇摆动画和连续气泡右飘动画的实现思路 这里拿一张波浪图来举例解释实现波浪动画的思路&#xff1a; 波浪的摇…

14-测试分类

1.按照测试对象划分 ①界面测试 软件只是一种工具&#xff0c;软件与人的信息交流是通过界面来进行的&#xff0c;界面是软件与用户交流的最直接的一层&#xff0c;界面的设计决定了用户对设计的软件的第一印象。界面如同人的面孔&#xff0c;具有吸引用户的直接优势&#xf…

深入理解Gradle构建系统的工作原理

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

《被讨厌的勇气》勇敢的人先享受世界

《被讨厌的勇气》勇敢的人先享受世界 岸见一郎&#xff0c;古贺史健 著 &#xff08;岸见一郎&#xff1a;日本作家&#xff0c;心理学家&#xff0c;哲学家。致力于研究哲学和阿德勒心理学。&#xff09; 渠海霞 译 文章目录 《被讨厌的勇气》勇敢的人先享受世界[toc]第一夜 我…

iOS 应用上架流程详解

iOS 应用上架流程详解 欢迎来到我的博客&#xff0c;今天我将为大家分享 iOS 应用上架的详细流程。在这个数字化时代&#xff0c;移动应用已经成为了人们生活中不可或缺的一部分&#xff0c;而 iOS 平台的 App Store 则是开发者们发布应用的主要渠道之一。因此&#xff0c;了解…

从电容到晶体管的基本介绍

​随着科技的不断进步&#xff0c;元器件在现代电子学中扮演着至关重要的角色。从电容器到晶体管&#xff0c;各种元器件都具有不同的特性和用途。本文将从基础知识出发&#xff0c;介绍电子学中常见的元器件&#xff0c;以及它们在电路中的作用和应用。 电容器 电容器是一种…

CommonCollections6链分析

前面和CC1一样 优点是不限制jdk版本和cc的版本 先开一个ChainedTransformer 然后创LazyMap 我们顺便执行一下避免上面写错 能弹计算器 没问题 后面就是CC6不同的地方了 我们需要一个TiedMapEntry 因为需要一个类调用了get方法 在TiedMapEntry的getValue()方法中调用了get()…

哪些元器件在未来会有更广泛的应用?

随着科技的发展和进步&#xff0c;电子技术已经成为现代社会的重要组成部分。元器件作为电子产品的基本构成单元&#xff0c;其发展和应用对于电子技术的进步和创新有着至关重要的作用。随着人工智能、物联网和智能制造等新兴技术的快速发展&#xff0c;一些元器件已经或者将在…

vue基础-diff算法

vue基础-diff算法 1、根元素改变2、根元素不变 1、根元素改变 同级比较-根元素的变化-整个dom树删除重建 2、根元素不变 同级比较&#xff0c;根元素不变-属性改变更新属性

【计算机网络】HTTP详解

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招工作面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于小林Codeing进行的&#xff0c;每个知识点的修正和深入主要参考…

Prometheus 服务端与客户端

服务端安装配置 1&#xff09;下载服务端&#xff1a; wget https://github.com/prometheus/prometheus/releases/download/v2.43.0-rc.0/prometheus-2.43.0-rc.0.linux-amd64.tar.gztar zxvf prometheus-2.43.0-rc.0.linux-amd64.tar.gz#解压 tar -xvf prometheus-2.32.1.li…

iOS开发-启动页广告实现

iOS开发-启动页广告实现 启动页广告实现是一个非常常见的广告展示模式。 就是在启动时候显示广告&#xff0c;之后点击跳转到广告页面或者其他APP。 一、实现启动页广告 启动页广告控件实现&#xff0c;将View放置在keyWindow上&#xff0c;显示广告图片&#xff0c;点击广告…

https://app.hackthebox.com/machines/Sau

https://app.hackthebox.com/machines/Sau https://app.hackthebox.com/machines/Sau1.info collecting └─$ nmap -A 10.10.11.224 -T4 Starting Nmap 7.93 ( https://nmap.org ) at 2023-07-30 15:36 HKT Nmap scan report for 10.10.11.224 (10.10.11.224) Host is up (…

Arrays(数组)工具类

java.util.Arrays 是一个与数组相关的工具类&#xff0c;里面提供了大量静态方法&#xff0c;用来实现数组常见的操作。 Arrays.toString ( 数组名 )将参数数组变成字符串&#xff08;按照默认格式&#xff1a;[10, 20, 30]&#xff09;Array.sort ( 数组名 ) 按照默认升序&…

C++ ------类和对象详解六大默认成员函数

文章目录 类的6个默认成员函数概念 构造函数概念特点 析构函数概念特征 拷贝构造函数概念特点 赋值运算符重载运算符重载的概念特性赋值运算符重载格式特性 取地址及const取地址操作符重载 类的6个默认成员函数 如果我们定义一个类&#xff0c;然后这个类中什么也没有。那么这里…

java之juc

juc是java.util.current的简写&#xff0c;意思是并发编程。 锁是什么&#xff1f;如何判断锁的是谁&#xff1f; 生产者和消费者问题 synchronized版本 package com.demo.juc.pc;/*** 线程之间的通信问题&#xff0c;生产者和消费者问题&#xff01;* 线程交替执行** a b …

聊聊这几年的科技风口

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 数数这几年的科技风口&#xff1a;AR&#xff08;包括什么MR、VR&#xff09;、区块链(包括后来的什么web3)、元宇宙到现在的AI&#xff0c;下面逐一谈谈…