Delen via


Clusteringpuntgegevens in de Web SDK

Wanneer er veel gegevenspunten op de kaart staan, kunnen sommige elkaar overlappen. De overlapping kan ertoe leiden dat de kaart onleesbaar en moeilijk te gebruiken is. Het clusteren van puntgegevens is het proces van het combineren van puntgegevens die zich dicht bij elkaar bevinden en deze als één geclusterd gegevenspunt weer te geven op de kaart. Als de gebruiker inzoomt op de kaart, vallen de clusters uiteen in de afzonderlijke gegevenspunten. Wanneer u met een groot aantal gegevenspunten werkt, kunnen de clusterprocessen de gebruikerservaring verbeteren.


Clustering inschakelen op een gegevensbron

Schakel clustering in de DataSource klasse in door de cluster optie in te stellen op true. Stel deze clusterRadius optie in om punten in de buurt te selecteren en deze te combineren in een cluster. De waarde van clusterRadius is in pixels. Hiermee clusterMaxZoom geeft u een zoomniveau op waarop u de clusterlogica kunt uitschakelen. Hier volgt een voorbeeld van het inschakelen van clustering in een gegevensbron.

//Create a data source and enable clustering.
var datasource = new atlas.source.DataSource(null, {
    //Tell the data source to cluster point data.
    cluster: true,
    
    //The radius in pixels to cluster points together.
    clusterRadius: 45,
    
    //The maximum zoom level in which clustering occurs.
    //If you zoom in more than this, all points are rendered as symbols.
    clusterMaxZoom: 15
});

Tip

Als twee gegevenspunten dicht bij elkaar liggen, is het mogelijk dat het cluster nooit uit elkaar valt, ongeacht hoe dicht de gebruiker inzoomt. Hiertoe kunt u de clusterMaxZoom optie instellen om de clusterlogica uit te schakelen en gewoon alles weer te geven.

De DataSource klasse biedt ook de volgende methoden met betrekking tot clustering.

Methode Resultaattype Beschrijving
getClusterChildren(clusterId: getal) Promise<Array<Feature<Geometry, any> | Vorm>> Hiermee worden de onderliggende elementen opgehaald van het opgegeven cluster op het volgende zoomniveau. Deze elementen kunnen een combinatie zijn van vormen en subclusters. De subclusters zijn functies met eigenschappen die overeenkomen met ClusteredProperties.
getClusterExpansionZoom(clusterId: getal) Promise<getal> Hiermee berekent u een zoomniveau waarop het cluster wordt uitgebreid of gesplitst.
getClusterLeaves(clusterId: number, limit: number, offset: number) Promise<Array<Feature<Geometry, any> | Vorm>> Haalt de punten in een cluster op. Standaard worden de eerste 10 punten geretourneerd. Als u door de punten wilt bladeren, gebruikt limit u om het aantal punten op te geven dat moet worden geretourneerd en offset om de index van punten te doorlopen. Als u alle punten wilt retourneren, stelt u deze Infinity in limit en stelt u deze niet inoffset.

Clusters weergeven met behulp van een bellenlaag

Een bellenlaag is een uitstekende manier om geclusterde punten weer te geven. Gebruik expressies om de radius te schalen en de kleur te wijzigen op basis van het aantal punten in het cluster. Als u clusters weergeeft met behulp van een bellenlaag, moet u een afzonderlijke laag gebruiken om niet-geclusterde gegevenspunten weer te geven.

Als u de grootte van het cluster boven op de bel wilt weergeven, gebruikt u een symboollaag met tekst en gebruikt u geen pictogram.

Zie Puntclusters in bellenlaag in de Voorbeelden van Azure Maps voor een volledig werkend voorbeeld van het implementeren van weergaveclusters met behulp van een bellenlaag. Zie Puntclusters in de broncode van de bellenlaag voor de broncode voor de broncode voor de broncode van de bellaag.

Schermopname van een kaart waarin clusters worden weergegeven met behulp van een bellenlaag.

Clusters weergeven met een symboollaag

Bij het visualiseren van gegevenspunten verbergt de symboollaag automatisch symbolen die elkaar overlappen om een schonere gebruikersinterface te garanderen. Dit standaardgedrag kan ongewenst zijn als u de gegevenspuntendichtheid op de kaart wilt weergeven. Deze instellingen kunnen echter worden gewijzigd. Als u alle symbolen wilt weergeven, stelt u de optie van de allowOverlap eigenschap Symboollagen iconOptions in op true.

Gebruik clustering om de gegevenspuntendichtheid weer te geven terwijl u een schone gebruikersinterface houdt. In het volgende voorbeeld ziet u hoe u aangepaste symbolen toevoegt en clusters en afzonderlijke gegevenspunten vertegenwoordigt met behulp van de symboollaag.

Zie Clusters weergeven met een symboollaag in de Voorbeelden van Azure Maps voor een volledig werkend voorbeeld van het implementeren van weergaveclusters met behulp van een symboollaag. Zie Clusters weergeven met een broncode voor symboollaag voor de broncode voor dit voorbeeld.

Schermopname van een kaart met clusters met een symboollaag.

Clustering en de heatmaplaag

Heatmaps zijn een uitstekende manier om de dichtheid van gegevens op de kaart weer te geven. Deze visualisatiemethode kan een groot aantal gegevenspunten zelfstandig verwerken. Als de gegevenspunten zijn geclusterd en de clustergrootte wordt gebruikt als het gewicht van de heatmap, kan de heatmap nog meer gegevens verwerken. Als u deze optie wilt bereiken, stelt u de optie van de weight heatmaplaag in op ['get', 'point_count']. Wanneer de clusterstraal klein is, ziet de heatmap er bijna identiek uit als een heatmap met behulp van de niet-geclusterde gegevenspunten, maar deze presteert beter. Hoe kleiner de clusterstraal, hoe nauwkeuriger de heatmap is, maar met minder prestatievoordelen.

