【问题标题】:How to create a new mapbox style programmatically via the mapbox api?如何通过 mapbox api 以编程方式创建新的 mapbox 样式?
【发布时间】:2020-06-26 21:51:03
【问题描述】:

我正在尝试通过 api 以编程方式在我的 mapbox 帐户中创建一个新的 mapbox style。但是,我发现缺少这方面的文档。通过 api 创建样式的 mapbox 文档在这里:

https://docs.mapbox.com/api/maps/#create-a-style

从技术角度来看,这似乎很简单。但是,我发现实际的实现更加复杂。他们给出的示例(我以它为起点)使用了这种结构:

{
  "version": 8,
  "name": "My Awesome Style",
  "metadata": { },
  "sources": {
    "myvectorsource": {
      "url": "mapbox://{tileset_id}",
      "type": "vector"
    },
    "myrastersource": {
      "url": "mapbox://{tileset_id}",
      "type": "raster"
    }
  },
  "glyphs": "mapbox://fonts/{username}/{fontstack}/{range}.pbf",
  "layers": [ ]
}

足够简单。但这与我在 mapbox studio 编辑器中创建样式的操作不太相关。在 mapbox studio 中,我从这样的模板开始:

我从“基本”模板开始,然后在编辑器中添加我的自定义层之一:

这基本上就是我试图通过 mapbox api 以编程方式实现的目标。但是,我被困在两点上,这些是我的问题:

  1. “创建样式”的 api 端点没有“模板”选项。相反,它允许“源”和“层”。 “基本”模板如何与源和层相关联?换句话说,我需要以编程方式添加哪些源和层才能实现“基本模板”的结果?
  2. 如何将我的自定义图层添加到此“创建样式”请求中?我看到 layers 是一个数组。但是一系列什么?网址?身份证?还有什么?作为参考,我希望将以下自定义图层附加到我的新样式中:

基本上,我想知道我的有效负载需要是什么样子才能使用基本模板和一个额外的自定义层创建新样式。到目前为止,我已经尝试过:

{
    "version": 8,
    "name": "test style via api",
    "metadata": null,
    "sources": {
        "myrastersource": {
            "url": "mapbox://styles/mapbox/streets-v11",
            "type": "raster"
        }
    },
    "glyphs": null,
    "layers": []
}

之后我收到错误“Source url must be a valid Mapbox tileset url”

我已经试过了:

{
    "version": 8,
    "name": "test style via api",
    "metadata": null,
    "sources": {
        "myrastersource": {
            "url": "mapbox://styles/mapbox/streets-v11",
            "type": "raster"
        }
    },
    "glyphs": null,
    "layers": ["kenazthomas.c8ieto90"]
}

之后我收到错误 "layers[0]: 'type' or 'ref' is required"

我的有效载荷应该是什么样的?

【问题讨论】:

    标签: c# mapbox


    【解决方案1】:

    Mapbox 的 Maps API 的文档(您尝试调用的端点是其中的一部分)mentions this under the top-level Styles header

    您需要熟悉 Mapbox Style Specification 才能使用样式 API。 Mapbox 样式规范定义了地图样式的结构,是帮助 Studio 与 API 通信并生成与 Mapbox 库兼容的地图的开放标准。

    样式对象文档的相关部分是Layers页面,其中包含有关对象字段及其详细信息的详细信息,以及一个示例:

    "layers": [
      {
        "id": "water",
        "source": "mapbox-streets",
        "source-layer": "water",
        "type": "fill",
        "paint": {
          "fill-color": "#00ffff"
        }
      }
    ]
    

    您需要在sourcesource-layer 字段中引用您的自定义上传层,因此您可能还应该查看Sources object doc。假设您的自定义层是矢量图层,您可能会在 Layer 对象中使用 mapbox://<Tileset ID> 引用它。

    【讨论】:

    • 感谢@Rafael,这让我指出了正确的方向。我能够浏览文档的其他部分并填写缺失的部分。我什至通过 api 成功创建了一个新样式,并收到了创建它的确认。但是,当我查看该样式时,我看到它在我的帐户中列出,但是当我单击它时没有显示任何内容,并且我收到一个带有奇怪错误的弹出窗口。我可能会就此发布一个新问题。
    • 嗨@MattSpinks,很高兴这为您指明了正确的方向。看到此评论后,我也发布了对您其他问题的答案。另外,如果您原谅我的轻推,并且如果您发现我的回答很有用,您会考虑支持/接受它们吗? :)
    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2021-08-12
    相关资源
    最近更新 更多