Skip to content

Commit acedce8

Browse files
committed
More optimizations to auto clustering
1 parent ea910e2 commit acedce8

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

packages/maps/src/components/MapView.tsx

+25-12
Original file line numberDiff line numberDiff line change
@@ -188,10 +188,16 @@ const MapViewF = <T extends object>({
188188
clusterView?: React.ReactElement
189189
) => {
190190
const clusters = [];
191+
const clusteredMarkers: React.ReactElement[] = [];
192+
191193
for (const marker of markers) {
192194
const { latitude: lat, longitude: long } =
193195
marker.props as MapMarkerProps;
194196

197+
if (clusteredMarkers.includes(marker)) {
198+
continue;
199+
}
200+
195201
const nearbyMarkers = getNearbyMarkers(
196202
lat,
197203
long,
@@ -201,7 +207,7 @@ const MapViewF = <T extends object>({
201207

202208
if (nearbyMarkers.length > 1) {
203209
for (const nearbyMarker of nearbyMarkers) {
204-
markers.splice(markers.indexOf(nearbyMarker), 1);
210+
clusteredMarkers.push(nearbyMarker);
205211
}
206212
clusters.push(
207213
<MapMarkerCluster>
@@ -211,7 +217,12 @@ const MapViewF = <T extends object>({
211217
);
212218
}
213219
}
214-
return clusters;
220+
221+
const unClusteredMarkers = markers.filter(
222+
(marker) => !clusteredMarkers.includes(marker)
223+
);
224+
225+
return { clusters, unClusteredMarkers };
215226
},
216227
[getNearbyMarkers]
217228
);
@@ -240,13 +251,13 @@ const MapViewF = <T extends object>({
240251
// eslint-disable-next-line react-hooks/exhaustive-deps
241252
}, [delayedRegionValue]);
242253

243-
const markers = React.useMemo(
244-
() => getChildrenForType(MapMarker),
254+
const circles = React.useMemo(
255+
() => getChildrenForType(MapCircle),
245256
[getChildrenForType]
246257
);
247258

248-
const circles = React.useMemo(
249-
() => getChildrenForType(MapCircle),
259+
const markers = React.useMemo(
260+
() => getChildrenForType(MapMarker),
250261
[getChildrenForType]
251262
);
252263

@@ -260,15 +271,17 @@ const MapViewF = <T extends object>({
260271
return clusterViews.length ? clusterViews[0] : undefined; //Only take the first, ignore any others
261272
}, [getChildrenForType]);
262273

263-
const clusters = React.useMemo(() => {
274+
const { clusters, unClusteredMarkers } = React.useMemo(() => {
264275
if (autoClusterMarkers) {
265-
return clusterMarkers(
276+
const { clusters, unClusteredMarkers } = clusterMarkers(
266277
markers,
267278
autoClusterMarkersDistanceMeters,
268279
clusterView
269-
).concat(manualClusters);
280+
);
281+
282+
return { clusters: clusters.concat(manualClusters), unClusteredMarkers };
270283
} else {
271-
return manualClusters;
284+
return { clusters: manualClusters, unClusteredMarkers: markers };
272285
}
273286
}, [
274287
autoClusterMarkers,
@@ -304,7 +317,7 @@ const MapViewF = <T extends object>({
304317
style={[styles.map, style]}
305318
{...rest}
306319
>
307-
{markers.map((marker, index) =>
320+
{unClusteredMarkers.map((marker, index) =>
308321
renderMarker(
309322
marker.props,
310323
index,
@@ -343,7 +356,7 @@ const MapViewF = <T extends object>({
343356
loadingEnabled,
344357
longitude,
345358
mapRef,
346-
markers,
359+
unClusteredMarkers,
347360
onPress,
348361
onRegionChange,
349362
provider,

0 commit comments

Comments
 (0)