menu
version 1.1.5 - 19 janvier 2021
Si vous avez installé une version antérieure à 1.1.0 (avant le 17 janvier 2021) et que vous souhaitez mettre à jour :
- Dans votre fichier app.js, supprimez cette ligne : require ('../vendor/frvaillant/mapux/Resources/assets/js/map.js')
- Vous pouvez également supprimer le dossier public/bundle/mapux
- Relancez l'installation

Documentation

avatar github
Tout le code de MapUx est disponible ici :
https://github.com/frvaillant/mapux

MapUx est un composant dédié au framework Symfony. Il permet d'ajouter simplement des cartes, des markers et toutes sortes d'objets cartographiques dans un projet Symfony.
Il propose plusieurs possibilités pour rendre vos cartes interactives.

Version 1.1
Attention, MapUx est encore en cours d'écriture et des remodelages réguliers sont effectués. Malgré tout le soin apporté à son développement et les différents tests effectués, il est possible qu'il reste des bugs.
Si tel était le cas, merci de nnous le signaler https://github.com/frvaillant/mapux/issues Merci de votre compréhension.

Installation

Pré-requis
- Symfony > 4.4
- PHP > 7.2
- Composer
- Webpack Encore

L'installation de MapUx se fait en 3 étapes

1

    
composer require frvaillant/mapux
    
   

2

        
yarn install --force
// ou npm install --force
    
    

3

            
php bin/console mapux:install
    

Cette commande installe tout ce dont mapux a besoin pour fonctionner correctement.

Si vous ne souhaitez pas l'utiliser ou si celle ci échoue pour une raison ou pour une autre, vous pouvez finir l'installation de Mapux vous même avec ces quelques étapes :

3.1

Dans votre fichier webpack.config.js, ajoutez :
Encore.addAliases({ 'mapuxevents': __dirname + '/assets/js/mapux' })

3.2

Dans votre fichier app.js, ajoutez :
require ('@frvaillant/mapux/js/map.js')

3.3

- Créez le dossier assets/js/mapux
- Dans ce dossier créez un fichier MapuxEvents.js - dans ce fichier, placez le code suivant :

                    
require ('leaflet/dist/leaflet')

export class MapuxEvents {
    //******************************************************
    // PLEASE DO NOT CHANGE CONSTRUCTOR ********************
    //******************************************************

    /**
     *
     * @param target : the target of the event
     * @param map : the instance of your map
     * @param icons : the available icons provided by mapux (default, red, ....)
     */
    constructor(target, map, icons) {
        this.target = target // Should be the map or a marker
        this.map = map
        this.icons = icons
    }

    /* *******************************************************
    WRITE YOUR METHODS BELOW

    addIcon(event) {
        L.marker([event.latlng.lat, event.latlng.lng], {
            icon:this.icons.red
        }).addTo(this.map)
    }
     */


}
                    
                

Une fois tout en place, il ne reste ensuite qu'à "compliler" tout ca :

    
yarn encore dev
    

Exemple simple et rapide

Pour effectuer un premier essai, voici un exemple qui vous permettra de comprendre le principe de base du fonctionnement de MapUx.

Pour cet exemple, dans un controlleur, nous allons créer une carte, lui ajouter un marker, ajouter une popup et un événement à ce marker :

    
use MapUx\Builder\MapBuilder;
use MapUx\Model\Marker;
use MapUx\Model\Popup;

  // [...]

// Instanciation du MapBuilder
$mapBuilder = new MapBuilder();

// Création de la carte avec ses coordonnées de centrage et niveau de zoom par défaut
$map = $mapBuilder->createMap();

// Création d'un marker positionné par défaut
$marker = new Marker();

// Création et ajout d'une popup pour le marker
$popup = new Popup('My popup text');
$marker->addPopup($popup);

// Ajout d'un événement au clic sur le marker
$markerClickFunction = 'alert("your click event has been triggered");';
$marker->addEvent('click', $markerClickFunction);

// Ajout du marker à la carte
$map->addMarker($marker);

