【Rust】使用開源專案搭建瓦片地圖服務

VinciYan發表於2024-08-14

本文透過獲取線上和離線地圖資料,使用開源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, --help
          Print help (see a summary with '-h')

  -V, --version
          Print 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

相關文章