Skip to content

Commit 78dd342

Browse files
committed
click able CircleMarker
1 parent ee1e7b6 commit 78dd342

3 files changed

Lines changed: 41 additions & 8 deletions

File tree

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { useEffect } from 'react';
2+
import { useMap } from 'react-leaflet';
3+
4+
const CreateCenterDotPane: React.FC = () => {
5+
const map = useMap();
6+
7+
useEffect(() => {
8+
if (!map.getPane('center-dot')) {
9+
const pane = map.createPane('center-dot');
10+
pane.style.zIndex = '650'; // above overlays
11+
}
12+
}, [map]);
13+
14+
return null;
15+
};
16+
17+
export default CreateCenterDotPane;

src/components/model/ModelMap.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import React, { useRef } from 'react';
1+
import React, { useEffect, useRef } from 'react';
22
import { MapContainer, TileLayer, Marker, Popup, useMap } from 'react-leaflet';
33
import L, { Map as LeafletMap, LatLngTuple } from 'leaflet';
44
import type { ClusterRow } from '../../types';
55
import { Card } from 'react-bootstrap';
66
import '../map/map.css';
77
import 'leaflet/dist/leaflet.css';
88
import ModelClusterMarkers from './ModelClusterMarkers';
9+
import CreateCenterDotPane from './CreateCenterDotPane';
910

1011
type Props = {
1112
clusters: ClusterRow[];
@@ -45,6 +46,7 @@ export const ModelMap: React.FC<Props> = ({ clusters, isHeat, sizeHeat}) => {
4546
attribution='&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
4647
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
4748
/>
49+
<CreateCenterDotPane />
4850
<ModelClusterMarkers clusters={clusters} colorBy='1' isHeat={isHeat} sizeHeat={sizeHeat} />
4951
</MapContainer>
5052
</div>

src/components/model/ModelMarker.tsx

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import { divIcon, LatLngExpression } from 'leaflet';
3-
import { Marker, Circle } from 'react-leaflet';
3+
import { Marker, Circle, CircleMarker } from 'react-leaflet';
44
import { renderToStaticMarkup } from 'react-dom/server';
55
import { ClusterRow } from '../../types';
66
import { IconEmpty, IconCircle } from '../map/markers';
@@ -28,22 +28,36 @@ const ModelMarker: React.FC<IProps> = ({
2828
}) => {
2929
const severity = 1; // example
3030

31-
if (isHeat) {
32-
return (
31+
if (isHeat) {
32+
return (
33+
<>
3334
<Circle
3435
center={position}
35-
radius={size}
36+
radius={size} // meters
3637
pathOptions={{
3738
color,
3839
fillColor: color,
3940
fillOpacity: 0.35,
4041
weight: 1,
4142
}}
4243
>
43-
<ModelMarkerPopUp data={data} language={language} />
4444
</Circle>
45-
);
46-
}
45+
<CircleMarker
46+
center={position}
47+
pane="center-dot"
48+
radius={3}
49+
pathOptions={{
50+
color,
51+
fillColor: 'red',
52+
fillOpacity: 1,
53+
weight: 0,
54+
}}
55+
>
56+
<ModelMarkerPopUp data={data} language={language} />
57+
</CircleMarker>
58+
</>
59+
);
60+
}
4761

4862
// normal marker
4963
const icon = getEmptyIcon(color, false);

0 commit comments

Comments
 (0)