1414<script setup lang="ts">
1515import * as L from ' leaflet'
1616import fixLeaflet from ' @/app/fixLeaflet'
17- import ' leaflet.markercluster/dist/leaflet.markercluster.js '
17+ import ' leaflet.markercluster'
1818import ' leaflet/dist/leaflet.css'
1919import ' leaflet.markercluster/dist/MarkerCluster.css'
2020import ' leaflet.markercluster/dist/MarkerCluster.Default.css'
@@ -36,9 +36,9 @@ const emit = defineEmits<{
3636 ' map-moved' : []
3737}>()
3838
39- const mapInstance = ref (null )
39+ const mapInstance = ref <L .Map >(null )
40+ const markerClusterInstance = ref <L .MarkerClusterGroup >(null )
4041const mapRef = useTemplateRef (' map' )
41- const markerCluster = ref (null )
4242const markers = ref (new Map ())
4343
4444const MAP_URL = ' https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{r}.png'
@@ -155,28 +155,27 @@ const addPointer = async ({ markerContent, location, tooltip }, eventHandlers: a
155155
156156 markers .value .set (location .id , marker )
157157
158- if (markerCluster .value ) {
159- markerCluster .value .addLayers (marker )
158+ if (markerClusterInstance .value ) {
159+ markerClusterInstance .value .addLayers ([marker ])
160+ markerClusterInstance .value .refreshClusters ()
160161 } else {
161- marker .addTo (mapInstance .value )
162+ marker .addTo (mapInstance .value as L . Map )
162163 }
163-
164- if (markerCluster .value ) markerCluster .value .refreshClusters ()
165164}
166165
167166const removePointer = (location ) => {
168167 const marker = markers .value .get (location .id )
169168
170169 if (marker ) {
171- if (markerCluster .value ) {
172- marker .value .removeFrom (markerCluster .value )
170+ if (markerClusterInstance .value ) {
171+ marker .value .removeFrom (markerClusterInstance .value )
173172 } else {
174173 mapInstance .value .removeLayer (marker )
175174 }
176175 }
177176 markers .value .delete (location .id )
178- if (markerCluster .value ) {
179- markerCluster .value .refreshClusters ()
177+ if (markerClusterInstance .value ) {
178+ markerClusterInstance .value .refreshClusters ()
180179 }
181180 // force readraw
182181 mapInstance .value .invalidateSize ()
@@ -197,15 +196,14 @@ onMounted(() => {
197196 const map = L .map (mapRef .value , CONFIG )
198197
199198 if (props .useCluster ) {
200- // @ts-expect-error ignore markercluster
201199 const markerCluster = L .markerClusterGroup ({
202200 removeOutsideVisibleBounds: true ,
203201 chunkedLoading: true ,
204202 iconCreateFunction: createClusterIcons ,
205203 })
206204
207205 map .addLayer (markerCluster )
208- markerCluster .value = markerCluster
206+ markerClusterInstance .value = markerCluster
209207 }
210208
211209 map .on (' contextmenu' , (e ) => emit (' contextmenu' , e ))
0 commit comments