Tilemaker:include_ids 和 OSM ID

问题描述 投票:0回答:1

我目前正在使用 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``

openstreetmap maplibre-gl
1个回答
0
投票

feature.id 的最低 40 位是真实的 OSM id,其余编码对象类型: 1=节点,2=方式,3=关系。 请参阅 TileMaker 源代码中的 include/output_object.h。 所以:

osmId = feature.id & 0xffffffffff;
osmType = feature.id >>> 40;
© www.soinside.com 2019 - 2024. All rights reserved.