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

【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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • xcode14.2学习笔记 swift5开发macos网络程序笔记
  • CPU缓存一致性机制详解
  • 我的第一个CUDA程序
  • AI大模型入门基础教程(非常详细),AI大模型入门到精通,收藏这一篇就够了!
  • C# MaterialDesign抽屉式风格
  • 静态代理和动态代理
  • JavaEE从入门到起飞(八) ~ Git
  • 今日(2024 年 8 月 15 日)科技新闻
  • RESTful API设计指南:构建高效、可扩展的Web服务
  • 仿RabbitMq实现简易消息队列正式篇(连接篇)
  • C 开源库之cJSON
  • 比特币8.12学习问题
  • 学懂C++(二十三):高级教程——深入详解C++ 标准库的多线程支持
  • JavaScript 详解——Vue基础
  • vue 后台管理 之 状态管理 vuex 的使用
  • [译]CSS 居中(Center)方法大合集
  • 08.Android之View事件问题
  • CSS3 变换
  • ES10 特性的完整指南
  • es6要点
  • github从入门到放弃(1)
  • Java多态
  • Linux下的乱码问题
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • REST架构的思考
  • tensorflow学习笔记3——MNIST应用篇
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue--数据传输
  • 记一次和乔布斯合作最难忘的经历
  • 前端面试总结(at, md)
  • 区块链将重新定义世界
  • 新版博客前端前瞻
  • 自动记录MySQL慢查询快照脚本
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • #pragma 指令
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (回溯) LeetCode 77. 组合
  • (六)Flink 窗口计算
  • (六)vue-router+UI组件库
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (七)Knockout 创建自定义绑定
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .net core 外观者设计模式 实现,多种支付选择
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net 提取注释生成API文档 帮助文档
  • .Net 执行Linux下多行shell命令方法
  • .NET中 MVC 工厂模式浅析
  • .net专家(张羿专栏)
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法