Skip to Content
ExamplesAdd Geojson Layer

MapsGL - Adding custom GeoJSON data

This example renders a static GeoJSON object consisting of a polygon feature to the map. Two separate style layers are associated with the data source: one that fills the geometry and another that draws a thicker outline along the geometry edges.

add-geojson-layer.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>MapsGL SDK - Add a custom GeoJSON layer</title> <meta name="description" content="Add custom static GeoJSON data to the map." /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <link href="https://api.mapbox.com/mapbox-gl-js/v3.12.0/mapbox-gl.css" rel="stylesheet" /> <script defer src="https://api.mapbox.com/mapbox-gl-js/v3.12.0/mapbox-gl.js"></script> <link href="https://cdn.aerisapi.com/sdk/js/mapsgl/1.9.0/aerisweather.mapsgl.css" rel="stylesheet" /> <script defer src="https://cdn.aerisapi.com/sdk/js/mapsgl/1.9.0/aerisweather.mapsgl.js"></script> <style> body, html { margin: 0; padding: 0; } #map { height: 100vh; width: 100%; } </style> </head> <body> <div id="map"></div> <script> window.addEventListener('load', () => { mapboxgl.accessToken = 'MAPBOX_TOKEN'; const map = new mapboxgl.Map({ container: document.getElementById('map'), style: 'mapbox://styles/mapbox/light-v9', center: [-8, 40], zoom:5 }); const account = new aerisweather.mapsgl.Account('CLIENT_ID', 'CLIENT_SECRET'); const controller = new aerisweather.mapsgl.MapboxMapController(map, { account }); controller.on('load', () => { // add a custom polygon as GeoJSON data controller.addSource('country-region', { type: 'geojson', data: { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "type": "Sovereign country", "name": "Portugal", "continent": "Europe", "region_un": "Europe", "subregion": "Southern Europe", "region_wb": "Europe & Central Asia" }, "geometry": { "type": "Polygon", "coordinates": [ [ [-9.034817674180246, 41.88057058365967], [-8.67194576662672, 42.13468943945496], [-8.263856980817792, 42.28046865495034], [-8.013174607769912, 41.790886135417125], [-7.422512986673795, 41.79207469335983], [-7.251308966490824, 41.91834605566505], [-6.668605515967656, 41.883386949219584], [-6.389087693700915, 41.381815497394655], [-6.851126674822552, 41.11108266861753], [-6.864019944679385, 40.33087189387483], [-7.026413133156595, 40.184524237624245], [-7.066591559263529, 39.71189158788277], [-7.498632371439725, 39.62957103124181], [-7.098036668313128, 39.03007274022378], [-7.374092169616318, 38.37305858006492], [-7.029281175148796, 38.07576406508977], [-7.166507941099865, 37.803894354802225], [-7.537105475281024, 37.42890432387623], [-7.453725551778092, 37.09778758396607], [-7.855613165711985, 36.83826854099627], [-8.382816127953689, 36.97888011326246], [-8.898856980820327, 36.86880931248078], [-8.746101446965554, 37.65134552667661], [-8.839997524439879, 38.26624339451761], [-9.287463751655224, 38.3584858261586], [-9.526570603869715, 38.73742910415491], [-9.446988898140232, 39.39206614842837], [-9.048305223008427, 39.75509308527877], [-8.977353481471681, 40.15930613866581], [-8.768684047877102, 40.76063894303019], [-8.79085323733031, 41.18433401139126], [-8.99078935386757, 41.54345937760364], [-9.034817674180246, 41.88057058365967] ] ] } } ] } }); // fill the polygon region controller.addLayer('region-fill', { source: 'country-region', type: 'fill', paint: { fill: { color: '#ff0000', opacity: 0.5 } } }); // add a thicker outline to the region controller.addLayer('region-outline', { source: 'country-region', type: 'line', paint: { stroke: { color: '#ff0000', thickness: 5 } } }); }); }); </script> </body> </html>
© 2026 Xweather (opens in a new tab)Terms of Service (opens in a new tab)Privacy Policy (opens in a new tab)