I've got very simple code to display a map using react-leaflet and place a marker on it. However, i get the following two errors in my browser console
GET http://localhost:8080/marker-icon-2x.png 404 (Not Found)
GET http://localhost:8080/marker-shadow.png 404 (Not Found)
I tried to fix this issue by downloading those two images and placing them at the root. It works. However, how can i change the URL the react-leaflet marker element looks for the marker images? I'd like to store them in "./images" rather than at the root.
Now, let’s say you have a React-based website ( check out this starter I set up for you on Stack Blitz ), and you want to add a Leaflet map to showcase your mapping skills. There is actually a React binding for Leaflet, React-Leaflet.
From the React-Leaflet docs: React Leaflet provides bindings between React and Leaflet. It does not replace Leaflet, but leverages it to abstract Leaflet layers as React components. As such, it can behave differently from how other React components work. So, let’s go over how to build a Leaflet map component inside of a React application!
Running npm start should render the app with an affirmative message on your browser. After adding react-leaflet to our package.json file, we must display our map correctly. React Leaflet requires some CSS to render, and we can either include the CSS link tag in head or we can copy and paste the CSS from the file below directly into the project:
It is easy to customize marker icons in Leaflet by using Icon, imported from leaflet itself. With that, we can create a new Icon instance, setting the URL location of the image along with its size: The Marker component has an icon prop that can be set to the skater variable we created.
Try to do this :)
React leaflet for some reason do not include images and you will need to reset default icons image.
Below is some working example, I hope it will solve your issue.
You also can add icons from one of public link
https://cdnjs.com/libraries/Leaflet.awesome-markers
import React, { Component } from 'react';
import L from 'leaflet';
import {
Map, TileLayer, Marker, Popup
} from 'react-leaflet'
import 'leaflet/dist/leaflet.css';
import './style.css';
import icon from 'leaflet/dist/images/marker-icon.png';
import iconShadow from 'leaflet/dist/images/marker-shadow.png';
let DefaultIcon = L.icon({
iconUrl: icon,
shadowUrl: iconShadow
});
L.Marker.prototype.options.icon = DefaultIcon;
Here is the solution that worked for me:
I added the following lines in the top of the file:
import { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet';
import 'leaflet/dist/leaflet.css';
import L from 'leaflet';
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png').default,
iconUrl: require('leaflet/dist/images/marker-icon.png').default,
shadowUrl: require('leaflet/dist/images/marker-shadow.png').default
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With