Search POI Categories Near a Location¶
Search for POIs (Points of Interest) by categories around a specified location. Click on a category from the left side list to view the POIs highlighted on the map and the interactive results list on the right side of the map.
Overview¶
The map supports pan and zoom, and is fully 3D,
so holding down the shift key and panning will
simultaneously rotate and tilt the map.
If you want to jump right in, you can download the HTML file and the JavaScript file for this example in the same directory, and then load the HTML file in a web browser to try it out right now!
Or you can continue reading for a detailed explanation of the code.
How it works¶
1// Start by setting your token from https://developer.magiclane.com/api/projects 2if (gem.core.App.token === undefined) 3 gem.core.App.token = ""; 4 5var defaultAppScreen = gem.core.App.initAppScreen({ 6 container: 'map-canvas', 7 center: [48.207825, 16.371557, 5000], // latitude , longitude, altitude 8}); 9 10let poiListCallback = function (parentDiv, resultedLandmarkItem) { 11 parentDiv.className = 'card'; 12 parentDiv.style = 'width:100%'; 13 let whatToAdd = '<div class="card-body">' + 14 '<h5 class="card-title">' + resultedLandmarkItem.getName() + '</h5>' + 15 '<h6 class="card-subtitle mb-2 text-muted">' + resultedLandmarkItem.getAddress() + '</h6>' + 16 '<p class="card-text">' + resultedLandmarkItem.getDescription() + '</p>' + '</div>'; 17 parentDiv.innerHTML = whatToAdd; 18} 19 20var poiControl = new gem.control.POICategoryListControl({ 21 container: 'poi-category' 22}); 23let nearbyControl = new gem.control.SearchNearbyControl({ 24 categorylistcontrol: poiControl, 25 populateItemFunction: poiListCallback 26}); 27 28defaultAppScreen.addControl(nearbyControl); 29defaultAppScreen.addControl(poiControl);1<html> 2<meta charset="utf-8"> 3 4<head> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <title>Search Nearby Control - MagicLane Maps SDK for JavaScript</title> 7 <link rel="stylesheet" type="text/css" href="https://www.magiclane.com/sdk/js/gem.css"> 8 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" 9 integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> 10 <style> 11 .body { 12 width: 100%; 13 height: 100%; 14 } 15 16 ::-webkit-scrollbar { 17 width: 4px; 18 } 19 20 /* Track */ 21 ::-webkit-scrollbar-track { 22 box-shadow: inset 0 0 5px grey; 23 border-radius: 10px; 24 } 25 26 /* Handle */ 27 ::-webkit-scrollbar-thumb { 28 background: green; 29 border-radius: 10px; 30 } 31 32 /* Handle on hover */ 33 ::-webkit-scrollbar-thumb:hover { 34 background: #b30000; 35 } 36 37 .carousel-control-prev-icon, 38 .carousel-control-next-icon { 39 height: 100px; 40 width: 100px; 41 background-size: 100%, 100%; 42 background-image: none; 43 } 44 45 .carousel-control-next-icon:after { 46 content: '>'; 47 font-size: 55px; 48 color: green; 49 } 50 51 .carousel-control-prev-icon:after { 52 content: '<'; 53 font-size: 55px; 54 color: green; 55 } 56 57 .card:hover { 58 background-color:#ffed91; 59 } 60 61 .card.active { 62 background-color: gold; 63 } 64 65 #poi-category { 66 font-size: 14px; 67 } 68 </style> 69 <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" 70 integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"> 71 </script> 72 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" 73 integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"> 74 </script> 75 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" 76 integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"> 77 </script> 78</head> 79<div id="map-canvas" style="width: 100%; height: 100%; position: absolute; overflow: hidden;"> 80</div> 81<div id="poi-category" class="gem-markers-menu" 82 style="position: absolute; left: 0px; top: 10px; width: 10%; overflow: auto; height: 95%;"> 83</div> 84</div> 85<script type="text/javascript" src="https://www.magiclane.com/sdk/js/gemapi.js"></script> 86<script type="text/javascript" src="token.js"></script> 87<script type="text/javascript" src="searchNearbyControl.js"></script> 88 89</html>Themap-canvas
is the drawing area where the map is rendered. The canvas is configured to fill the browser window.Note that thediv
elements must be defined before loading the JavaScript source.The circular-loader is the rotating circle animation seen while loading.At the bottom, gemapi.js, the Maps SDK for JavaScript is loaded.Next, the JavaScript source of this example is loaded.
The example is 2 plain text files, one with the
HTML code (
.html
file extension) and the other with the
JavaScript code (.js
file extension).To run the example, the HTML file is loaded in a browser.
The
.js
file should be in the same directory, as it will be
loaded automatically.Source code for this example:
HTML and JavaScriptright-click on the links and select Save As.