Использование данных Mapbox JSON для выделения функций - PullRequest
0 голосов
/ 29 апреля 2018

Добрый день,

Я использую следующий пример (https://www.mapbox.com/mapbox-gl-js/example/query-similar-features/).

Я внимательно прочитал форум, но не нашел ничего похожего. Мои данные отображаются правильно. Однако всплывающая функция все еще не работает.

Вот моя последняя скрипка (https://jsfiddle.net/wbmv24a0/3/).

`<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8' />
    <title>Highlight features containing similar data</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.tiles.mapbox.com/mapbox-gl-js/v0.44.1/mapbox-gl.js'></script>
    <link href='https://api.tiles.mapbox.com/mapbox-gl-js/v0.44.1/mapbox-gl.css' rel='stylesheet' />
    <style>
        body { margin:0; padding:0; }
        #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>
</head>
<body>

<style>
.map-overlay {
    font: 12px/20px 'Helvetica Neue', Arial, Helvetica, sans-serif;
    background-color: #fff;
    box-shadow: 0 1px 2px rgba(0,0,0,0.10);
    border-radius: 3px;
    position: absolute;
    width: 25%;
    top: 10px;
    left: 10px;
    padding: 10px;
    display: none;
}
</style>

<div id='map'></div>
<div id='map-overlay' class='map-overlay'></div>

<script>
mapboxgl.accessToken = 'pk.eyJ1IjoidGhlbWF0aXgiLCJhIjoiY2pnZG9iY2U3MzJxYjMybGhmMDUxZ3Z1NCJ9.WLqfBodKltXx-wx6_3Tw4w';
var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v9',
    center: [-70, 53],
    minZoom: 2,
    zoom: 4
});

var overlay = document.getElementById('map-overlay');

// Create a popup, but don't add it to the map yet.
var popup = new mapboxgl.Popup({
    closeButton: false
});

map.on('load', function() {
    // Add the source to query. In this example we're using
    // ecoregion polygons uploaded as vector tiles
    map.addSource('reg_eco', {
        "type": "vector",
        "url": "mapbox://thematix.6pzptrfa"
    });

    map.addLayer({
        "id": "regeco",
        "type": "fill",
        "source": "reg_eco",
        "source-layer": "reg_eco-5jav3d",
        "paint": {
            "fill-outline-color": "rgba(0,0,0,0.1)",
            "fill-color": "rgba(0,0,0,0.1)"
        }
    }, 'place-city-sm'); // Place polygon under these labels.

    map.addLayer({
        "id": "regecoh",
        "type": "fill",
        "source": "reg_eco",
        "source-layer": "reg_eco-5jav3d",
        "paint": {
            "fill-outline-color": "#484896",
            "fill-color": "#6e599f",
            "fill-opacity": 0.75
        },
        "filter": ["in", "REG_ECO", ""]
    }, 'place-city-sm'); // Place polygon under these labels.

    map.on('mousemove', 'reg_eco', function(e) {
        // Change the cursor style as a UI indicator.
        map.getCanvas().style.cursor = 'pointer';

        // Single out the first found feature.
        var feature = e.features[0];

        // Query the ecoregion layer visible in the map. Use the filter
        // param to only collect results that share the same ecoregion name.
        var relatedFeatures = map.querySourceFeatures('reg_eco', {
            sourceLayer: 'reg_eco-5jav3d',
            filter: ['in', 'REG_ECO', feature.properties.REG_ECO]
        });

        // Render found features in an overlay.
        overlay.innerHTML = '';

        // Add features that share the same ecoregion name to the highlighted layer.
        map.setFilter('regecoh', ['in', 'REG_ECO', feature.properties.REG_ECO]);

        // Display a popup with the name of the ecoregion
        popup.setLngLat(e.lngLat)
            .setText(feature.properties.REG_ECO)
            .addTo(map);
    });

    map.on('mouseleave', 'reg_eco', function() {
        map.getCanvas().style.cursor = '';
        popup.remove();
        map.setFilter('regecoh', ['in', 'REG_ECO', '']);
        overlay.style.display = 'none';
    });
});
</script>

</body>
</html>`

Я не могу понять, почему это не работает.

Спасибо всем заранее.

Pierre-Y. Plourde

...