【Rust】使用开源项目搭建瓦片地图服务

本文通过获取在线和离线地图数据,使用开源Rust项目搭建瓦片地图服务,并使用DevExpress的MapControl控件使用自建地图服务

获取地图数据

获取地图数据有很多种方式,这里分别用在线和离线地图数据举例说明

在线下载瓦片地图

打开在线瓦片地图下载网站,【划范围】,勾选精度,【下载】

在这里插入图片描述

在这里插入图片描述

下载后得到压缩包“tiles.zip”

下载OpenStreetMap离线地图数据

OpenStreetMap是一个自由的街道级世界地图,它由日益壮大的绘图者团体创造。 任何人都可以编辑OpenStreetMap

数据下载地址:Geofabrik Download Server

在这里插入图片描述

下载后缀为“.bz2”格式的文件,使用开源项目工具bzip2处理

比如下载文件为“antarctica-latest.osm.bz2”,处理后得到文件“antarctica-latest.osm”

bunzip2 antarctica-latest.osm.bz2

接着处理.osm文件,使用maperitive,打开maperitive软件,打开文件“antarctica-latest.osm”

右下角【Map Sources】取消勾选“Web map”

在这里插入图片描述

在【Command prompt:】输入如下命令,maxzoom设置范围1-5,范围最大值越大,看到细节更多,Tiles文件夹体积也越大

generate-tiles minzoom=1 maxzoom=5

运行过后,在maperitive的安装目录下就会多一个Tiles文件夹

搭建开源瓦片地图服务

这里我使用本人用Rust开发的tiles_rs,启动服务的命令如下

tiles_rs.exe --tiles-dir=C:\Users\Tiles --host=0.0.0.0 --port=5000 --log_level=warn
  • tiles-dir: 为瓦片地图数据文件夹
  • host: 服务器IP地址
  • port: 端口
  • log_level: 日志级别

更多使用方式,查看help命令