// Rendu de la carte dans le template Twig
return $this->render('home/index.html.twig', [
    'map' => $map,
]);
    

Dans votre fichier twig, il vous suffit d'ajouter

    
// mymap est l'id de la div qui contiendra la carte
{{ render_map('mymap', map) }}
    

première carte avec 1 marker

Utilisation de MapUx

MapUx se base sur une intégration de la librairie javascript Leaflet. Ainsi la plupart des outils disponibles dans leaflet sont intégrés à MapUx ou le seront prochainement

Les cartes

Leaflet : Documentation sur les cartes

Pour créer une carte, vous n'avez pour ainsi dire besoin de rien

    
use MapUx\Builder\MapBuilder;
$mapBuilder = new MapBuilder();
$map = $mapBuilder->createMap();
    

Par défaut la carte est centrée sur Bordeaux avec un niveau de zoom de 10.

La méthode createMap peut aussi prendre des paramètres pour :
- centrer la carte sur un point choisi - Ajuster le niveau de zoom de départ - ajouter un fond de carte sous forme de lien (voir plus bas)

    
$map = $mapBuilder->createMap(44.00, -0.57, 10);
    

Une carte sera alors créée avec un fond de carte par défaut, centrée sur le point de latitude 44 et de longitude -0.57 avec un niveau de zoom de 10.

Tous ces paramètres (latitude, longitude, zoom, fond de carte) peuvent être passés dans le constructeur avec la méthode createMap du Builder ou spécifiés à l'aide des setters adéquats :

    
$map->setZoomLevel(10);
$map->setCenterLatitude(44.00);
$map->setCenterLongitude(-0.57);
    

Vous pouvez également ajouter des options à votre carte (toutes les options de Leaflet sont disponibles) en utilisant la méthode setOptions :

        
$map->setOptions([
    'zoomControl' => false
]);
        
    

Vous pouvez ajouter une légende automatique à votre carte : voir le chapitre Légende

class Map __construct(
float $centerLatitude = self::DEFAULT_LAT,
float $centerLongitude = self::DEFAULT_LON,
int $zoomLevel = self::DEFAULT_ZOOM,
string $background = null )
Paramètre type Valeur par défaut
$centerLatitude float 44.8485138261124
$centerLongitude float -0.563934445381165
$zoomLevel integer 10
$options array Voir la doc de Leaflet
$markers array Aucune
$layers array Aucune
$events array Aucune
$showLegend bool false
$title string null
$legendPosition string 'top-right'

Fond de carte OpenStreetMap

Pour choisir un fond de carte, il suffit d'utiliser la méthode setBackground() :

    
$map->setBackground('http://{s}.tile.stamen.com/toner-lite/{z}/{x}/{y}.png');
    

Vous trouverez une liste des fonds de carte disponibles ici : https://www.creazo.fr/listing-des-fonds-de-cartes-dopen-street-map/

Fonds de cartes Geoportail & IGN

Doc GeoServices : https://geoservices.ign.fr/index.html
Pour utiliser les ressources de l'IGN (France), vous devez vous procurer une clé d'API auprès de l'IGN. Le formulaire de demande est disponible ici : https://www.sphinxonline.com/SurveyServer/s/etudesmk/Geoservices/questionnaire.htm
J'ai obtenu une réponse en moins de 24h :-)

MapUx ne propose pour l'instant que les ressources Géoportail accessibles gratuitement. Une évolution future permettra d'accéder à toutes les ressources.

Les ressources disponibles sont les suivantes :

ORTHOIMAGERY.ORTHOPHOTOS Photographies aériennes
GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2 cartes de france
CADASTRALPARCELS.PARCELLAIRE_EXPRESS Parcelles cadastrales
ELEVATION.SLOPES représentation des reliefs
LIMITES_ADMINISTRATIVES_EXPRESS.LATEST limites administratives

