Udostępnij za pośrednictwem


Dane punktów klastrowania w zestawie Web SDK

Jeśli na mapie znajduje się wiele punktów danych, niektóre mogą się nakładać na siebie nawzajem. Nakładanie się może spowodować, że mapa może stać się nieczytelna i trudna do użycia. Dane punktu klastrowania to proces łączenia danych punktów, które znajdują się blisko siebie i przedstawiania ich na mapie jako pojedynczego klastrowanego punktu danych. Gdy użytkownik powiększa mapę, klastry dzielą się na poszczególne punkty danych. Podczas pracy z dużą liczbą punktów danych procesy klastrowania mogą poprawić środowisko użytkownika.


Włączanie klastrowania w źródle danych

Włącz klastrowanie w DataSource klasie, ustawiając cluster opcję na true. Ustaw clusterRadius pozycję , aby wybrać punkty w pobliżu i połączyć je w klaster. Wartość jest wyrażona clusterRadius w pikselach. Użyj clusterMaxZoom polecenia , aby określić poziom powiększenia, na którym ma być wyłączona logika klastrowania. Oto przykład włączania klastrowania w źródle danych.

//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
});

Napiwek

Jeśli dwa punkty danych są blisko siebie na ziemi, możliwe, że klaster nigdy się nie rozbije, niezależnie od tego, jak blisko użytkownika powiększa się. Aby rozwiązać ten problem, możesz ustawić clusterMaxZoom opcję wyłączenia logiki klastrowania i po prostu wyświetlić wszystko.

Klasa DataSource udostępnia również następujące metody związane z klastrowaniem.

Metoda Typ zwracany opis
getClusterChildren(clusterId: number) Geometria funkcji tablicy<obietnicy<, dowolna> |< Kształt>> Pobiera elementy podrzędne danego klastra na następnym poziomie powiększenia. Te elementy podrzędne mogą być kombinacją kształtów i podciągów. Subclusters to funkcje z właściwościami zgodnymi z właściwościami ClusteredProperties.
getClusterExpansionZoom(clusterId: number) Numer obietnicy<> Oblicza poziom powiększenia, na którym klaster zaczyna się rozszerzać lub rozbijać.
getClusterLeaves(clusterId: number, limit: number, offset: number) Geometria funkcji tablicy<obietnicy<, dowolna> |< Kształt>> Pobiera punkty w klastrze. Domyślnie zwracane są pierwsze 10 punktów. Aby przestronicować punkty, użyj polecenia limit , aby określić liczbę punktów do zwrócenia i offset przejść przez indeks punktów. Aby zwrócić wszystkie punkty, ustaw wartość limit Infinity i nie ustaw wartości offset.

Wyświetlanie klastrów przy użyciu warstwy bąbelkowej

Warstwa bąbelkowa to doskonały sposób renderowania punktów klastrowanych. Użyj wyrażeń, aby skalować promień i zmieniać kolor na podstawie liczby punktów w klastrze. Jeśli klastry są wyświetlane przy użyciu warstwy bąbelkowej, należy użyć oddzielnej warstwy do renderowania nieklastrowanych punktów danych.

Aby wyświetlić rozmiar klastra w górnej części bąbelka, użyj warstwy symboli z tekstem i nie używaj ikony.

Aby zapoznać się z kompletnym roboczym przykładem implementowania wyświetlania klastrów przy użyciu warstwy bąbelkowej, zobacz Point Clusters in Bubble Layer (Klastry punktów w warstwie bąbelkowej w przykładach usługi Azure Maps). Aby uzyskać kod źródłowy dla tego przykładu, zobacz Point Clusters in Bubble Layer source code (Klastry punktów w kodzie źródłowym warstwy bąbelkowej).

Zrzut ekranu przedstawiający mapę wyświetlającą klastry przy użyciu warstwy bąbelkowej.

Wyświetlanie klastrów przy użyciu warstwy symboli

Podczas wizualizacji punktów danych warstwa symboli automatycznie ukrywa symbole nakładające się na siebie w celu zapewnienia czytelnego interfejsu użytkownika. To domyślne zachowanie może być niepożądane, jeśli chcesz pokazać gęstość punktów danych na mapie. Można jednak zmienić te ustawienia. Aby wyświetlić wszystkie symbole, ustaw allowOverlap opcję właściwości Warstwy iconOptions symboli na truewartość .

Użyj klastrowania, aby pokazać gęstość punktów danych przy zachowaniu czystego interfejsu użytkownika. W poniższym przykładzie pokazano, jak dodać niestandardowe symbole i reprezentować klastry i poszczególne punkty danych przy użyciu warstwy symboli.

Aby zapoznać się z kompletnym roboczym przykładem implementacji wyświetlania klastrów przy użyciu warstwy symboli, zobacz Wyświetlanie klastrów z warstwą symboli w przykładach usługi Azure Maps. Aby uzyskać kod źródłowy dla tego przykładu, zobacz Wyświetlanie klastrów z kodem źródłowym warstwy symboli.

Zrzut ekranu przedstawiający mapę wyświetlającą klastry z warstwą symboli.

Klastrowanie i warstwa map cieplnych

