尝试导出矢量瓦片地图:使用Raspberry Pi搭建矢量瓦片服务器 (2)
首先
在这篇文章中,我将写下最近尝试使用 Raspberry Pi 进行的实验,即将 Web 地图(矢量瓦片地图)从中取出。虽然与去年的文章(用 Raspberry Pi 制作矢量瓦片服务器)有一些重复的地方,但这次我打算尝试使用 Raspberry Pi 这个平台来实际测试3种提取数据的方法。

基本方針
关于创建矢量瓦片服务器的方针
由于我想要导出的矢量瓦片将达到几GB大小,所以将以mbtiles格式而不是pbf格式导出矢量瓦片。因此,与去年一样,将使用nodejs / express服务器实现。将提供以下功能:
-
- 静的なホスティング(pbfタイル、その他コンテンツ)
-
- 1つのmbtilesファイルからpbfを返す仕組み(サーバーサイド、nodejsで実現)
-
- 複数のmbtilesからpbfを返す仕組み(サーバーサイド、nodejsで実現)
内部でベクトルデータ配信を実装するのに使った方法なので開発済み。
複数のmbtilesからラスタタイルpng形式を返す仕組み(サーバーサイド、nodejsで実現)
内部でRGB標高タイル(ラスタタイル)配信を実装するのに使った方法なので開発済み
关于树莓派的使用指南
我想尝试以下的3种方案,并记下每种方案的特点作为备忘。
-
- パターン1: ラズベリーパイをLANケーブルでPCにつなぐ
オフライン環境でもデータにアクセスできる。
通信が高速(ケーブルで接続しているため)。
データのセキュリティが保たれる(接続しているPCのみ)
データへアクセスできるPCが限られる。(接続PCが他PCに共有されていない場合。)
パターン2: ラズベリーパイを既存のWifiネットワーク(or ローカルネットワーク)につなぐ
Wifiネットワーク(ローカルネットワーク)があることが前提
データはローカルネットワーク内に保たれる。
複数の端末が同時にデータにアクセスできる。
既存のWifiネットワークを邪魔しない。(インターネット接続を維持できる。)
パターン3: ラズベリーパイのWifiスポットを立ち上げる
オフライン環境でもデータにアクセスできる。
ラズベリーパイのWifiにアクセスするため、ほかのWifiネットワークから切り替えないといけない。(インターネットへの接続を失う場合も)
複数の端末が同時にデータにアクセスできる。
实验数据的市场观察和策略
由于本次实验的数据是内部数据,无法在外部环境中使用。但是,数据的特点如下所示。
-
- グローバルデータは350GBを超える
ベクトルタイルデータ(基本地物)170 GB
ベクトルタイルデータ(等高線) 32 GB
RGB標高タイル 185 GB
個別地域は数GBに収まる (例:南スーダンをカバーする範囲)
ベクトルタイルデータ(基本地物)1.48 GB
ベクトルタイルデータ(等高線) 0.54 GB
RGB標高タイル 2.83 GB
如果要覆盖整个南苏丹:
可以选择7个区块,分别是6-36-30、6-36-31、5-18-14(海拔格为6-37-29)、6-37-30、6-37-31、6-38-30和6-38-31。
我的环境 (Wǒ de
-
- Raspberry Pi: 3B (400もありますが、今回は3Bで実験)
-
- SDカード: 32GB、SDHCカード(V10,U1)
-
- パソコン: Windows 10 (Windows PowershellでラズベリーパイにSSH接続、たまにWinSCPも使います。)
- LANケーブルでパソコンとラズベリーパイを接続
实际工作
第一步:准备服务器脚本等。
首先,我使用nodejs/express创建了一个服务器(https://github.com/ubukawa/albite)。我还添加了一个小规模的数据示例(源自NaturalEarth)用于演示。
这个不是全新创建的,而是收集和更新了以前已经在使用的东西。这里不会详细介绍服务器的细节,但是基本的构建方式在去年的文章(”使用nodejs创建矢量瓦片服务器(从mbtiles提供pbf)”)中已经写过了。

对于这个服务器,如果再详细解释一下的话,大致是以下的样子。
-
- nodejs/expressでうごく。パソコン(nodejs ver. 16)では動作確認済み。(ラズパイはnodejs 18 だが問題なく動いた)
-
- 主な機能
app.js で httpサービスの実行(keyがあればhttpsにもできます)、ログの記録、静的なホスティングなどをする。
routeフォルダの中に、単一のmbtilesからpbfを返すもの(VT.js)、複数のmbtilesからpbfを返すもの(UNVT.js)、複数のmbtilesからpngラスタタイルを返すもの(rgbElev.js)を入れておく。app.jsでルーティングしているので、それぞれ以下のパスでアクセス可能:
VT/zxy/{mbtiles name}/{z}/{x}/{y}.pbf
UNVT/zxy/{mbtiles group name}/{z}/{x}/{y}.pbf
rgb-elev/zxy/{z}/{x}/{y}.pbf
静的にホスティングされる htdocs にMapLibre GL JS などのウェブ地図関連ファイルを格納。特にオフラインで利用する可能性もあるのでマップライブラリ等はローカルにあることが重要
htdocs/font –> NotoSansやNotoSansDisplayなどのフォント(pbf形式)をいくつか格納
htdocs/maplibre-gl@2.4.0 –> MapLibre GL JS
htdocs/maps –> スタイルファイルと地図用htmlが入っています
htdocs/pbf_tile –> pbfタイルを静的にホスティングするときのための場所
htdocs/sprite-rev –> 我々用の地図記号
htdocs/watergis –> 将来の拡張用に、watergisさんのMapLibreプラグインを2ついれてあります。
第二步:准备树莓派。
因为在2022年12月2日时,Raspberry Pi Imager已更新至1.7.3版本,所以我将从Raspberry Pi的网页(此处)下载它,并将Raspberry Pi OS安装到一张新的Micro SD卡上。这次我将尝试重新写入到新的Micro SD卡中。
2-1. 操作系统的准备

2-2. 打开电源并通过SSH访问


升级后,请重新启动并连接到WiFi。(但是,我无法连接到工作场所的WiFi。原因是我的树莓派是3B型号,而工作场所的WiFi是5 GHz频段。从3B+型号开始,它似乎也可以支持5 GHz频段。(之前我用树莓派400时能成功连接到该网络。))
安装工具
使用 nodejs 等必要的工具和服务器相关的仓库 (https://github.com/ubukawa/albite) 安装。我们将使用以下的 install.sh 脚本将我的服务器克隆与与 unvt/equinox 安装程序相关的矢量切片生产等功能分离。这个安装程序可以在 GitHub 上找到,通过 https://ubukawa.github.io/albite/install.sh 访问。
##############
# This is for raspberry pi implementation (not for CentOS/RHEL)
# This is a subset of the tools installed by https://github.com/unvt/equinox/blob/master/install.sh with my server repository
##############
cd $HOME
sudo apt update
sudo apt -y upgrade
curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update
sudo apt install -y autoconf automake cmake code git gpsd gpsd-clients gpsd-tools libsqlite3-dev libtool raspberrypi-kernel-headers nodejs parallel sqlite3 tmux unar vim xrdp yarn zip #gdal-bin nginx pdal ruby
sudo service xrdp restart
sudo yarn global add browserify hjson pm2 rollup @mapbox/mapbox-gl-style-spec @pushcorn/hocon-parser @unvt/charites
git clone https://github.com/ubukawa/albite
cd albite; npm install; cd ..

curl -sL https://ubukawa.github.io/albite/install.sh
curl -sL https://ubukawa.github.io/albite/install.sh | bash -

将用于实验的数据放入。



我已经做到了这一步,树莓派的准备工作已经完成了。
2-5. 对样式文件中的路径进行一些微调。

-
- LANケーブル: unvt-us-p01.local
- Wifi: unvt-us-p01
2-6. 服务器的运行
首先不要直接用pm2,先试着用普通的nodejs命令来启动服务器。
node app.js

步骤三:尝试通过各种途径查看地图。
用LAN电缆将树莓派连接到电脑上,然后打开地图(unvt-us-p01.local:8836)以查看。






通过WiFi(在本地网络内)观看(UNVT-US-P01:8836)。

然后再次启动服务器。我们确认可以从连接到同一Wi-Fi(本地网络)的设备上访问地图,地址为unvt-us-p01:8836。现在我们可以从手机上查看矢量瓦片地图了。

3-3. 将树莓派设为Wi-Fi接入点并连接Wi-Fi后进行查看 (unvt-us-p01:8836)
这次我要将树莓派设置为一个访问点。我按照之前这篇文章(在这里)的方法将其设置为了一个WiFi访问点。

对结果的讨论
以下的三种情况,都可以查看网络地图。我们可以把它转化为表格来考虑。
-
- 使用LAN网线将树莓派连接到电脑,以查看地图。
-
- 通过Wifi(在本地网络中)查看。
- 将树莓派设为Wifi接入点并通过Wifi连接后查看。
对于1和2,我认为用户可以保持对互联网的访问并使用树莓派是非常有吸引力的。1具有快速的地图响应,但访问的人数大约只有一个(连接树莓派的计算机的所有者),这是一个缺点。此外,我认为如果使用1,可以在Windows PC上创建虚拟环境(例如使用docker)并启动服务器也可以获得类似的效果。2是通过Wifi连接,所以相对较多的人可以访问同一个局域网,但响应可能比1和3慢一些。
3,在失去对互联网的连接时,可以提供离线地图,并且通信和地图绘制可能比2更快。
因此,由于每种方法都有各自的特点,我希望继续进行调查。然而,无论使用哪种方法,我的实验都是使用http。此外,虽然我尝试了三种方法,但我认为树莓派更适合在离线环境下使用,或者用于课程教材等特定情况,而不是用于永久操作。
总结
我使用树莓派制作了一个网络地图。我成功地确认了三种模式的运行状况。
请提供下列资料的参考。