我目前正在使用 tilemaker https://github.com/systemed/tilemaker/blob/master/docs/CONFIGURATION.md 从 osm pbf 文件生成 mbtiles。
我在配置文件中设置参数
include_ids
到true
以在每个mbtiles对象(节点或方式)中生成原始osm ID。
"settings": {
"include_ids": true,
...
}
到目前为止我不明白的是,Tilemaker 生成的 ID 实际上不是原始的 OSM ID,我可以通过
obj:Id()
获取
为什么通过“include_ids = true”生成的 tilemaker ID 实际上不是来自初始源的预期 osm id 有什么原因吗?
我正在使用
queryRenderedFeatures
中的 maplibre
来验证我的 mbtiles 的内容,例如我有
[
{
"type": "Feature",
"properties": {
"osm_id": "4349756002",
"name:latin": "Gilgamesch",
},
"id": 1103861383778,
"layer": {
"id": "poi",
"type": "symbol",
"source": "openmaptiles",
"source-layer": "poi",
"metadata": {},
"minzoom": 15.5,
"layout": {
"text-font": [
其中
"osm_id": "4349756002"
是来自 OSM 的真实节点 ID(我是从 pbf 的 obj:Id()
手动获取的),而 "id": 1103861383778
是由 tilemaker
生成的。我可以确认预期的 osm id 是https://nominatim.openstreetmap.org/ui/details.html?osmtype=N&osmid=4349756002
任何人都能够阐明我做错了什么?好奇有没有口罩可以申请从
1103861383778
到`4349756002``
feature.id 的最低 40 位是真实的 OSM id,其余编码对象类型: 1=节点,2=方式,3=关系。 请参阅 TileMaker 源代码中的 include/output_object.h。 所以:
osmId = feature.id & 0xffffffffff;
osmType = feature.id >>> 40;