tiles_rs.exe --help
================================================================================
Overview
================================================================================
Tiles_rs is an open-source project that aims to provide a fast and reliable tile map server implementation using Rust.
Built on top of the Actix web framework, this project offers a modern approach to serving map tiles,
catering to the needs of developers working on geographic information systems (GIS) and web mapping applications.# Examples‍```sh
tiles_rs.exe --tiles-dir=C:\Users\Tiles --host=0.0.0.0 --port=5000 --log_level=warn
‍```# Api- /tiles/{z}/{x}/{y}{z} - The current zoom level.
{x} - The horizontal (X) index of the requested tile.
{y} - The vertical (Y) index of the requested tile.Usage: tiles_rs.exe [OPTIONS]Options:--tiles-dir <TILES_DIR>Directory containing tile images[default: Tiles]--host <HOST>Host to bind the server to[default: localhost]--port <PORT>Port to bind the server to[default: 5000]--log-level <LOG_LEVEL>Log level (error, warn, info, debug, trace)[default: info]-h, --helpPrint help (see a summary with '-h')-V, --versionPrint version

使用地图数据

这里使用DevExpress v24.1的MapControl控件,项目代码在Github,只需要修改一行代码,修改使用地图的数据接口模板

provider.TileUriTemplate = "http://IP:PORT/tiles/{1}/{2}/{3}";
  • {1} - The current zoom level.
  • {2} - The horizontal (X) index of the requested tile.
  • {3} - The vertical (Y) index of the requested tile.

使用刚刚在线下载的瓦片地图数据,效果显示如下

在这里插入图片描述

参考

  1. 下载OpenStreetMap离线地图数据并搭载瓦片服务器_openstreetmap瓦片下载-CSDN博客
  2. OpenStreetMapDataProvider.TileUriTemplate Property | WinForms Controls | DevExpress Documentation
  3. https://github.com/DevExpress-Examples/winforms-map-connect-to-openstreetmap.git
  4. http://maperitive.net/
  5. https://github.com/VinciYan/tiles_rs.git
  6. https://github.com/philr/bzip2-windows.git

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

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

相关文章

搭建内网开发环境(一)|基于docker快速部署开发环境

引言 最近因需要搭建一套简易版的纯内网的开发环境&#xff0c;服务器采用 centos8.0&#xff0c;容器化技术采用 docker 使用 docker-compose 进行容器编排。 该系列教程分为两大类&#xff1a; 软件安装和使用&#xff0c;这类是开发环境常用的软件部署和使用&#xff0c;涉…

Oracle VM VirtualBox虚拟机内存不够用的解决方案

一、 前言 在使用Oracle VM VirtualBox虚拟机的过程中&#xff0c;随着时间的推移&#xff0c;我们会感觉我们的内存越来越不够用&#xff0c;今天就来给大家分享一下我们如何解决虚拟机内存不够用的问题。 二、解决方法 1.虚拟机碎片化整理 我们第一步要做的是碎片整理&…

VScode找python环境 (conda)

CtrlshiftP 会弹出如下框&#xff1a; 框里输入&#xff1a; Python:Select Interpreter 会得到&#xff1a;

24/8/15算法笔记 dp策略迭代 价值迭代

策略迭代&#xff1a; 策略迭代从某个策略开始&#xff0c;计算该策略下的状态价值函数。它交替进行两个步骤&#xff1a;策略评估&#xff08;Policy Evaluation&#xff09;和策略改进&#xff08;Policy Improvement&#xff09;。在策略评估阶段&#xff0c;计算给定策略下…

模电实验3 - 单电源集成运放交流耦合放大器

实验目标 学习集成运放的单电源使用。掌握交流耦合单电源集成运放放大器的测试方法。了解交流耦合单电源集成运放放大器的特点。 实验器材 ADALM2000 1kΩ 电阻 (1/4 W) x 1 10 kΩ 电阻 (1/4 W) x 1 100kΩ 电阻 (1/4 W) x 3 0.1μF电容 x 1 1μF电容 …

【深度学习】单层神经网络

单层神经网络 神经元感知机 1943年&#xff0c;心理学家McCulloch和数学家Pitts共同发表了神经网络的开山之作A Logical Calculus of the Ideas Immanent in Nervours Activity1&#xff0c;提出了神经网络的第一个数学模型——MP模型。该模型也成为了人工神经网络的基础。 神经…

7 数据存储单位,整型、浮点型、字符型、布尔型数据类型,sizeof 运算符

目录 1 数据类型的分类 2 数据存储单位 2.1 位 2.2 字节 2.3 其余单位 3 整数类型 3.1 基本介绍 3.2 整型的类型 3.2.1 整数类型多样性的原因 3.2.2 整型类型之间的相对大小关系 3.3 整型注意事项 3.4 字面量后缀 3.5 格式占位符 3.6 案例&#xff1a;声明并输出…

无参数读文件

目录 代码 代码解析 如何绕过获取flag 第一种方法(在apache中) ​编辑 第二种方法 首先获取目录下文件 代码 <?php highlight_file(__FILE__); if(; preg_replace(/[^\W]\((?R)?\)/, , $_GET[code])) { eval($_GET[code]); } ?> 代码解析 [^\W]\((?R)?…

接口优化笔记

索引 添加索引 where条件的关键自动或者order by后面的排序字段可以添加索引加速查询 索引只能通过删除新增进行修改&#xff0c;无法直接修改。 # 查看表的索引 show index from table_name; show create table table_name; # 添加索引 alter table table_name add index …

C/C++开发---全篇

1、统筹 学习目标&#xff1a; C/C、python精通。 就业匹配方向&#xff1a;专精一个领域&#xff0c;延长职业生涯。 &#xff08;1&#xff09;适配行业&#xff1b; &#xff08;2&#xff09;量化&#xff1b; &#xff08;3&#xff09;安全&#xff1b; &#xff08;4&…

华为od统一考试B卷【比赛】python实现

def split_params(param_str): return list(map(int, param_str.split(,))) def main(): # 获取输入 target_str input().strip() # 输入验证&#xff0c;拆分并转换为整数 try: m, n split_params(target_str) except ValueError: print(-1) return # 检查 M 和 …

react的pdf转图片格式上传到后端

这个东西做的我真的是头昏脑涨 主要需求是&#xff0c;upload上传pdf&#xff0c;pdf转图片格式展示&#xff0c;以图片格式上传到后端 封装了组件代码 父组件直接放就可以了 使用的插件pdfjs-dist&#xff0c;版本是 "pdfjs-dist": "2.5.207", impor…

高性能跨平台网络通信框架 HP-Socket v6.0.2

项目主页 : http://www.oschina.net/p/hp-socket开发文档 : https://www.docin.com/p-4592706661.html下载地址 : https://github.com/ldcsaa/HP-SocketQQ Group: 44636872, 663903943 v6.0.2 更新 一、主要更新 优化Linux通信组件多路复用处理架构&#xff0c;避免“惊群”问…

计算机的错误计算(六十三)

摘要 计算机的错误计算&#xff08;五十六&#xff09;探讨了大数的正切函数值的错误计算。本节讨论大数的余切函数的计算精度问题。 例1. 已知 计算 不妨用 3种方法计算。 (1) 在 Python 中利用 直接贴图&#xff1a; (2) 在 Java 中利用 若运行下列代码 import ja…

高密度互连HDI

HDI&#xff08;High Density Interconnector&#xff0c;高密度互连&#xff09;是一种先进的PCB技术&#xff0c;在有限的空间内&#xff0c;通过使用微细过孔和精细的布线来提高电路板的集成度。 特点&#xff1a; 微细过孔&#xff08;Microvias&#xff09;&#xff1a;…

城V4系列版本开源前后端uniapp代码

本文来自&#xff1a;智慧同城V4系列版本开源前后端uniapp代码 - 源码1688 应用介绍 演示地址&#xff1a;https://tongchengsaas.88881111.icu/ 账号&#xff1a;ceshi 密码&#xff1a;12345678 前端演示&#xff1a; 测试环境 php7.2mysql5.6ningx 安装拓展 ioncube&#x…

来看看设计日志组件SDK的基操

一、总览 设计一个日志组件来监控业务中的流程节点&#xff1b;我们需要分三步&#xff1b; 获取数据整理数据上传数据 二、获取数据 日常项目中使用的日志组件有&#xff1a;logback log4j: 优点&#xff1a;成熟稳定&#xff0c;灵活性高&#xff0c;性能良好&#xff0…

Windows平台RTSP|RTMP播放器如何实时调节音量

我们在做Windows平台RTSP、RTMP播放器的时候&#xff0c;有这样的技术需求&#xff0c;特别是多路监控的时候&#xff0c;并不是每一路audio都需要播放出来的&#xff0c;所以&#xff0c;这时候&#xff0c;需要有针对音量调节的设计&#xff1a; /** smart_player_sdk.cs* C…

★ C++基础篇 ★ 栈和队列

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第八章----栈和队列 ~ 目录 一 容器适配器 二 deque的简单介绍 2.1 deque的原理介绍 2.2 deque vector list 的优缺点 2.2.1 vector 2.2.2 list 2.2.3 deque 2.3 为什么选择deq…

ECMAScript性能优化技巧与陷阱

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言 ECMAScript&#xff0c;即JavaScript&#xff0c;是一种广泛应用于Web开发中的脚本语言。随着现代Web应用的复杂度日益增加&#xff0c;如何优化JavaScript的性能变得至关重要。性能优化不仅能提高应用的响应速度&#x…