Mastering Interactive Maps with React: Integrating Leaflet with React

Creating interactive maps in your React applications can significantly enhance user experience.

Leaflet is a powerful JavaScript library for embedding maps, and when combined with React, it offers a robust solution for displaying geographic data.

This tutorial will guide you through integrating Leaflet with React, focusing on adding markers and displaying GeoJSON data.

16 Free React Map Libraries for Google Maps, Leaflet, and SVG Maps
Welcome to your comprehensive guide for the best free React.js Map Libraries. This guide is designed to delve into an impressive range of 16 top-tier libraries. Each one has been carefully selected for its ability to enhance your React.js applications with interactive and customizable map features. Our coverage

Prerequisites

  • Basic understanding of React.
  • Node.js installed on your machine.

Setting Up Your React Project

First, create a new React application if you haven’t done so already:

npx create-react-app leaflet-react
cd leaflet-react

Next, install the necessary packages:

npm install leaflet react-leaflet

Also, include Leaflet's CSS in your index.css or App.css file:

@import url('https://unpkg.com/leaflet/dist/leaflet.css');

Creating a Basic Map Component

Create a new component named MapComponent.js:

// src/MapComponent.js
import React from 'react';
import { MapContainer, TileLayer } from 'react-leaflet';
import 'leaflet/dist/leaflet.css';

const MapComponent = () => {
  const position = [51.505, -0.09]; // Initial position [latitude, longitude]

  return (
    <MapContainer center={position} zoom={13} style={{ height: '500px', width: '100%' }}>
      <TileLayer
        url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
        attribution='&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
      />
    </MapContainer>
  );
};

export default MapComponent;

Then, use this component in your App.js:

// src/App.js
import React from 'react';
import MapComponent from './MapComponent';

function App() {
  return (
    <div className="App">
      <h1>Interactive Map with Leaflet and React</h1>
      <MapComponent />
    </div>
  );
}

export default App;

Adding Markers

Now, let's add markers to the map. Update MapComponent.js to include markers:

import React from 'react';
import { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet';
import 'leaflet/dist/leaflet.css';
import L from 'leaflet';

// Ensure markers display correctly
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
  iconRetinaUrl: 'https://unpkg.com/leaflet/dist/images/marker-icon-2x.png',
  iconUrl: 'https://unpkg.com/leaflet/dist/images/marker-icon.png',
  shadowUrl: 'https://unpkg.com/leaflet/dist/images/marker-shadow.png',
});

const MapComponent = () => {
  const position = [51.505, -0.09];
  const markers = [
    { position: [51.505, -0.09], title: "Marker 1" },
    { position: [51.51, -0.1], title: "Marker 2" },
  ];

  return (
    <MapContainer center={position} zoom={13} style={{ height: '500px', width: '100%' }}>
      <TileLayer
        url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
        attribution='&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
      />
      {markers.map((marker, index) => (
        <Marker key={index} position={marker.position}>
          <Popup>{marker.title}</Popup>
        </Marker>
      ))}
    </MapContainer>
  );
};

export default MapComponent;

Displaying GeoJSON Data

You can visualize GeoJSON data directly on your Leaflet map. Create a sample GeoJSON object in the MapComponent.js:

import React from 'react';
import { MapContainer, TileLayer, Marker, Popup, GeoJSON } from 'react-leaflet';
import 'leaflet/dist/leaflet.css';
import L from 'leaflet';

delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
  iconRetinaUrl: 'https://unpkg.com/leaflet/dist/images/marker-icon-2x.png',
  iconUrl: 'https://unpkg.com/leaflet/dist/images/marker-icon.png',
  shadowUrl: 'https://unpkg.com/leaflet/dist/images/marker-shadow.png',
});

const geoJsonData = {
  type: "FeatureCollection",
  features: [
    {
      type: "Feature",
      properties: { name: "My Area" },
      geometry: {
        type: "Polygon",
        coordinates: [
          [
            [-0.1, 51.51],
            [-0.09, 51.52],
            [-0.08, 51.51],
            [-0.1, 51.51]
          ]
        ]
      }
    }
  ]
};

const MapComponent = () => {
  const position = [51.505, -0.09];
  const markers = [
    { position: [51.505, -0.09], title: "Marker 1" },
    { position: [51.51, -0.1], title: "Marker 2" },
  ];

  return (
    <MapContainer center={position} zoom={13} style={{ height: '500px', width: '100%' }}>
      <TileLayer
        url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
        attribution='&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
      />
      {markers.map((marker, index) => (
        <Marker key={index} position={marker.position}>
          <Popup>{marker.title}</Popup>
        </Marker>
      ))}
      <GeoJSON data={geoJsonData} style={{ color: 'blue', weight: 2 }} />
    </MapContainer>
  );
};

export default MapComponent;

Conclusion

Integrating Leaflet with React allows you to build interactive maps effortlessly. With markers and GeoJSON capabilities, your application can display dynamic geographical information. Experiment with different datasets to create engaging map visualizations that will impress your users!

Now, you have a solid foundation to explore further. Happy mapping!








Open-source Apps

9,500+

Medical Apps

500+

Lists

450+

Dev. Resources

900+

Read more