Mapy cieplne to doskonały sposób wyświetlania gęstości danych na mapie. Ta metoda wizualizacji może obsługiwać dużą liczbę punktów danych samodzielnie. Jeśli punkty danych są klastrowane, a rozmiar klastra jest używany jako waga mapy cieplnej, mapa cieplna może obsłużyć jeszcze więcej danych. Aby osiągnąć tę opcję, ustaw weight opcję warstwy mapy cieplnej na ['get', 'point_count']wartość . Gdy promień klastra jest mały, mapa cieplna wygląda niemal identycznie z mapą cieplną przy użyciu nieklastrowanych punktów danych, ale działa lepiej. Jednak mniejszy promień klastra, tym dokładniejszy jest mapa cieplna, ale z mniejszymi korzyściami z wydajności.

Pełny przykład roboczy, który pokazuje, jak utworzyć mapę cieplną korzystającą z klastrowania w źródle danych, zobacz Mapowanie cieplne ważone klastra w przykładach usługi Azure Maps. Aby zapoznać się z kodem źródłowym dla tego przykładu, zobacz Kod źródłowy mapy cieplnej z wagami klastra.

Zrzut ekranu przedstawiający mapę cieplną korzystającą z klastrowania w źródle danych.

Zdarzenia myszy w punktach danych klastrowanych

Gdy zdarzenia myszy występują w warstwie zawierającej klastrowane punkty danych, punkt danych klastrowanych powróci do zdarzenia jako obiekt funkcji punktu GeoJSON. Ta funkcja punktu ma następujące właściwości:

Nazwa właściwości Typ Opis
cluster boolean Wskazuje, czy funkcja reprezentuje klaster.
cluster_id string Unikatowy identyfikator klastra, który może być używany z metodami DataSource getClusterExpansionZoom, getClusterChildreni getClusterLeaves .
point_count Liczba Liczba punktów, które zawiera klaster.
point_count_abbreviated string Ciąg, który skraca wartość, point_count jeśli jest długa. (na przykład 4000 staje się 4K)

Przykład klastrów punktów w warstwie bąbelkowej przyjmuje warstwę bąbelkową, która renderuje punkty klastra i dodaje zdarzenie kliknięcia. Po wyzwoleniu zdarzenia kliknięcia kod oblicza i powiększa mapę do następnego poziomu powiększenia, na którym klaster się rozpada. Ta funkcja jest implementowana przy użyciu getClusterExpansionZoom metody DataSource klasy i cluster_id właściwości klikniętego punktu danych klastrowanego.

Poniższy fragment kodu przedstawia kod w klastrach punktów w warstwie bąbelkowej, który dodaje funkcję zdarzenia kliknięcia do punktów danych klastrowanych:

//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
            });
        });
    }
}

Zrzut ekranu przedstawiający mapę wyświetlającą klastry przy użyciu warstwy bąbelkowej.

Wyświetlanie obszaru klastra

Dane punktów reprezentowane przez klaster są rozłożone na obszar. W tym przykładzie po umieszczeniu wskaźnika myszy nad klastrem występują dwa główne zachowania. Najpierw poszczególne punkty danych zawarte w klastrze są używane do obliczania wypukłego kadłuba. Następnie kadłub wypukły jest wyświetlany na mapie, aby wyświetlić obszar. Kadłub wypukły jest wielokątem, który owija zestaw punktów, takich jak elastyczne pasmo, i można go obliczyć przy użyciu atlas.math.getConvexHull metody . Wszystkie punkty zawarte w klastrze można pobrać ze źródła danych przy użyciu getClusterLeaves metody .

Aby zapoznać się z kompletnym przykładem roboczym, który pokazuje, jak to zrobić, zobacz Wyświetlanie obszaru klastra z platformą Convex Hull w przykładach usługi Azure Maps. Aby uzyskać kod źródłowy dla tego przykładu, zobacz Wyświetlanie obszaru klastra za pomocą kodu źródłowego Convex Hull.

Zrzut ekranu przedstawiający mapę przedstawiającą obszary klastra reprezentowane przez pinezki upuszczania, które pokazują, że po wybraniu obiektu Convex Hull oznaczyliśmy obszar klastra.

Agregowanie danych w klastrach

Często klastry są reprezentowane przy użyciu symbolu z liczbą punktów znajdujących się w klastrze. Jednak czasami pożądane jest dostosowanie stylu klastrów przy użyciu większej liczby metryk. Za pomocą agregacji klastra można tworzyć i wypełniać właściwości niestandardowe przy użyciu obliczenia wyrażenia agregowanego. Agregacje klastra można zdefiniować w clusterProperties opcji DataSource.

Przykład Cluster aggregates używa wyrażenia agregowanego. Kod oblicza liczbę na podstawie właściwości typu jednostki każdego punktu danych w klastrze. Gdy użytkownik wybierze klaster, zostanie wyświetlone okno podręczne z dodatkowymi informacjami o klastrze. Aby uzyskać kod źródłowy dla tego przykładu, zobacz Cluster aggregates source code (Kod źródłowy agregacji klastra).

Zrzut ekranu przedstawiający mapę używającą klastrowania zdefiniowanego przy użyciu obliczeń wyrażeń stylu opartych na danych. Te obliczenia agregują wartości we wszystkich punktach zawartych w klastrze.

Następne kroki

Dowiedz się więcej o klasach i metodach używanych w tym artykule:

Zobacz przykłady kodu, aby dodać funkcje do aplikacji: