Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
146 lines (128 sloc) 5.96 KB
<!DOCTYPE html>
<html>
<head>
<
<title>Polygon labels - calculated - Azure Maps Web SDK Samples</title>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="IE=Edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="This sample shows how to create labels for polygons by calculating a coordinates and creating a point feature for the label." />
<meta name="keywords" content="map, gis, API, SDK, template, fill pattern, polygonlayer" />
<meta name="author" content="Microsoft Azure Maps" />
<!-- Add references to the Azure Maps Map control JavaScript and CSS files. -->
<link rel="stylesheet" href="https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.css" type="text/css" />
<script src="https://atlas.microsoft.com/sdk/javascript/mapcontrol/2/atlas.min.js"></script>
<script type='text/javascript'>
var map;
var data = [
{
"type": "Feature",
"properties": {
"label": "Polygon 1"
},
"geometry": {
"type": "Polygon",
"coordinates": [[[-102.54364, 42.50045], [-102.14263, 42.49235], [-102.27722, 42.66830], [-102.54364, 42.50045]]
]
}
},
{
"type": "Feature",
"properties": {
"label": "Polygon 2"
},
"geometry": {
"type": "Polygon",
"coordinates": [[[-100.89294, 42.73490], [-100.91766, 42.46601], [-100.40954, 42.47412], [-100.39581, 42.56521], [-100.72814, 42.57533], [-100.71990, 42.73692], [-100.89294, 42.73490]]
]
}
},
{
"type": "Feature",
"properties": {
"label": "Polygon 3"
},
"geometry": {
"type": "Polygon",
"coordinates": [[[-101.00555, 41.72828], [-100.92041, 41.61954], [-100.24749, 41.96561], [-100.39306, 42.10637], [-101.00555, 41.72828]]
]
}
},
{
"type": "Feature",
"properties": {
"label": "Polygon 4"
},
"geometry": {
"type": "Polygon",
"coordinates": [[[-102.69744, 41.70777], [-102.10144, 41.70777], [-102.10144, 41.95540], [-102.69744, 41.95540], [-102.69744, 41.70777]]
]
}
}
];
function GetMap() {
//Initialize a map instance.
map = new atlas.Map('myMap', {
center: [-101.4285, 42.1695],
zoom: 8,
view: 'Auto',
//Add your Azure Maps subscription key to the map SDK. Get an Azure Maps key at https://azure.com/maps
authOptions: {
authType: 'subscriptionKey',
subscriptionKey: '<Your Azure Maps Key>'
}
});
//Wait until the map resources are ready.
map.events.add('ready', function () {
//Create a data source to add your data to.
datasource = new atlas.source.DataSource();
map.sources.add(datasource);
//Add the polygon data to the data source.
datasource.add(data);
//Calculate the label points of the polygons and add them to the data source.
var labels = calculatePolygonLabels(data, 'label');
datasource.add(labels);
map.layers.add([
//Add a layer for rendering polygons.
new atlas.layer.PolygonLayer(datasource, null, {
filter: ['any', ['==', ['geometry-type'], 'Polygon'], ['==', ['geometry-type'], 'MultiPolygon']]
}),
//Add a symbol layer for rendering point data.
new atlas.layer.SymbolLayer(datasource, null, {
iconOptions: {
image: 'none'
},
textOptions: {
textField: ['get', 'label']
},
filter: ['any', ['==', ['geometry-type'], 'Point'], ['==', ['geometry-type'], 'MultiPoint']]
})
]);
});
}
function calculatePolygonLabels(shapes, labelPropertyName) {
var labels = [];
for (var i = 0; i < shapes.length; i++) {
//Make sure the shape is a polygon and it has a label property.
if ((shapes[i].geometry.type === 'Polygon' || shapes[i].geometry.type === 'MultiPolygon') &&
shapes[i].properties[labelPropertyName]) {
//Calculate the bounding box of the polygon and then gets its center.
var center = atlas.data.BoundingBox.getCenter(atlas.data.BoundingBox.fromData(shapes[i].geometry));
var prop = {};
prop[labelPropertyName] = shapes[i].properties[labelPropertyName];
labels.push(new atlas.data.Feature(new atlas.data.Point(center), prop));
}
}
return labels;
}
</script>
</head>
<body onload="GetMap()">
<div id="myMap" style="position:relative;width:100%;min-width:290px;height:600px;"></div>
<fieldset style="width:calc(100% - 30px);min-width:290px;margin-top:10px;">
<legend>Polygon labels - calculated</legend>
This sample shows how to create labels for polygons by calculating a coordinates and creating a point feature for the label.
In this case the center of the bounding box of the polygon is used to place the label.
</fieldset>
</body>
</html>
You can’t perform that action at this time.