【问题标题】:MapBoxGL add GeoJSON circular markers with custom colorMapBoxGL 添加具有自定义颜色的 GeoJSON 圆形标记
【发布时间】:2016-03-22 17:50:07
【问题描述】:

我需要使用通过 AJAX 获得的 GeoJSON 数据向 mapboxgl 地图添加标记。我以这种方式添加 GeoJSON 层:

    geoJSONSource = new mapboxgl.GeoJSONSource({
        data: geodata
    });

    map.addSource('markers', geoJSONSource);
    map.addLayer({
        "id": "markers",
        "interactive": true,
        "type": "symbol",
        "source": "markers",
        "layout": {
            "icon-image": "{marker-symbol}-15", // stuff in {} gets replaced by the corresponding value
            "icon-allow-overlap": true,
            "icon-size": 1 // size of the icon
        }
    });

在 GeoJSON 数据本身中,在将 GeoJSON 添加到地图之前,我将每个特征设置为在循环中将属性“marker-symbol”设置为“rocket”。但是,我需要的是每个点的小圆形图像,而不是火箭。我想根据 GeoJSON 中包含的数据将这些点设置为三种颜色之一的小圆形图像。我计划在将 GeoJSON 添加到地图之前循环选择 svg 图像。

如何添加自定义图标图像?似乎即使我为 icon-image 字段输入乱码,来自 Mapbox 预制标记符号的火箭图像也会被加载。否则,如何添加自定义标记符号?

我使用的是streets-v8 mapbox 风格;我尝试根据此链接制作自己的样式来访问标记的自定义图像:

https://www.mapbox.com/help/custom-markers/#use-images-in-mapbox-gl-js

但我想不通。

【问题讨论】:

    标签: image add mapbox geojson marker


    【解决方案1】:

    标记图标根据样式中设置的current sprite sheet 加载。

    要加载自定义图标图像,您需要在 style.json 中指定自定义精灵 json 文件。以下是对应的github讨论及详细信息:https://github.com/mapbox/mapbox-gl-js/issues/822

    以下是使用自定义精灵的示例:http://codepen.io/znak/pen/PqOEyV

    地图使用在名为customstyle.json 的文件中定义的自定义样式:

    var map = new mapboxgl.Map({
        container: 'map',
        center: center,
        zoom: 8,
        style: 'http://www.lenart.pl/assets/codepen/customstyle.json'
    });
    

    其中customstyle.json 指的是customsprite.json

    "sprite": "http://www.lenart.pl/assets/codepen/customsprite",
    

    customsprite.json 指定如何裁剪位于此处的相应 PNG spritesheet:

    http://www.lenart.pl/assets/codepen/customsprite.png
    

    您还可以使用此实用程序:https://github.com/mapbox/spritezero-cli 从一个充满 SVG 文件的目录中生成 sprite json 和相应的 png spritesheet。

    【讨论】:

    • 有没有办法编辑使用 mapbox studio 制作的样式的 style.json?我想要一个用于创建地图的预构建模板,只需添加一个图标精灵以与标记一起使用。我想另一个问题是:如果我使用您提到的自定义 json 样式文件,我是否仍然能够轻松地将基本的 mapbox 地图作为基础(带有道路、边界等),我可以添加我的自定义精灵标记?或者如果我采用 customstyle.json 方式,我必须提供所有东西来绘制基本地图吗?
    • 没试过,但你应该可以复制现有的地图框样式并更改精灵引用。由于 style.json 引用了相同的矢量数据源,它应该可以工作。如果您使用 Mapbox Studio,您可以直接上传您的 svg,它会为您创建一个电子表格:mapbox.com/help/define-sprite
    • 我下载了我在 mapbox 中制作的样式的 style.json。然后,我使用您链接的工具创建了我的 svg 文件的 sprite.json 和 sprite.png,并将 style.json 中的 sprite 变量更改为指向我使用该工具创建的 sprite.json。效果很好,感谢您的详细回答。
    • 太棒了!很高兴听到我的回答很有用!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2016-06-19
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多