OpenStreetMap (OSM) 是一个由世界各地的人们共同创建的免费世界地图——免费、开放和独立。虽然作为市场领导者的谷歌地图通常是数字地图的首选,但 OSM 依赖于完全不同的原则:一个收集、改进并免费提供地理数据的协作社区。
为什么这很重要?因为地图就是知识——而知识应该是免费的。对于单个应用程序,自己托管 OSM 数据可能会很有用,以便开发定制的地图解决方案并保留对数据及其呈现的控制。自托管 OSM 具有多种优势:
- 独立: 您不依赖外部服务并可以完全控制卡数据。
- 适应性: 您可以根据自己的需要自定义地图样式和显示的数据。
- 数据保护: 所有数据均本地托管。没有调用任何外部 API。
显示地图的主要方法有两种:
- 格子瓷砖: 为不同缩放级别预先制作的图像文件。它们易于实现,但在定制地图样式方面灵活性较差。
- 矢量切片: 包含在客户端呈现的矢量(点、线、多边形)形式的地理数据。这允许灵活调整地图设计并在所有缩放级别上清晰显示。然而,渲染需要客户端设备具有更多的计算能力。
矢量切片特别适合自托管,因为它们提供更多自定义选项并且效率更高。对于面积较小的区域地图,~1 GB 的硬盘空间通常就足够了。使用 SSD 是有意义的,因为它们在加载图块时具有速度优势。静态矢量图块不需要运行地图服务器(例如 TileServer GL 或 Mapnik),维护要求较低且服务器负载较少 - 它们非常适合具有固定地图部分的小型项目。
我的小包裹 osmhelper 促进创建和部署矢量切片的过程 .osm.pbf
文件。自定义边界框允许开发人员提取特定的地理区域并生成可直接上传到服务器的匹配样板文件。这使得 OSM 数据集成到 Web 项目中变得更加容易。要使用 osmhelper,需要做一些准备。该库基于以下工具: 锇, 工具 和 瓷砖工 必须安装。
锇的安装
osmium是一个处理 OSM 数据的强大工具。
mkdir osmium
cd osmium
wget https://github.com/osmcode/osmium-tool/archive/refs/tags/v1.16.0.tar.gz
tar -xzf v1.16.0.tar.gz
cd osmium-tool-1.16.0
apt-get install libosmium2-dev libprotozero-dev nlohmann-json3-dev libboost-program-options-dev libbz2-dev zlib1g-dev liblz4-dev libexpat1-dev cmake pandoc
mkdir build
cd build
cmake ..
make
make install
cd ..
cd ..
rm -rf ./osmium
exec env -i HOME=$HOME bash -l
osmium --version
Mbutil 的安装
mbutil是一个基于 Python 的用于处理 MBTiles 的工具。
git clone https://github.com/mapbox/mbutil.git
cd mbutil
python setup.py install
cd ..
rm -rf ./mbutil
exec env -i HOME=$HOME bash -l
mb-util --version
瓷砖机的安装
tilemaker是一个开源工具,可以将 OSM 数据直接转换为矢量图块。
apt install build-essential libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-system-dev lua5.1 liblua5.1-0-dev libshp-dev libsqlite3-dev rapidjson-dev
git clone https://github.com/systemed/tilemaker.git
cd tilemaker
make
make install
cd ..
rm -rf ./tilemaker
exec env -i HOME=$HOME bash -l
tilemaker --help
下载转换脚本
mkdir openstreetmap
cd openstreetmap
wget -O ./convert.sh https://raw.githubusercontent.com/vielhuber/osmhelper/refs/heads/master/convert.sh
chmod +x convert.sh
使用 osmhelper
安装所需工具后,osmhelper 可用于生成矢量瓦片并准备托管:
./convert.sh \
--url https://download.geofabrik.de/europe/germany-latest.osm.pbf \
--lat-min 47.27 \
--lon-min 8.97 \
--lat-max 50.57 \
--lon-max 13.84 \
--compress
此过程使得高效地提供定制的地图部分成为可能,而无需动态地图服务器。将 OpenStreetMap 数据集成到您自己的项目中可能很复杂,尤其是在托管和部署方面。由于谷歌地图在地图解决方案方面处于垄断地位,许多开发人员正在寻找替代方案。 osmhelper 让您更轻松地开始托管您自己的 OpenStreetMap 数据。这使您可以完全控制您的地图,没有 API 限制,并能够添加您自己的数据层。
大多数人都知道谷歌地图是数字地图的标准解决方案。但很少有人知道 OpenStreetMap 是一个很好的替代方案——没有商业限制或隐藏费用。虽然谷歌地图收取 API 使用费并收集用户数据,但 OSM 是免费、开放的,并得到全球社区的支持。 OSM 是地图世界的维基百科——任何人都可以贡献、添加道路、徒步路线或 POI(兴趣点),从而改进免费的世界地图。