是否有可能使用d3.js和传单的白色底图?

时间:2017-06-20 13:29:25

标签: d3.js maps leaflet

我正在使用d3和传单在世界地图上显示数据。我希望基本地图图层为白色,如下面链接中的那个。

https://resistancemap.cddep.org/AntibioticUse.php

CartoDB不支持白色基础层。我正在使用的是正电子。是否有某种方法可以使d3和传单使灰色区域变白?

enter image description here

这是添加图层的代码..

var positron = L.tileLayer('http://{s}.basemaps.cartocdn.com/light_nolabels/{z}/{x}/{y}.png', {
    attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, &copy; <a href="http://cartodb.com/attributions">CartoDB</a>'
});

var map1 = L.map('map1', {
    center: [19.711510, -4.935242],
    zoom: 2,
    layers: [positron]
});

var baseLayers = {
    "Grayscale (CartoDB)": positron
};

var d3Layer = L.Class.extend({
    initialize: function() {
        return;
    },
    onAdd: function() {
        d3.select("div#map1 .legend").style("display", "block");
        d3.select("div#map1 .regions").style("display", "block");
    },
    onRemove: function() {
        d3.select("div#map1 .regions").style("display", "none");
        d3.select("div#map1 .legend").style("display", "none");
    },
});

var svgLayer = new d3Layer();

var overlays = {
    "GeoJSON Regions": svgLayer
};
L.control.layers(baseLayers, overlays).addTo(map1);

谢谢!

2 个答案:

答案 0 :(得分:1)

只是不要向地图添加任何L.TileLayer,并使用CSS设置其背景。

答案 1 :(得分:0)

如果您愿意尝试,可以使用mapbox-gl.js库,它允许使用个性化矢量切片作为底图,因此您可以自定义底图的任何元素。 Here您可以找到一些指南。然后,就像将属性传递给地图定义一样简单:

//Mapbox API Token
mapboxgl.accessToken = '{API TOKEN}'

//Setup mapbox-gl map
var map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/{USERNAME}/{STYLE_ID}', //Copied from Mapbox Studio
    center: [Lng, Lat],
    zoom: 4,  
})

另外,您可以使用D3.js处理数据层,如example所示,您只需在将数据加载到update()projectPoint(lon, lat)函数后加入SVG元素。

我最近设法配置了矢量图块,它很棒,它们在平移/缩放/旋转时运行得如此顺畅。