-1

Wanted to show a search box in HERE Maps only after the maps view is loaded completely.Is there a variable or event to detect when the map is loaded .

aiswarya
  • 1
  • 1

1 Answers1

0

You can achieve it by event

mapviewchangeend

Event fired when changes to the current map view are ending.: https://developer.here.com/documentation/maps/3.1.30.3/api_reference/H.Map.html#event:mapviewchangeend

Just wrap the event 'mapviewchangeend' definition in window.onload like:

/**
 * Moves the map to display over Berlin
 *
 * @param  {H.Map} map      A HERE Map instance within the application
 */
function moveMapToBerlin(map){
  map.setCenter({lat:52.5159, lng:13.3777});
  map.setZoom(14);
}

/**
 * Boilerplate map initialization code starts below:
 */

//Step 1: initialize communication with the platform
// In your own code, replace variable window.apikey with your own apikey
var platform = new H.service.Platform({
  apikey: window.apikey
});
var defaultLayers = platform.createDefaultLayers();

//Step 2: initialize a map - this map is centered over Europe
var map = new H.Map(document.getElementById('map'),
  defaultLayers.vector.normal.map,{
  center: {lat:50, lng:5},
  zoom: 4,
  pixelRatio: window.devicePixelRatio || 1
});
// add a resize listener to make sure that the map occupies the whole container
window.addEventListener('resize', () => map.getViewPort().resize());

//Step 3: make the map interactive
// MapEvents enables the event system
// Behavior implements default interactions for pan/zoom (also on mobile touch environments)
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));

// Create the default UI components
var ui = H.ui.UI.createDefault(map, defaultLayers);

const mapReady = (e) => {
    map.removeEventListener("mapviewchangeend", mapReady);
    alert("map ready!");
}

// Now use the map as required...
window.onload = function () {
  map.addEventListener("mapviewchangeend", mapReady);
  moveMapToBerlin(map);
}

Run this code: https://jsfiddle.net/yvj04Lb6/

By event 'mapviewchangeend' maps view is loaded completely. But you can notice that WEBGL rendering is not finished yet - JS API doesn't have an event such 'renderingend'.

Another example raster map tiles - https://jsfiddle.net/ad5f2xuz/ - there rendering is finished faster.