CP-070-10 - TEXT PATH - Plantilla atributos y función

MAPEA 5 Ejemplo aplicando simbología con plantilla sobre atributo para mostrar textpath. Texto montado a partir de una función.

by SIGC

HTML

<link rel="stylesheet" href="https://sigc.desarrollo.guadaltel.es/mapea5/plugins/stylemanager/stylemanager.min.css">
<script src="https://sigc.desarrollo.guadaltel.es/mapea5/js/mapea.ol.min.js"></script>
<script src="https://sigc.desarrollo.guadaltel.es/mapea5/js/configuration.js"></script>
<link rel="stylesheet" href="https://sigc.desarrollo.guadaltel.es/mapea5/assets/css/mapea.ol.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/chroma-js/1.3.7/chroma.min.js"></script>
<script src="https://sigc.desarrollo.guadaltel.es/mapea5/plugins/stylemanager/stylemanager.ol.min.js"></script>
<link rel="stylesheet" href="https://sigc.desarrollo.guadaltel.es/mapea5/plugins/attributetable/attributetable.min.css">
<script src="https://sigc.desarrollo.guadaltel.es/mapea5/plugins/attributetable/attributetable.ol.min.js"></script>
<link rel="stylesheet" href="https://sigc.desarrollo.guadaltel.es/mapea5/plugins/printer/printer.min.css">
<script src="https://sigc.desarrollo.guadaltel.es/mapea5/plugins/printer/printer.ol.min.js"></script>
<button onclick="setCategoriaStyle()">Aplicar estiloPath</button>
<button onclick="setCategoriaStyle2()">Aplicar estiloPath con smooth</button>
<button onclick="setCategoriaSinPath()">Aplicar estilo sin Path</button>
<div id="map"></div>

CSS

html,
      body {
        margin: 0;
        padding: 0;
        height: 100%;
        overflow: hidden;
      }

JavaScript

// Caso de prueba
// 1.- Carga de capa WFS - Líneas
// 2.- Establece atributo "color" para usar como parámetro para color
// 3.- Establece path:  true, para que el label salga alineado a lo largo de la línea del río
// 4.- Establece función para aplicar estilo de textpath (Nombre+longitud)
// 5.- Aplica estilo
// 6.- Probar aplicación estilo sin Path

//// CASO CAPA COMPLETA 
// Descomentadno este caso se carga capa de ríos completa donde se aprecia que la aplicación del TextPath pierde sentido al haber tantos tramos

var mapajs = M.map({
  'container': 'map',
  "controls": ["layerswitcher", "mouse", "scale", "overviewmap", "panzoombar", "scaleline", ],
  "getfeatureinfo": "plain"
});


let lines = new M.layer.WFS({
  name: "Ríos",
  url: "https://clientes.guadaltel.es/desarrollo/geossigc/wfs",
  namespace: "mapea",
  name: "mapb_hs1_100",
  legend: "mapb_hs1_100",
  getfeatureinfo: "plain",
  geometry: 'LINE',
  extract: true,
});


let linesSimp = new M.layer.WFS({
  url: "https://clientes.guadaltel.es/desarrollo/geossigc/wfs",
  namespace: "mapea",
  name: "hs1_100_simplificada",
  legend: "Ríos - Toponimia",
  getfeatureinfo: "plain",
  geometry: 'LINE',
  extract: true,
});


lines.on(M.evt.LOAD, function() {
  lines.getFeatures().forEach(function(line) {
    line.setAttribute('color', 'blue')
  })
});


let plantillaStyle = new M.style.Line({
  stroke: {
    color: 'rgba(255, 255, 0, 0)',
		opacity: 0,
		width: 0
  },
	label: {
    text: function(feature) {
      return (feature.getAttribute('nombre') + " -- " + feature.getAttribute('longitud')).toUpperCase()
    },
    color: 'blue',
    path: true,
    textoverflow: '',
    rotate: true,
    align: 'center'
  }
});

let plantillaStyle2 = new M.style.Line({
  stroke: {
    color: 'rgba(0, 0 , 255, 0)',
		width: 0
  },
  label: {
    text: function(feature) {
      return (feature.getAttribute('nombre') + " -- " + feature.getAttribute('longitud')).toUpperCase()
    },
    color: 'blue',
    path: true,
   ...