javascript - Centering text label in mapbox-gl-js? -
i'm trying center text label on feature polygon in mapbox-gl-js. possible? looks option related placement of label "symbol-placement" layout property (https://www.mapbox.com/mapbox-gl-style-spec/#symbol):
symbol-placement
optional enum. 1 of point, line. defaults point. label placement relative geometry. line
can used on linestrings , polygons.
using "point" places label @ bottom right corner of feature:
ideas?
you can use turf library find centroid of polygon, make symbol point co-ordinate , add text field it.
see below example text label displayed on centroid of polygon feature
mapboxgl.accesstoken = 'pk.eyj1ijoiyxj1bmficmfoyw0ilcjhijoiodbjtv9wusj9.m5tbz5xyg8vhd-8qu7d_sa'; // initialize map var map = new mapboxgl.map({ container: 'map', // container id style: 'mapbox://styles/mapbox/streets-v8', //stylesheet location center: [-68.13734351262877, 45.137451890638886], // starting position zoom: 3 // starting zoom }); // add feature var feature = { 'type': 'feature', 'properties': { 'name': 'maine' }, 'geometry': { 'type': 'polygon', 'coordinates': [[[-67.13734351262877, 45.137451890638886], [-66.96466, 44.8097], [-68.03252, 44.3252], [-69.06, 43.98], [-70.11617, 43.68405], [-70.64573401557249, 43.090083319667144], [-70.75102474636725, 43.08003225358635], [-70.79761105007827, 43.21973948828747], [-70.98176001655037, 43.36789581966826], [-70.94416541205806, 43.46633942318431], [-71.08482, 45.3052400000002], [-70.6600225491012, 45.46022288673396], [-70.30495378282376, 45.914794623389355], [-70.00014034695016, 46.69317088478567], [-69.23708614772835, 47.44777598732787], [-68.90478084987546, 47.184794623394396], [-68.23430497910454, 47.35462921812177], [-67.79035274928509, 47.066248887716995], [-67.79141211614706, 45.702585354182816], [-67.13734351262877, 45.137451890638886]]] } }; // make point feature displaying text; // user turf library find centroid of polygon var centroidpt = turf.centroid(feature); centroidpt.properties.title = 'label'; map.on('style.load', function () { // add feature source map.addsource('maine', { 'type': 'geojson', 'data': feature }); // add label point source map.addsource('label', { 'type': 'geojson', 'data': centroidpt }); // add feature style map.addlayer({ 'id': 'route', 'type': 'fill', 'source': 'maine', 'layout': {}, 'paint': { 'fill-color': '#088', 'fill-opacity': 0.8 } }); // add label style map.addlayer({ 'id': 'label-style', 'type': 'symbol', 'source': 'label', 'layout': { 'text-field': 'label', }, 'paint': { 'text-color': 'red' } }); });
body { margin:0; padding:0; } #map { position:absolute; top:0; bottom:0; width:100%; }
<script src="https://api.tiles.mapbox.com/mapbox.js/plugins/turf/v2.0.0/turf.min.js"></script> <link href="https://api.tiles.mapbox.com/mapbox-gl-js/v0.14.1/mapbox-gl.css" rel="stylesheet"/> <script src="https://api.tiles.mapbox.com/mapbox-gl-js/v0.14.1/mapbox-gl.js"></script> <div id='map'></div>
Comments
Post a Comment