1、参考文档
https://github.com/systemed/tilemaker
https://github.com/systemed/tilemaker/blob/master/docs/INSTALL.md
2、下载 china-latest.osm.pbf
Geofabrik Download Server
![](https://img-blog.csdnimg.cn/img_convert/b3029f5219f6f00a54aad00e592b8736.png)
3、使用一台16H 32G的服务器来转换
3.1、下载tilemaker
git clone https://github.com/systemed/tilemaker.git
cd tilemaker
3.2、修改config.json
根据自己的需要调整minzoom、maxzoom,最大只能设置16,如果超过16,就会报错 Compile tilemaker
with -DFAT_TILE_INDEX to enable tile output at zoom level 17 or greater。
解决办法:
需要修改源码文件为:src/shared_data.cpp
void Config::readConfig(rapidjson::Document &jsonConfig, bool &hasClippingBox, Box &clippingBox) {
baseZoom = jsonConfig["settings"]["basezoom"].GetUint();
startZoom = jsonConfig["settings"]["minzoom" ].GetUint();
endZoom = jsonConfig["settings"]["maxzoom" ].GetUint();
includeID = jsonConfig["settings"]["include_ids"].GetBool();
highResolution = jsonConfig["settings"].HasMember("high_resolution") && jsonConfig["settings"]["high_resolution"].GetBool();
if (! jsonConfig["settings"]["compress"].IsString()) {
cerr << "\"compress\" should be any of \"gzip\",\"deflate\",\"none\" in JSON file." << endl;
exit (EXIT_FAILURE);
}
#ifndef FAT_TILE_INDEX
if (endZoom>16) {
cerr << "Compile tilemaker with -DFAT_TILE_INDEX to enable tile output at zoom level 17 or greater" << endl;
exit (EXIT_FAILURE);
}
将 endZoom>16 修改为 endZoom>22,但是需要很大的计算机资源,猜测需要16H128G
3.3、使用docker构建镜像
cd tilemaker
docker build . -t tilemaker
3.4、启动
docker run -v /root/tilemaker_data/:/srv -i -t --rm tilemaker /srv/china-latest.osm.pbf --output=/srv/china.mbtiles
3.5、运行
/root/map_8g/:china.mbtile和样式存放的文件夹
docker run --rm -it -v /root/map_8g/:/data -p 8081:80 maptiler/tileserver-gl