完整的示例更新 - 工作示例在codesanbox
import React from "react";
import { MapContainer, TileLayer, Marker } from "react-leaflet";
import MarkerClusterGroup from "react-leaflet-markercluster";
import L from "leaflet";
import "./styles.css";
export default function App() {
const createClusterCustomIcon = function (cluster) {
return L.divIcon({
html: `<span>${cluster.getChildCount()}</span>`,
// customMarker is the class name in the styles.css file
className: "customMarker",
iconSize: L.point(40, 40, true)
});
};
return (
<MapContainer
className="markercluster-map"
center={[51.0, 19.0]}
zoom={4}
maxZoom={18}
>
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
/>
<MarkerClusterGroup
showCoverageOnHover={false}
iconCreateFunction={createClusterCustomIcon}
>
<Marker position={[49.8397, 24.0297]} />
<Marker position={[52.2297, 21.0122]} />
<Marker position={[51.5074, -0.0901]} />
</MarkerClusterGroup>
</MapContainer>
);
}
文件styles.css
和最重要的需要放到文件夹中pin.png
。public
body {
padding: 0;
margin: 0;
}
.markercluster-map {
height: 100vh;
}
.customMarker {
background-image: url(/pin.png);
background-position: center;
background-repeat: no-repeat;
background-size: contain;
}
.customMarker span {
display: block;
margin-top: 5px;
margin-left: 13px;
color: #fff;
}