Zie Voor een volledig werkend voorbeeld waarin wordt gedemonstreerd hoe u een heatmap maakt die gebruikmaakt van clustering op de gegevensbron, clustergewogen heatmap in de Azure Maps-voorbeelden. Zie De broncode van clustergewogen heatmap voor de broncode voor dit voorbeeld.

Schermopname van een heatmap die gebruikmaakt van clustering op de gegevensbron.

Muisgebeurtenissen op geclusterde gegevenspunten

Wanneer er muisgebeurtenissen plaatsvinden op een laag die geclusterde gegevenspunten bevat, keert het geclusterde gegevenspunt terug naar de gebeurtenis als een GeoJSON-puntfunctieobject. Deze puntfunctie heeft de volgende eigenschappen:

Eigenschapsnaam Type Beschrijving
cluster boolean Geeft aan of de functie een cluster vertegenwoordigt.
cluster_id tekenreeks Een unieke id voor het cluster die kan worden gebruikt met de methoden getClusterExpansionZoom, getClusterChildren en getClusterLeaves van DataSource.
point_count Nummer Het aantal punten dat het cluster bevat.
point_count_abbreviated tekenreeks Een tekenreeks die de point_count waarde afkort als deze lang is. (4000 wordt bijvoorbeeld 4K).

In het voorbeeld van puntclusters in bellenlaag wordt een bellenlaag gebruikt die clusterpunten weergeeft en een klik-gebeurtenis toevoegt. Wanneer de klik-gebeurtenis wordt geactiveerd, wordt de code berekend en ingezoomd op het volgende zoomniveau, waarbij het cluster uit elkaar breekt. Deze functionaliteit wordt geïmplementeerd met behulp van de getClusterExpansionZoom methode van de DataSource klasse en de cluster_id eigenschap van het geclusterde geclusterde gegevenspunt.

Het volgende codefragment toont de code in het voorbeeld van puntclusters in bellenlaag waarmee de functionaliteit voor klikgebeurtenissen wordt toegevoegd aan de geclusterde gegevenspunten:

//Add a click event to the layer so we can zoom in when a user clicks a cluster.
map.events.add('click', clusterBubbleLayer, clusterClicked);

//Add mouse events to change the mouse cursor when hovering over a cluster.
map.events.add('mouseenter', clusterBubbleLayer, function () {
    map.getCanvasContainer().style.cursor = 'pointer';
});

map.events.add('mouseleave', clusterBubbleLayer, function () {
    map.getCanvasContainer().style.cursor = 'grab';
});

function clusterClicked(e) {
    if (e && e.shapes && e.shapes.length > 0 && e.shapes[0].properties.cluster) {
        //Get the clustered point from the event.
        var cluster = e.shapes[0];

        //Get the cluster expansion zoom level. This is the zoom level at which the cluster starts to break apart.
        datasource.getClusterExpansionZoom(cluster.properties.cluster_id).then(function (zoom) {

            //Update the map camera to be centered over the cluster. 
            map.setCamera({
                center: cluster.geometry.coordinates,
                zoom: zoom,
                type: 'ease',
                duration: 200
            });
        });
    }
}

Schermopname van een kaart waarin clusters worden weergegeven met behulp van een bellenlaag.

Clustergebied weergeven

De puntgegevens die een cluster vertegenwoordigt, worden verspreid over een gebied. In dit voorbeeld wanneer de muis over een cluster wordt beweegt, treden er twee hoofdgedragen op. Eerst worden de afzonderlijke gegevenspunten in het cluster gebruikt om een convexe romp te berekenen. Vervolgens wordt de convexe romp op de kaart weergegeven om een gebied weer te geven. Een convexe romp is een veelhoek die een set punten verpakt zoals een elastische band en kan worden berekend met behulp van de atlas.math.getConvexHull methode. Alle punten in een cluster kunnen worden opgehaald uit de gegevensbron met behulp van de getClusterLeaves methode.

Zie Weergaveclustergebied met Convex Hull in de Voorbeelden van Azure Maps voor een volledig werkvoorbeeld dat laat zien hoe u dit doet. Zie Display cluster area with Convex Hull source code(Convex Hull) voor de broncode voor dit voorbeeld.

Schermopname van een kaart waarin clustergebieden worden weergegeven die worden vertegenwoordigd door decoratieve spelden die het clustergebied aangeven wanneer deze optie is geselecteerd.

Gegevens samenvoegen in clusters

Clusters worden vaak weergegeven met behulp van een symbool met het aantal punten in het cluster. Maar soms is het wenselijk om de stijl van clusters aan te passen met meer metrische gegevens. Met clusteraggregaties kunnen aangepaste eigenschappen worden gemaakt en ingevuld met behulp van een berekening van een statistische expressie . Clusteraggregaties kunnen worden gedefinieerd in clusterProperties de optie van de DataSource.

Het voorbeeld clusteraggregaties maakt gebruik van een statistische expressie. De code berekent een telling op basis van de eigenschap entiteitstype van elk gegevenspunt in een cluster. Wanneer een gebruiker een cluster selecteert, wordt er een pop-up weergegeven met aanvullende informatie over het cluster. Zie De broncode van Cluster aggregeren voor de broncode voor dit voorbeeld.

Schermopname van een kaart die gebruikmaakt van clustering die is gedefinieerd met behulp van berekening van gegevensgestuurde stijlexpressies. Deze berekeningen aggregeren waarden voor alle punten in het cluster.

Volgende stappen

Meer informatie over de klassen en methoden die in dit artikel worden gebruikt:

Bekijk codevoorbeelden om functionaliteit toe te voegen aan uw app: