UNPKG

openlayers

Version:

Build tools and sources for developing OpenLayers based mapping applications

74 lines (69 loc) 1.77 kB
goog.require('ol.Map'); goog.require('ol.View'); goog.require('ol.extent'); goog.require('ol.format.GeoJSON'); goog.require('ol.layer.Vector'); goog.require('ol.source.Vector'); goog.require('ol.style.Fill'); goog.require('ol.style.Stroke'); goog.require('ol.style.Style'); goog.require('ol.style.Text'); var map = new ol.Map({ target: 'map', view: new ol.View({ center: [0, 0], zoom: 1 }) }); var labelStyle = new ol.style.Style({ geometry: function(feature) { var geometry = feature.getGeometry(); if (geometry.getType() == 'MultiPolygon') { // Only render label for the widest polygon of a multipolygon var polygons = geometry.getPolygons(); var widest = 0; for (var i = 0, ii = polygons.length; i < ii; ++i) { var polygon = polygons[i]; var width = ol.extent.getWidth(polygon.getExtent()); if (width > widest) { widest = width; geometry = polygon; } } } return geometry; }, text: new ol.style.Text({ font: '12px Calibri,sans-serif', overflow: true, fill: new ol.style.Fill({ color: '#000' }), stroke: new ol.style.Stroke({ color: '#fff', width: 3 }) }) }); var countryStyle = new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.6)' }), stroke: new ol.style.Stroke({ color: '#319FD3', width: 1 }) }); var style = [countryStyle, labelStyle]; var vectorLayer = new ol.layer.Vector({ source: new ol.source.Vector({ url: 'data/geojson/countries.geojson', format: new ol.format.GeoJSON() }), style: function(feature) { labelStyle.getText().setText(feature.get('name')); return style; }, declutter: true }); map.addLayer(vectorLayer);