Pour utiliser une ressource IGN, il faut ajouter une couche (voir plus bas l'utilisation détaillée des couches) à votre carte. MapUx fournit une classe spéciale à cet effet.

Elle a besoin de 2 paramètres :
- votre clé d'API
- l'identifiant de la ressource

Même si vous pouvez spécifier votre clé IGN dans le controlleur, nous vous conseillons de la placer dans un endroit secret
Par exemple en la définissant dans votre fichier .env.local
    
$ignLayer = new IgnLayer('votreCleApi', 'ORTHOIMAGERY.ORTHOPHOTOS');
$map->addLayer($ignLayer);
    
Bien sur pour des raisons de performances, si vous utilisez les vues aériennes ou les cartes IGN, il peut être recommandé de désactiver le fond de carte par défaut avant d'ajouter la couche IGN.
    
$map->removeBackground();
$map->addLayer($ignLayer);
    

Quelques exemples

Les markers

Doc Leaflet : https://leafletjs.com/reference-1.7.1.html#marker

Il peut être très utile d'ajouter des markers à une carte pour matérialiser des points particuliers.
MapUx fournit une classe spécifique pour cela.

Pour créer un marker, il suffit de spécifier les coordonnées de son emplacement.

    
use MapUx\Model\Marker;
$marker = new Marker(44.00, -0.57);
$map->addMarker($marker);
    

Toutes les options de Leaflet peuvent être ajoutées avec la méthode setOptions().

    
$marker->setOptions([
    'draggable' => true
]);
    

Vous pouvez ajouter plusieurs markers à votre carte en une seule fois :

    
$mark1 = new Marker(44, 1);
$mark2 = new Marker(45, 2);
$map->setMarkers([$mark1, $mark2]);
    
class Marker __construct(float $latitude = self::DEFAULT_LAT, float $longitude = self::DEFAULT_LON)
Paramètre type Valeur par défaut
$latitude float 44.8485138261124
$longitude float -0.563934445381165
$icon Icon voir icones
$options array Voir la doc de Leaflet
$popup Popup Aucune
$events array Aucune
$legendName string null

Icones personnalisés

Doc Leaflet : https://leafletjs.com/reference-1.7.1.html#icon

MapUx intègre le marker par défaut de leaflet (bleu) et met 7 autres markers à votre disposition.

    
$icon = new Icon('yellow');
$icon = new Icon('orange');
$icon = new Icon('red');
$icon = new Icon('pink');
$icon = new Icon('purple');
$icon = new Icon(); // Marker par défaut
$icon = new Icon('green');
$icon = new Icon('brown');
$icon = new Icon('black');
    

Vous pouvez également créer votre propre icone :

    
$icon = new Icon();
$icon->setIconPicture('url-de-votre-image');
$marker->setIcon($icon);
    

Vous pouvez ajouter une classe personnalisée à un icone :

    
$icon->setClassName('mon-joli-icone');
    

Vous pouvez aussi spécifier l'icone dans les options du marker :

    
$marker->setOptions([
    'icon' => $icon
]);
    

Et bien sur, vous pouvez changer la taille de l'icone, son ombre ... en accord avec les spécifications de leaflet.

class Icon __construct(string $color = null)
Paramètre type Valeur par défaut
$iconUrl string '/bundle/mapux/images/marker-icon.png'
$shadowUrl string '/bundle/mapux/images/marker-shadow.png'
$iconSize array [25, 41]
$iconAnchor array [12, 41]
$popupAnchor array [1, -34]
$tooltipAnchor array [16, -28]
$shadowSize array [41, 41]

Les layers

Doc Leaflet : https://leafletjs.com/reference-1.7.1.html#layer

Vous pouvez ajouter autant de couches que vous le souhaitez à votre carte et ainsi afficher des cartes enrichies.
La classe Layer est prévue pour cela.

Le principe est le suivant :

    
$layer = new Layer();
$map->addLayer($layer);
    
class Layer __construct(string $background = self::DEFAULT_BACKGROUND)
Paramètre type Valeur par défaut
$background string 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'
$options array // Voir la doc Leaflet [ ]
$events array Aucune
$legendName string null
$legendType string null // Est ajouté par mapUx dans les classes héritières

Exemple avec des couches IGN sur un fond OSM

    
$mapBuilder = new MapBuilder();
$map = $mapBuilder->createMap();
$map->setBackground('http://{s}.tile.stamen.com/toner-lite/{z}/{x}/{y}.png');
$levels = new IgnLayer('votre-cle-api', 'ELEVATION.SLOPES');
$levels->setOptions([
    'opacity' => 0.5,
    'attribution' => "IGN-F/Geoportail",
]);
$map->addLayer($levels);

$adminLimits = new IgnLayer('votre-cle-api', 'LIMITES_ADMINISTRATIVES_EXPRESS.LATEST');
$adminLimits->setOptions([
    'opacity' => 1,
    'attribution' => "IGN-F/Geoportail",
]);
    $map->addLayer($adminLimits);
    
class IgnLayer extends Layer __construct(string $key, string $ressource)
Paramètre type Valeur par défaut
$key string Voir la doc GeoServices

Ajouter un polygone, un cercle ou une ligne

Doc GeoJson : https://leafletjs.com/reference-1.7.1.html#geojson
Doc Circle : https://leafletjs.com/reference-1.7.1.html#circle
Doc Polyline : https://leafletjs.com/reference-1.7.1.html#polyline

Avec MapUx, vous pouvez très facilement ajouter des formes sur votre carte.
Pour un cercle, vous aurez besoin des coordonnées de son centre et la taille en mètres de son rayon.
Pour un polygone ou une ligne, vous aurez besoin d'un tableau de points comme ci-dessous :

        
$points = [
    [lat, lng],
    [lat, lng],
    // ...
];
        
    

Ajouter un polygone
                
$polygon = new Polygon($points);
$map->addLayer($polygon);
                
            
Ajouter une ligne
                
$line = new Polyline($points);
$map->addLayer($line);
                
            
Ajouter un cercle
                
$circle = new Circle(44.54, -0.65, 2000); // lat, lng, radius
$map->addLayer($circle);
                
            
Ajouter un rectangle
            
$rectangle = new Rectangle([44, 0], [45, 1]);
$map->addLayer($rectangle);
            
        
Relier des markers

Si vous souhaitez relier vos markers, vous pouvez récupérer tous les points avec la méthode getPointsFromMarkers().

                
$points = $map->getPointsFromMarkers();
$pl = new Polyline($points);
$map->addLayer($pl);
                
            
Ajouter une grille

Il y a deux sortes de grilles utilisables : une grille fixe, placée entre deux points avec une maille métrique, et une grille dont la maille s'ajuste en fonction de l'échelle de zoom.
- Pour ajouter une grille fixe, spécifiez les coordonnées des deux extrémités S-O et N-E de la grille, ainsi que la largeur de chaque case (en m)
- Une grille ajustable ne prend aucun paramètres : new AdjustableGrid().

            
$grid = new Grid([42, -3], [50, 7], 50000);
$map->addLayer($grid);
            
        

Il est bien sur possible de changer l'apparence de vos formes. Les méthodes suivantes sont là pour cela :

        
            $layer->setFillColor('#ff0000'); // remplissage
            $layer->setColor('#000000'); // bordure
            $layer->setOpacity(0.9); // bordure
            $layer->setFillOpacity(0.5); // remplissage
            $layer->setWeight(3); // épaisseur de la bordure
        
    

abstract class GeoJsonLayer extends ShapeLayer
Paramètre type Valeur par défaut
$points array [ [lat, lng], [lat, lng] ... ] Aucune
$type string Aucune
final class Polygon extends GeoJsonLayer __construct(array $points)
final class Polyline extends GeoJsonLayer __construct(array $points)

abstract class ShapeLayer extends Layer
Paramètre type Valeur par défaut
$color string '#0d47a1'
$fillColor string '#2196f3'
$weight integer 2
$opacity float 1
$fillOpacity float 0.5
class Circle extends ShapeLayer __construct(float $centerLat, float $centerLng, int $radius)
Paramètre type Valeur par défaut
$centerLat float Aucune
$centerLng float Aucune
$radius int Aucune
class Rectangle extends ShapeLayer __construct($firstPoint, $secondPoint)
Paramètre type Valeur par défaut
$firstPoint array [lat, lng] Aucune
$secondPoint array [lat, lng] Aucune

Regrouper des markers au sein d'une grille

Vous pouvez facilement créer des regroupements de markers à l'aide d'un maillage du territoire que vous analysez. Ainsi, au lieu d'afficher tous vos markers, vous pouvez présenter une synthèse de leur répartition.

Commencez par stocker tous vos markers dans un tableau. Ajoutez une grille à votre carte. Affichez les clusters.

    
// On définit une grille avec les coordonnées de son coin S-O et de son coin N-E et la largeur d'une maille en mètres.
$grid = new Grid([43, -2], [45, 2], 20000);
$grid->setFillOpacity(0); // Pour ne pas remplir les cases de la grille
$map->addLayer($grid);
    

Vous devriez alors avoir ceci :

grille vide

Ensuite, activez l'affichage des groupes de markers

    
$grid->addMarkersClusters($map, $markers);
    

Cette méthode prend également deux paramètres : showLegend = true, $options = []. Le premier vous permettra de désactiver la légende automatique :

            
$grid->addMarkersClusters($map, $markers, false);
            
        

Les options vous permettraont de définir les couleurs des cercles à afficher ainsi que les seuils de regroupement(voir plus bas)

Vous pouvez matérialiser plus fortement les mailles vides de votre grille

        
$grid->createEmptyRectangles($map);
        
    

Cette méthode prend également un tableau d'options pour personnaliser l'affichage.

Si vous avez laissé l'affichage de la légende à true dans la méthode addMarkersClusters, alors, en ajoutant la légende à la carte, la légende de vos clusters s'affichera automatiquement

            
$map->addLegend();
            
        
Voir la rubrique légende pour plus d'informations

Pour personnaliser l'affichage et les seuils de regroupement des markers, vous pouvez créer un tableau d'options.
Ce tableau prend en clés les seuils de regroupement et en valeur un tableau de couleurs

        
$options = [
    0 => [
        'fillColor' => '#000000',
        'fillOpacity' => 0.5,
        'color' => '#000000',
        'opacity' => 1,
        'weight' => 2
    ],
    5 => [
        'fillColor' => '#00FF00',
        'fillOpacity' => 0.5,
        'color' => '#00FF00',
        'opacity' => 1,
        'weight' => 2
    ], ....
        
    

Les seuils par défaut sont 0, 5, 10, 20.
La première clé est forcément 0 et le tableau doit avoir au moins 2 clés

Enfin, vous disposez de méthodes vous permettant de récupérer les informations de votre grille.
Sachez que la grille est indéxée avec pour chaque case un identifiant rowNumber : colNumber. Les lignes sont numérotées du sud au nord et les colonne d'ouest en est.

            
$grid->getGridPoints()
            
        

Ce tableau prend en clé le numéro de chaque case. Chaque entrée à trois tableau "start", "end", "center" dont chacun contient les coordonnées des points correspondants.

La méthode $grid->getMarkerBoxes() vous donnera un tableau indéxé par les numéro de cases reprenant les coordonnées du centre et le nombre de markers regroupés dans cette case

            
$grid->getMarkerBoxes()
            
        

Enfin, vous pouvez récupérer toutes les cases vides de votre grille. Le tableau généré a la même structure que le premier (start, end, center)

            
$grid->getEmptyBoxes()
            
        
Exemple complet

Le code ci-dessous génèrera le rendu ci-après

            
$number = 0;
while ($number < 3000) {
    $number++;
    $marker = new Marker(rand(43000000,46000000)/1000000, rand(-2000000, 2000000)/1000000);
    $markers[] = $marker;
}

$grid = new Grid([43, -2], [45, 2], 20000);
$grid->setFillOpacity(0);
$map->addLayer($grid);

$loptions = [
    0 => ['fillColor' => '#fdd835', 'fillOpacity' => 0.8, 'color' => '#000', 'opacity' => 1, 'weight' => 1],
    7 => ['fillColor' => '#f44336', 'fillOpacity' => 0.8, 'color' => '#000', 'opacity' => 1, 'weight' => 1],
    14 => ['fillColor' => '#7b1fa2', 'fillOpacity' => 0.8, 'color' => '#000', 'opacity' => 1, 'weight' => 1],
    21 => ['fillColor' => '#1a237e', 'fillOpacity' => 0.8, 'color' => '#000', 'opacity' => 1, 'weight' => 1],
];
$grid->addMarkersClusters($map, $markers, true, $loptions);
$map->setZoomLevel(8);
$map->setCenterLatitude(44);
$grid->createEmptyRectangles($map);

// Légende pour les cases vides
$map->addLegendItem(
    [
        'type' => 'square',
        'title' => 'cases vides',
        'fillColor' => '#ff0000'
    ]
);

$map->addLegend();
            
        

Evénements

Doc leaflet : https://leafletjs.com/reference-1.7.1.html#map-event

Un des intérêts de Leaflet est de pouvoir rendre les cartes interactives. Chaque objet leaflet est à l'écoute d'événements. Lorsqu'un de ceux-ci se produit, une fonction javascript peut être executée.
Par exemple, il est possible d'ajouter un marker au clic sur la carte, ou déclencher une alerte lorsque l'on déplace un marker.
Pour créer un événement, le plus simple est d'utiliser la méthode addEvent sur une carte ou un marker.

Vous pouvez ajouter des événements sur tous vos objets : carte, markers, layers

Méthode 1 : Ajouter des fonctions sous forme de texte

    
$maFonction = 'alert("evenement déclenché");';
$marker->addEvent('click', $maFonction);
    

Quelque soit la fonction javascript que vous ajoutez, la variable "event" est toujours disponible afin de vous permettre d'accéder à certains éléments.
Par exemple, pour masquer un marker lorsqu'il est cliqué :

    
$maFonction = 'event.target.remove();';
$marker->addEvent('click', $maFonction);
    
Attention, lors de l'ajout de fonctions javascript avec cette méthode, n'oubliez pas d'ajouter un ";" à la fin de chaque instruction.

Toutefois, cette méthode, bien que pratique, peut s'avérer compliquée et illisible si de nombreuses fonctions javascript ou si des fonctions complexes sont nécessaires.
Pour cela, MapUx vous fournit une classe javascript qui est installée dans assets/js/mapux/MapuxEvents. Il suffit d'y ajouter les méthodes dont vous avez besoin.
Cette classe vous permet également d'accéder facilement à l'instance de la carte et de disposer de l'icone par défaut.

Méthode 2 : utiliser la classe javascript MapuxEvents

Cette classe a été installée dans votre dossier assets/js/mapux et contient le code suivant :

    
export class MapuxEvents {
    constructor(target, map, icons) {
        this.target = target // Target est l'objet sur lequel vous ajoutez un evenement (map ou marker)
        this.map = map
        this.icons = icons // Vous donne accès à tous les icones fournis avec mapUx. Ex : this.icons.default ou this.icon.red
    }
}
    

Si vous souhaitez ajouter un marker au clic sur la carte, créez une méthode addIcon dans cette classe :

    
export class MapuxEvents {
    constructor(target, map, icons) {
        this.target = target // Should be the map or a marker
        this.map = map
        this.icons = icons
    }

    addIcon(event) {
        L.marker([event.latlng.lat, event.latlng.lng], {
           icon : this.icons.default // N'oubliez pas de spécifier l'icone
       }).addTo(this.map)
    }
}
    

Dans votre controlleur, ajoutez ensuite :

    
$map->addEvent('click', 'addIcon');
    

Si vous le souhaitez, vous pouvez également passer des paramètres sous forme d'un tableau dans votre fonction.

Côté javascript :

    
addIcon(event, params) {

    const marker = L.marker([event.latlng.lat, event.latlng.lng], {
       icon : this.defaultIcon // N'oubliez pas de spécifier l'icone
    }).addTo(this.map)

    marker.on('click', (e) => {
        console.log(params['word'])
    })
}
    

Côté PHP

    
$map->addEvent('click', 'addIcon', [
    'word' => 'the word to show in alert window'
]);
    

Ajouter plusieurs événements

Si vous souhaitez ajouter plusieurs événements en une seule fois, vous pouvez utilliser la méthode setEvents() :

    
// Si vous n'utilisez pas la classe MapuxEvents
$marker->setEvents([
    'click' => ['alert("marker is clicked");', null],
    'dragend' => ['console.log("drag marker is ended");', null],
]);
    
    ou
    
// Si vous utilisez la classe MapUxEvents
$map->setEvents([
    'eventName' => [
        'methodName',
        [
            'param1' => 'param1Value',
            'param2' => 'param2Value'
        ]
    ],
    'eventName2' => [
        'methodName',
        null
    ]
]);
    

Ajouter une légende sur la carte

Vous pouvez ajouter une légende automatique à votre carte. Pour cela vous devez spécifier un nom pour chaque élément que vous ajoutez à la carte et que vous souhaitez voir figurer en légende.

    
$marker->setLegendName('Arbre remarquables');
$marker2->setLegendName('Arbres morts');
$rectangle->setLegendName('Zone d\'étude');
$circle->setLegendName('Zone interdite');
    

Vous pouvez également donner un titre à votre carte. Il apparaîtra en tête de la légende.

    
$map->setTitle('Etude des arbres remarquables');
    

Vous pouvez ajouter ensuite la légende à votre carte en précisant si vous le souhaitez la position de celle-ci.
Par défaut, la légende se place en haut à droite. Les classes disponibles sont :
top-right (défaut), top-left, bottom-right et bottom-left

    
$map->addLegend(); // ou bien $map->addLegend('bottom-right');
    

MapUx génèrera alors la légende et l'ajoutera à votre carte.

carte avec légende

MapUx ajoute automatiquement une échelle en bas à gauche de votre carte. Pour la supprimer, il faut utiliser la méthode removeScale().

carte avec échelle
                
$map->removeScale();
                
            

Vous pouvez également ajouter si vous le souhaitez des éléments personnalisés à la légende

Plusieurs en une fois
        
$map->addLegendItems([
[
    // Paramètre obligatoires
    'type' => 'square', // square, circle, line, picture or text sont possibles
    'title' => 'Le titre de votre choix',
    // Paramètres optionnels
    'fillColor' => '#000', // defaut #000
    'fillOpacity => 0.8, // defaut 0.5
    'color => '#FF0000', // defaut #000
    'opacity' => 0.8, // defaut 1
    'weight' => 3, // defaut 1
],
[
// Ajoutera un texte rouge à votre légende
    'type' => 'text',
    'title' => 'another élément',
    'color' => '#FF0000'
]
        
    
Un par un
        
$map->addLegendItem(
[
    // Paramètre obligatoires
    'type' => 'square', // square, circle, line, picture or text sont possibles
    'title' => 'Le titre de votre choix',
    // Paramètres optionnels
    'fillColor' => '#000', // defaut #000
    'fillOpacity => 0.8, // defaut 0.5
    'color => '#FF0000', // defaut #000
    'opacity' => 0.8, // defaut 1
    'weight' => 3, // defaut 1
]);
        
    

Côté vues avec Twig

    
{{ render_map('your-map-id', map) }}
    

Et c'est tout :-)

La fonction twig render_map crée une div container contenant votre carte avec pour id "your-map-id" et par défaut la classe "ux-map". Le minimum de CSS nécessaire est fourni avec MapUx.

Vous pouvez ajouter vos propres classes css

    
{{ render_map('your-map-id', map, 'my-class-1 my-class-2') }}
    

La structure générée est la suivante :

    
<div class="mapux-container" id="your-map-id-container">
    <div class="mapux-map vos-propres-classes" id="your-map-id"></div>
    // Si vous ajoutez la légende
    <div class="mapux-legend vos-propres-classes position"></div>
</div>