import React, { useEffect, useRef, useState } from 'react' import PropTypes from 'prop-types'; import L from 'leaflet' import "leaflet/dist/leaflet.css"; export default function DistancesMap({distances}) { //console.log('distances-map:DistanesMap: distances.lngth: ' + distances.length); /*lat and lon of Braunschweig,DE*/ const position = [52.26594, 10.52673] const mapRef = useRef(); useEffect(() => { const map = L.map( mapRef.current, {attributionControl: true} ).setView( position, 6 ); L.tileLayer( "http://{s}.tile.osm.org/{z}/{x}/{y}.png", { attribution: '© OpenStreetMap contributors', maxZoom: 18, scrollWheelZoom: false, }).addTo(map); //TODO: Why is 'scrollWheelZoom: false,' above not working? //TODO: Why the following line instead? map.scrollWheelZoom.disable() distances.map( function( value, key ) { //console.log('distances-map:DistanesMap: value: ' +JSON.stringify(value)); //console.log('distances-map:DistanesMap: value[2]: ' + value[2]); const diameter = value[7]; //console.log('distances-map:DistanesMap: diameter: ' + diameter); const radius = diameter / 2; //console.log('distances-map:DistanesMap: radius: ' + radius); //add circle with a radius of X m //https://leafletjs.com/reference.html#circle var circle = L.circle( [ value[3], value[2] ], { radius: radius }).addTo(map); }); // unmount map function //You should unmount the function in react.js to remove the existing map. return () => map.remove(); }, []); if ( distances !== undefined && distances !== null && distances.length > 0 ) { return ( <>
mapRef.current = el}>
); }else{ //TODO Why does mapRef have to be present? return ( <>

loading...

mapRef.current = el}>
); } } DistancesMap.propTypes = { distances: PropTypes.array };