Skip to main content

Step 3. Add mobile vehicles

Prerequisites​

Authorization

You need to have an authorization code first. To obtain the authorization code, please refer to Authorization Application.

Resource acquisition​

Attention

The pictures, models, third-party libraries, source code and other resources involved in the scene can be obtained by click to download.

Steps​

1. Create CarApi.js file​

  • Create a new CarApi.js file in the api folder.

2. Add mobile vehicles​

  • In the CarApi.js file, add the moving vehicle code.

  • The main implementation idea is: first pre-prepare the movement route, and then match the models of different vehicles to make them move along the route.

    // This class is mainly used for vehicle animation
    class CarApi {
    constructor(map) {
    this._map = map;
    }

    initCar() {
    // Define vehicle driving path and animation duration data
    let carPaths = [
    {
    duration: 30000,
    coord: [
    [120.73298001334099, 31.287590355901955, 7.067983162869322],
    [120.73085428179544, 31.287592792848983, 7.0679829437293495],
    [120.72971212935782, 31.28758512524997, 7.067983633230293],
    [120.72890788261878, 31.28758946244285, 7.067983243212716],
    [120.7283663988581, 31.28760327386899, 7.0679820012342764],
    [120.72834815296547, 31.28782738454053, 7.0679618482571005],
    [120.728348563117, 31.28840236435959, 7.067910143187581],
    [120.72835201823979, 31.289045220115707, 7.0678523335926435],
    [120.72835265516758, 31.289209016908583, 7.067837603832728],
    [120.72880615082413, 31.289210420967702, 7.067837477569624],
    [120.72933061455416, 31.289183750889126, 7.0678398759344505],
    [120.73313241566966, 31.288999315639824, 7.067856461636449],
    ],
    },
    {
    duration: 30000,
    coord: [
    [120.72580406892274, 31.287413307358513, 7.06799908374595],
    [120.72777667112805, 31.287408709639475, 7.067999497189458],
    [120.7288786165383, 31.287407894317642, 7.0679995705061724],
    [120.73022410851547, 31.2874040578806, 7.06799991549241],
    [120.7321998181452, 31.287408173146385, 7.06799954543285],
    [120.73386789470727, 31.28740523173713, 7.067999809935006],
    [120.73463063008647, 31.287399692031354, 7.068000308085265],
    [120.73547239297935, 31.28740558706819, 7.067999777982395],
    ],
    },
    //... Reference source code is complete, and custom paths can also be added.
    ];

    //Array of vehicle model names to be added
    let models = [ 'SM_Bus_01', 'SM_Taxi', 'SM_Tesla', 'SM_Tesla', 'SM_Bus_01', 'SM_Ford_Fiesta', 'SM_Car', 'SM_Tesla', 'SM_Taxi'];

    for (let i = 0; i < carPaths.length; i++) {

    //Set model resources
    let model = [
    {
    type: 'glb',
    url: './assets/models/cars/' + models[i] + '.mm', // Set model path
    // Because the model we provide is encrypted, you need to set this parameter. If you are loading your own model, you do not need to set it.
    decryptWasm:'https://delivery.mapmost.com/cdn/b3dm_codec/0.0.2-alpha/sdk_b3dm_codec_wasm_bg_opt.wasm',
    },
    ];

    // Generate random id
    let uuid = this._getuuid();
    let option = {
    id: uuid,
    type: 'model', // Set layer type
    models: model, // Set model resources
    center: [120.73062035254365, 31.288398677612456, 0.9999941344157874], // Set the model center point
    callback: function (group, layer) { // Model callback function

    //Adjust the rotation angle of the specified model to ensure that all vehicles are traveling in the correct direction
    if (i == 7) {
    group.setRotation({ x: 100, y: 100, z: 100 });
    }

    // Vehicle movement animation
    group.followPath(
    {
    path: carPaths[i].coord, // vehicle movement path
    duration: carPaths[i].duration // Duration of vehicle movement animation
    }
    );
    },
    };

    //Add the model to the map
    this._map.addLayer(option);
    }
    }

    // Randomly generate id
    _getuuid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(
    /[xy]/g,
    function (c) {
    var r = (Math.random() * 16) | 0,
    v = c == 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
    }
    );
    }
    }

    // Export the CarApi class so that it can be used in other modules
    export default CarApi;

    -Introduce the CarApi class into the Map.vue file

    import CarApi from '../api/CarApi';

3. Call the moving vehicle method​

  • Called in the callback function of the added campus model.

    let options = {
    id: 'model_id',
    models: models_obj,
    outline: true,
    type: 'model',
    center: [120.73014920373011, 31.287414975761724, 0.1],
    callback: function (group, layer) { // Model callback function
    modelLayer = layer;

    //Call the moving vehicle method
    let car = new CarApi(map);
    car.initCar();

    //Place the car every 10 seconds, 5 times
    let count = 0;
    setInterval(function () {
    if (count < 5) {
    car.initCar();
    count++;
    }
    }, 10000);
    },
    };
    notes

    For more information about model animation, please visit Object3D Method in Add Model. For related examples, please refer to Model Animation.

4. Check the effect​

  • Run and check the effect. At this time, the effect of moving vehicles can be seen in the scene.

    npm run dev
    show