Как правильно выбирать и стилизовать маркеры на Mapbox GL JS?

Я работаю с картой Mapbox, на которой есть точки. Хотелось бы узнать, как правильно добавлять маркер-символ. Вот мой GeoJSON:

  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          -89.12312324,
          13.686886
        ]
      },
      "properties": {
        "title": "Random Location",
        "description": "Individual"
      }
    }
]

Вот пример из документации Mapbox:

map.addLayer({
        "id": "airport",
        "source": "airports",
        "source-layer": "ne_10m_airports",
        "type": "symbol",
        "layout": {
            "icon-image": "airport-15",
            "icon-padding": 0
        },
        "filter": ["in", "abbrev", ""]
    });

Когда я использую это

"layout": {
                "icon-image": "marker-11",
                "icon-allow-overlap": true,
            }

Вместо классического маркера получаются маленькие коричневые точки. Я использую

<script src='https://api.mapbox.com/mapbox-gl-js/v0.18.0/mapbox-gl.js'></script>
<link href='https://api.mapbox.com/mapbox-gl-js/v0.18.0/mapbox-gl.css' rel='stylesheet' />

и я использую

style: 'mapbox://styles/mapbox/outdoors-v9', //stylesheet location

Весь мой сценарий выглядит так:

mapboxgl.accessToken = 'pk.mylongAkey';

    var map = new mapboxgl.Map({
        container: 'map', // container id
        style: 'mapbox://styles/mapbox/outdoors-v9', //stylesheet location
        center: [-88.866245, 13.770391], // starting position
        zoom: 6 // starting zoom
    });

    var url = '/maps/index.json';
        var source = new mapboxgl.GeoJSONSource({
        data: url
    });

    map.on('load', function () {
        map.addSource('location', source);
        map.addLayer({
            "id": "map",
            "type": "symbol",
            "source": "location",
            "source-layer": 'location',
            "layout": {
                "icon-image": "marker-11",
                "icon-allow-overlap": true,
            }
        });
    });

    map.on('click', function (e) {
        var features = map.queryRenderedFeatures(e.point, { layers: ['map'] });

        if (!features.length) {
            return;
        }

        var feature = features[0];

        // Populate the popup and set its coordinates
        // based on the feature found.
        var popup = new mapboxgl.Popup()
            .setLngLat(feature.geometry.coordinates)
            .setHTML(feature.properties.title)
        .addTo(map);
    });

    // Use the same approach as above to indicate that the symbols are clickable
    // by changing the cursor style to 'pointer'.
    map.on('mousemove', function (e) {
        var features = map.queryRenderedFeatures(e.point, { layers: ['map'] });
        map.getCanvas().style.cursor = (features.length) ? 'pointer' : '';
    });

Я что-то упускаю? Кроме того, всплывающие окна не появляются над точками, они появляются поверх значка. Вы не можете сказать с помощью этой маленькой коричневой точки, но, например, с ракетой всплывающее окно находится в середине ракеты. Спасибо!

Вот скриншот

введите описание изображения здесь


person don_Bigote    schedule 29.05.2016    source источник
comment
Есть ли на вашем index.json 'marker-11'? чтобы отобразить всплывающее окно над точками, используйте привязку. например: новый mapboxgl.Popup ({привязка: вверху-слева}) .setLngLat (координаты) .setHTML (html) .addTo (карта);   -  person So4ne    schedule 30.05.2016
comment
Нет, простой стиль не поддерживается в GL JS. Ознакомьтесь с этой статьей, если вам нравится стиль mapbox с управлением данными mapbox.com/blog/data-driven-styling/   -  person don_Bigote    schedule 02.06.2016
comment
спасибо за якорь: вверху слева Мне это нравится, и я понятия не имел, что это вообще существует.   -  person don_Bigote    schedule 02.06.2016


Ответы (2)


Я работаю с картой Mapbox, на которой есть точки. Хотелось бы узнать, как правильно добавлять маркер-символ. Лучше сделать это в GeoJSON, например:

...

Или лучше использовать такую ​​раскладку:

...

Информация о стиле встраивания в GeoJSON (первый) - это спецификация, называемая простой стиль, которая не поддерживается в GL JS. Использование макета (последнего) - единственный способ стилизовать функции в GL JS.


Вместо классического маркера получаются маленькие коричневые точки.

Не могли бы вы предоставить снимок экрана?

person Lucas Wojciechowski    schedule 31.05.2016
comment
Я добавил скриншот выше. Спасибо! - person don_Bigote; 02.06.2016

В редакторе Mapbox Studio необходимо убедиться, что в вашей библиотеке значков действительно есть значок с названием "marker-11". В противном случае он не знает, на что вы ссылаетесь, и по умолчанию будет использовать точку.

В остальном все остальное выглядит нормально.

person J.Keefe    schedule 08.06.2016