const DemoApp = angular.module('DemoApp', ['dx']);
DemoApp.controller('DemoController', ($scope) => {
$scope.vectorMapOptions = {
maxZoomFactor: 4,
projection: {
to(coordinates) {
return [coordinates[0] / 100, coordinates[1] / 100];
},
from(coordinates) {
return [coordinates[0] * 100, coordinates[1] * 100];
},
},
layers: [{
hoverEnabled: false,
dataSource: buildingData,
name: 'building',
}, {
color: 'transparent',
borderWidth: 1,
label: {
enabled: true,
dataField: 'name',
},
dataSource: roomsData,
name: 'rooms',
}],
tooltip: {
enabled: true,
customizeTooltip(arg) {
if (arg.layer.name === 'rooms') {
return { text: `Square: ${arg.attribute('square')} ft²` };
}
return null;
},
},
};
});
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>DevExtreme Demo</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>window.jQuery || document.write(decodeURIComponent('%3Cscript src="js/jquery.min.js"%3E%3C/script%3E'))</script>
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/22.2.6/css/dx.light.css" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
<script>window.angular || document.write(decodeURIComponent('%3Cscript src="js/angular.min.js"%3E%3C/script%3E'))</script>
<script src="https://cdn3.devexpress.com/jslib/22.2.6/js/dx.all.js"></script>
<script src="data.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css" />
<script src="index.js"></script>
</head>
<body class="dx-viewport">
<div class="demo-container" ng-app="DemoApp" ng-controller="DemoController">
<div id="vector-map" dx-vector-map="vectorMapOptions"></div>
</div>
</body>
</html>
#vector-map {
height: 400px;
}
const buildingData = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Polygon',
coordinates: [[
[10, -80],
[-80, -80],
[-80, 80],
[40, 80],
[40, -20],
[100, -20],
[100, -80],
[30, -80],
[30, -74],
[34, -74],
[34, -68],
[40, -68],
[40, -74],
[94, -74],
[94, -26],
[40, -26],
[40, -60],
[34, -60],
[34, 74],
[-74, 74],
[-74, 30],
[10, 30],
[10, 24],
[-74, 24],
[-74, -24],
[10, -24],
[10, -30],
[-74, -30],
[-74, -74],
[10, -74],
]],
},
},
],
};
const roomsData = {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
properties: {
name: 'Room 1',
square: 576,
},
geometry: {
type: 'Polygon',
coordinates: [[
[-74, -30],
[34, -30],
[34, -74],
[-74, -74],
]],
},
}, {
type: 'Feature',
properties: {
name: 'Room 2',
square: 600,
},
geometry: {
type: 'Polygon',
coordinates: [[
[-74, 24],
[34, 24],
[34, -24],
[-74, -24],
]],
},
}, {
type: 'Feature',
properties: {
name: 'Room 3',
square: 540,
},
geometry: {
type: 'Polygon',
coordinates: [[
[-74, 74],
[34, 74],
[34, 30],
[-74, 30],
]],
},
}, {
type: 'Feature',
properties: {
name: 'Room 4',
square: 288,
},
geometry: {
type: 'Polygon',
coordinates: [[
[40, -26],
[94, -26],
[94, -74],
[40, -74],
]],
},
},
],
};