MapComplete/test/Logic/FeatureSource/ClusteringFeatureSource.spec.ts

68 lines
2.2 KiB
TypeScript

import { FeatureCollection, Point } from "geojson"
import { describe, it } from "vitest"
import StaticFeatureSource from "../../../src/Logic/FeatureSource/Sources/StaticFeatureSource"
import {
ClusterGrouping,
ClusteringFeatureSource,
} from "../../../src/Logic/FeatureSource/TiledFeatureSource/ClusteringFeatureSource"
import { UIEventSource } from "../../../src/Logic/UIEventSource"
import { expect } from "chai"
const points: FeatureCollection<Point> = {
type: "FeatureCollection",
features: [
{
type: "Feature",
properties: { name: "a" },
geometry: {
coordinates: [9.759318139161195, 55.56552169756637],
type: "Point",
},
},
{
type: "Feature",
properties: { name: "b" },
geometry: {
coordinates: [9.759768615515327, 55.56569930560951],
type: "Point",
},
},
{
type: "Feature",
properties: { name: "c" },
geometry: {
coordinates: [9.75879327221594, 55.56569229478089],
type: "Point",
},
},
{
type: "Feature",
properties: { name: "d" },
geometry: {
coordinates: [9.759380131319915, 55.56507066300628],
type: "Point",
},
},
],
}
describe("ClusteringFeatureSource", () => {
it("smallTest", () => {
const source = new StaticFeatureSource(points.features)
const zoom = new UIEventSource(19)
// On zoomlevel 19, all points are in a different tile
const clusteringSource = new ClusteringFeatureSource(source, zoom, "test", {
cutoff: 2,
dontClusterAboveZoom: 100,
})
const allClusters = ClusterGrouping.singleton.features
expect(allClusters.data.length).to.eq(0)
expect(clusteringSource.features.data.length).to.eq(4)
zoom.set(13)
expect(allClusters.data.length).to.eq(1)
expect(allClusters.data[0].properties["total_metric"]).to.eq("4")
expect(clusteringSource.features.data.length).to.eq(0)
})
})