使用自定义 Mapbox 样式的内部 GeoJSON 数据作为源

Using a custom Mapbox Style's internal GeoJSON data as a source

我目前正在尝试渲染地图,数据来自 shapefile(转换为 GeoJSON),上传到 Mapbox 的服务器后。

我的演示输出可以在以下位置查看: https://ciatph.github.io/amia-lowres-hover.html

我想问一下我是否像演示页面中那样有效地渲染了地图。到目前为止,我有:

  1. 上传了一个 GeoJSON 数据集
  2. 将数据集导出到 Tileset
  3. 将 Tileset 添加到 样式
  4. 使用样式加载初始底图
  5. 使用上传的 Dataset 作为另一个 Layer 的数据源(在初始地图之上)。该层监听并响应鼠标悬停和点击事件
  6. 使用上传的 Dataset 作为另一个 Layer 的数据源,并使用过滤器为步骤中创建的图层的悬停区域着色不同#5.

Screenshot of relevant Mapbox script

我对这种方法的问题是:

我希望你能帮助我解决我的疑问,并启发我更畅销和更有效的方法。谢谢。

让我们先弄清楚你目前的情况:

  • 您的 style 包含 ID 为 ciatph.cj64in9zo1ksx32mr7ke3g7vb-93srz 的矢量切片集,在 composite 矢量切片源中以您的样式称为 amia-lowres-tileset
  • 也可以通过 ID ciatph/cj64in9zo1ksx32mr7ke3g7vb 作为数据集访问,因为您将其作为数据集上传。
  • 您的脚本正在运行时加载数据集。

我看不出有任何理由需要引用数据集而不是图块集。因此,删除添加数据集的代码,并将两种样式更新为引用图块集 (source: "composite")。

    // Only used for coloring hover effect. Data informatiion be retrieved from styles alone
    /*      
    map.addSource("dataSource", {
        "type": "geojson",
        'data': 'https://api.mapbox.com/datasets/v1/ciatph/cj64in9zo1ksx32mr7ke3g7vb/features?access_token=pk.eyJ1IjoiY2lhdHBoIiwiYSI6ImNqNXcyeTNhcTA5MzEycHFpdG90enFxMG8ifQ.gwZ6uo6pvx4-RZ1lHODcBQ'
    });    
    */

    // add layer to color the raw source data
    map.addLayer({
        'id': 'municipalities',
        "type": "fill",
        "source": "composite",
        "source-layer": "amia-lowres-tileset",
        "layout": {},
        "paint": {
            "fill-color": "#627BC1",
            "fill-opacity": 0.5
        }
    });

    // add a conditional layer to play over the source data on hover event
    map.addLayer({
        "id": "state-fills-hover",
        "type": "fill",
        "source": "composite",
        "source-layer": "amia-lowres-tileset",
        "layout": {},
        "paint": {
            "fill-color": "#ff4",
            "fill-opacity": 1
         },
         "filter": ["==", "MUNI_CITY", ""]
    });        

https://codepen.io/stevebennett/pen/OjvMWO