Raster base map with vector layers

by Nikolay Petrov

HTML

<link rel="stylesheet" href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.53.1/mapbox-gl.css">
<script src="https://api.tiles.mapbox.com/mapbox-gl-js/v0.54.0-beta.1/mapbox-gl.js"></script>
<style>
  body {
    margin: 0;
    padding: 0;
  }

  #map {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 100%;
  }

</style>
<div id="map"></div>

JavaScript

mapboxgl.accessToken = 'pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4M29iazA2Z2gycXA4N2pmbDZmangifQ.-g_vE53SD2WrJ6tFX7QHmA';

const style = {
  version: 8,
  center: [139.774, 35.683],
  zoom: 17,
  sources: {
  	'raster-tiles': {
			type: 'raster',
      tiles: [`https://api.mapbox.com/v4/yahoojapan.cjw2r3d4j0bda1co4r5fy4x6d/{z}/{x}/{y}@2x.jpg90?access_token=${mapboxgl.accessToken}`],
			tileSize: 256
		},
    composite: {
      url: 'mapbox://mapbox.mapbox-streets-v8',
      type: 'vector'
    }
  },
  sprite: 'mapbox://sprites/yahoojapan/cjw2r3d4j0bda1co4r5fy4x6d?version=2019-07-21',
  glyphs: 'mapbox://fonts/yahoojapan/{fontstack}/{range}.pbf',
  layers: [{
		id: 'raster-underlay',
		type: "raster",
		source: "raster-tiles",
		minzoom: 0,
		maxzoom: 22
  }, {
    id: 'building-number-label',
    type: 'symbol',
    source: 'composite',
    'source-layer': 'housenum_label',
    layout: {
      'icon-image': 'fill-green',
      'icon-text-fit': 'both',
      'text-field': ['get', 'house_num']
    },
    paint: {
      'text-color': 'white'
    }
  }]
};

new mapboxgl.Map({
  container: 'map',
  style
});