javascriptmapshere-apiinfobubble

Add Info Bubbles to Here Maps


how to add Info Bubbles to HERE maps. I follow the steps on the HERE api page, but the info bubble doesn't popup.

According to the Here api, here is the way to add popup. https://developer.here.com/documentation/maps/topics/map-controls.html

var bubble = new H.ui.InfoBubble({ lng: 13.4, lat: 52.51 }, {
        content: '<b>Hello World!</b>'
       });

// Add info bubble to the UI:
ui.addBubble(bubble);

I follow the code and the map loads correctly with the right coordinates, but I don't see any info bubble on the map.

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, 
      width=device-width" />
<link rel="stylesheet" type="text/css" href="https://js.api.here.com/v3/3.0/mapsjs-ui.css?dp-version=1533195059" />
<script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-core.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-service.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-ui.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-mapevents.js"></script>
<script src="http://js.api.here.com/v3/3.0/mapsjs-core.js"  type="text/javascript" charset="utf-8"></script>
<script src="http://js.api.here.com/v3/3.0/mapsjs-service.js" type="text/javascript" charset="utf-8"></script>
<script src="http://js.api.here.com/v3/3.0/mapsjs-ui.js" type="text/javascript" charset="utf-8"></script>
<link rel="stylesheet" type="text/css" href="http://js.api.here.com/v3/3.0/mapsjs-ui.css" />
  </head>
<body>
  <div id="map" style="width: 100%; height: 400px; background: grey" />
<script type="text/javascript" charset="utf-8">
  //Initialize the Platform object:
    var platform = new H.service.Platform({
    'app_id': '{YOUR_APP_ID} ',
    'app_code': '{YOUR_APP_CODE} '
      useHTTPS: true
    });
    var pixelRatio = window.devicePixelRatio || 1;
    var defaultLayers = platform.createDefaultLayers({
      tileSize: pixelRatio === 1 ? 256 : 512,
      ppi: pixelRatio === 1 ? undefined : 320
    });

    //Step 2: initialize a map  - not specificing a location will give a whole world view.
    var map = new H.Map(document.getElementById('map'),
      defaultLayers.normal.map, {pixelRatio: pixelRatio});

    //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));

  // Get the default map types from the Platform object:

        map.setCenter({lng: 13.4, lat: 52.51});
    map.setZoom(10);
  // Instantiate the map:


  // Create the default UI:
  var ui = H.ui.UI.createDefault(map, defaultLayers, 'de-DE');
  var mapSettings = ui.getControl('mapsettings');
var zoom = ui.getControl('zoom');
var scalebar = ui.getControl('scalebar');
var panorama = ui.getControl('panorama');

panorama.setAlignment('top-left');
mapSettings.setAlignment('top-left');
zoom.setAlignment('top-left');
scalebar.setAlignment('top-left');
var bubble = new H.ui.InfoBubble({ lng: 13.4, lat: 52.51 }, {
        content: '<b>Hello World!</b>'
       });

// Add info bubble to the UI:
ui.addBubble(bubble);
</script>


</body>
</html>

Solution

  • I'm Richard and I'm a developer evangelist for HERE.

    Your code breaks in this line:

    panorama.setAlignment('top-left');
    

    This line indicates that you want to move the StreetLevel UI element to the top-left of the map. However this element does not exist, as you've forgotten to import the mapsjs-pano.js library. This library is required for StreetLevel functionality. Add the following line to your and your code should work.

    <script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-pano.js"></script>
    

    Also note that you are missing a comma after setting your app_code and that your importing some libraries twice. You may have to fix these issues as well for your code to work. Here is a cleaned up version of your code that does what you want to do.

    <!DOCTYPE html>
    <html>
        <head>
            <meta name="viewport" content="initial-scale=1.0, width=device-width" />
            <link rel="stylesheet" type="text/css" href="https://js.api.here.com/v3/3.0/mapsjs-ui.css" />
            <script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-core.js"></script>
            <script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-service.js"></script>
            <script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-ui.js"></script>
            <script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-mapevents.js"></script>
            <script type="text/javascript" src="https://js.api.here.com/v3/3.0/mapsjs-pano.js"></script>
        </head>
        <body>
            <div id="map" style="width: 100%; height: 400px; background: grey" />
            <script  type="text/javascript" charset="UTF-8" >
    
                function createInfoBubble(map) {
                    // Create info bubble
                    var bubble = new H.ui.InfoBubble({ lng: 13.4, lat: 52.51 }, {
                        content: '<b>Hello World!</b>'
                    });
                    // Add info bubble to the UI:
                    ui.addBubble(bubble);
                }
    
                // Step 1: initialize the platform
                var platform = new H.service.Platform({
                    app_id: '{YOUR_APP_ID}',
                    app_code: '{YOUR_APP_CODE}',
                    useHTTPS: true
                });
    
                var pixelRatio = window.devicePixelRatio || 1;
                var defaultLayers = platform.createDefaultLayers({
                    tileSize: pixelRatio === 1 ? 256 : 512,
                    ppi: pixelRatio === 1 ? undefined : 320
                });
    
                // Step 2: initialize a map
                var map = new H.Map(document.getElementById('map'),
                    defaultLayers.normal.map, {pixelRatio: pixelRatio});
    
                // Step 3: make the map interactive            
                var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
    
                // Step 4: create the default UI components
                var ui = H.ui.UI.createDefault(map, defaultLayers);
    
                // Move UI elements to the top left of the map
                var mapSettings = ui.getControl('mapsettings');
                var zoom = ui.getControl('zoom');
                var scalebar = ui.getControl('scalebar');
                var panorama = ui.getControl('panorama');
    
                panorama.setAlignment('top-right');
                mapSettings.setAlignment('top-left');
                zoom.setAlignment('top-left');
                scalebar.setAlignment('top-left');
    
                // Move map to Berlin
                map.setCenter({lat:52.5159, lng:13.3777});
                map.setZoom(14);
    
                createInfoBubble(map);
            </script>
        </body>
    </html>