feat(leaflet-js-intg): add layer control according to https://leafletjs.com/examples/layers-control/

This commit is contained in:
dancingCycle 2023-12-30 22:50:05 +01:00
parent 3983ccb13a
commit 27f7c81237
3 changed files with 69 additions and 27 deletions

View File

@ -8,35 +8,39 @@ export default function Map1kCircleFixed() {
useEffect(() => { useEffect(() => {
//layer //base layer
const layerOsm = L.tileLayer( const baseLayerOsm = L.tileLayer(
"http://{s}.tile.osm.org/{z}/{x}/{y}.png", "http://{s}.tile.osm.org/{z}/{x}/{y}.png",
{ {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors', attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors',
maxZoom: 18, maxZoom: 18,
scrollWheelZoom: false, scrollWheelZoom: false,
}); });
var layerOsmHot = L.tileLayer('https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', { const baseLayerOsmHot = L.tileLayer('https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png', {
maxZoom: 19, maxZoom: 19,
attribution: '© OpenStreetMap contributors, Tiles style by Humanitarian OpenStreetMap Team hosted by OpenStreetMap France'}); attribution: '© OpenStreetMap contributors, Tiles style by Humanitarian OpenStreetMap Team hosted by OpenStreetMap France'});
var littleton = L.marker([39.61, -105.02]).bindPopup('This is Littleton, CO.'),
//overlay
const littleton = L.marker([39.61, -105.02]).bindPopup('This is Littleton, CO.'),
denver = L.marker([39.74, -104.99]).bindPopup('This is Denver, CO.'), denver = L.marker([39.74, -104.99]).bindPopup('This is Denver, CO.'),
aurora = L.marker([39.73, -104.8]).bindPopup('This is Aurora, CO.'), aurora = L.marker([39.73, -104.8]).bindPopup('This is Aurora, CO.'),
golden = L.marker([39.77, -105.23]).bindPopup('This is Golden, CO.'); golden = L.marker([39.77, -105.23]).bindPopup('This is Golden, CO.');
var layerCities = L.layerGroup([littleton, denver, aurora, golden]); const overlayCity = L.layerGroup([littleton, denver, aurora, golden]);
//map //map
const map = L.map( const map = L.map(
mapRef.current, mapRef.current,
{attributionControl: true, {attributionControl: true,
layers: [layerOsm, layerCities]} layers: [baseLayerOsm, overlayCity]}
).setView( [42.69751, 23.32415], 13 ); ).setView( [42.69751, 23.32415], 13 );
//layer control
var baseMaps = { var baseMaps = {
"OpenStreetMap": layerOsm, "OpenStreetMap": baseLayerOsm,
"<span style='color: red'>OpenStreetMap.HOT</span>": layerOsmHot "<span style='color: red'>OpenStreetMap.HOT</span>": baseLayerOsmHot
}; };
var overlayMaps = { var overlayMaps = {
"Cities": layerCities "Cities": overlayCity
}; };
var layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map); var layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map);

View File

@ -20,34 +20,54 @@ export default function MapArray( { array } ) {
useEffect(() => { useEffect(() => {
const map = L.map( //base layer
mapRef.current, const baseLayerOsm = L.tileLayer(
{attributionControl: true}
).setView(
mapCenter,
6
);
L.tileLayer(
"http://{s}.tile.osm.org/{z}/{x}/{y}.png", "http://{s}.tile.osm.org/{z}/{x}/{y}.png",
{ {
attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors', attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors',
maxZoom: 18, maxZoom: 18,
scrollWheelZoom: false, scrollWheelZoom: false,
}).addTo(map); }
);
array.map( function( value, key ) { //marker array
const rryMrkr = array.map( function( value, key ) {
console.log('map-array:MapArray:map() value: ' +JSON.stringify(value)); //console.log('map-array:MapArray:map() value: ' +JSON.stringify(value));
L.Marker.prototype.options.icon = DefaultIcon; L.Marker.prototype.options.icon = DefaultIcon;
var marker = L.marker( const marker = L.marker(
[value.lat, value.lon], [value.lat, value.lon],
{alt: 'popup marker name: ' + value.name} {alt: 'marker name: ' + value.name}
).addTo(map); );
const popupText ='name: <b>' + value.name + '</b><br />lat: ' + value.lat + '<br />lon: ' + value.lon; const popupText ='name: <b>' + value.name + '</b><br />lat: ' + value.lat + '<br />lon: ' + value.lon;
//console.log('popupText: ' + popupText);
marker.bindPopup(popupText); marker.bindPopup(popupText);
return marker
}); });
console.log('rryMrkr: ' + rryMrkr.length);
//layer group
const overlayMrkr = L.layerGroup(rryMrkr);
//map
const map = L.map(
mapRef.current,
{attributionControl: true,
layers : [baseLayerOsm, overlayMrkr]}
).setView(
mapCenter,
3
);
//layout control
var baseMaps = {
"OpenStreetMap": baseLayerOsm
};
var overlayMaps = {
'Markers' : overlayMrkr
};
const layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map);
// unmount map function // unmount map function
//You should unmount the function in react.js to remove the existing map. //You should unmount the function in react.js to remove the existing map.

View File

@ -26,7 +26,8 @@ export default function MapNxt() {
var map = L.map("map").setView([51.505, -0.09], 13); var map = L.map("map").setView([51.505, -0.09], 13);
L.tileLayer( //base layer
const baseLayerMapBox = L.tileLayer(
"https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}", "https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}",
{ {
attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>', attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
@ -36,12 +37,29 @@ export default function MapNxt() {
zoomOffset: -1, zoomOffset: -1,
accessToken: "pk.eyJ1IjoidGFyLWhlbCIsImEiOiJjbDJnYWRieGMwMTlrM2luenIzMzZwbGJ2In0.RQRMAJqClc4qoNwROT8Umg", accessToken: "pk.eyJ1IjoidGFyLWhlbCIsImEiOiJjbDJnYWRieGMwMTlrM2luenIzMzZwbGJ2In0.RQRMAJqClc4qoNwROT8Umg",
scrollWheelZoom: false, scrollWheelZoom: false,
}).addTo(map); });
//overlay
const littleton = L.marker([39.61, -105.02]).bindPopup('This is Littleton, CO.'),
denver = L.marker([39.74, -104.99]).bindPopup('This is Denver, CO.'),
aurora = L.marker([39.73, -104.8]).bindPopup('This is Aurora, CO.'),
golden = L.marker([39.77, -105.23]).bindPopup('This is Golden, CO.');
const overlayCity = L.layerGroup([littleton, denver, aurora, golden]);
//TODO: Why is 'scrollWheelZoom: false,' above not working? //TODO: Why is 'scrollWheelZoom: false,' above not working?
//TODO: Why the following line instead? //TODO: Why the following line instead?
map.scrollWheelZoom.disable() map.scrollWheelZoom.disable()
//layer control
var baseMaps = {
"MapBox": baseLayerMapBox,
};
var overlayMaps = {
"Cities": overlayCity
};
var layerControl = L.control.layers(baseMaps, overlayMaps).addTo(map);
//marker
L.Marker.prototype.options.icon = DefaultIcon; L.Marker.prototype.options.icon = DefaultIcon;
var marker = L.marker( var marker = L.marker(
[51.5, -0.09], [51.5, -0.09],