Reactで地図を入れてみた(OpenStreetMap/Leaflet)

2023.05.09 08:00
2023.05.09 15:13
Reactで地図を入れてみた(OpenStreetMap/Leaflet)

Reactで地図を表示したいと思ってGoogleMapをしらべたら結構制限があり、どうしようかなと思っていたところ、OpenStreetMapというオープンソースの地図がありましたので、それを使って地図を入れてみました。

OpenStreetMapを使うには「Leaflet」というライブラリを使うと良いようですので、インストールしていきます。

yarn add leaflet react-leaflet
yarn add -D @types/leaflet

インストールができたら、素材を個別に配置します。
デフォルトだと画像がどうしても表示できなかったので、
画像が入った「leaflet」ディレクトリを「node_modules > leaflet > dist > images」から「src/assets/」にコピーして対応しました。

leaflet
 |- layers-2x.png
 |- layers.png
 |- maker-icon-2x.png
 |- maker-icon.png
 |- maker-icon.png
 |- maker-shadow.png

では次にコードを書いていきます。

import { MapContainer, Marker, TileLayer } from "react-leaflet";
import "leaflet/dist/leaflet.css";
import L from "leaflet";
import icon from "assets/images/leaflet/marker-icon.png";
import iconShadow from "assets/images/leaflet/marker-shadow.png";

export const Hoge: React.FC = () => {

  // 地図のデフォルト
  const map_center_lat = 35.681393038131624
  const map_center_lng = 139.76712479650303

  //マーカーのデフォルトアイコンを定義
  const DefaultIcon = L.icon({
    iconUrl: icon,
    shadowUrl: iconShadow,
  });

  // 上記の定義をマーカーアイコンに反映
  L.Marker.prototype.options.icon = DefaultIcon;

 // マーカーを定義
  const LocationMarker = () => {
    return (
      <Marker
        position={{ lat: map_center_lat, lng: map_center_lng }}
      ></Marker>
    );
  };
  return (
    <>
      <MapContainer
        className=""
        center={{ lat: map_center_lat, lng: map_center_lng }}
        scrollWheelZoom={false}
        zoom={9}
      >
        <TileLayer
          attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
          url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
        />
        <LocationMarker />
      </MapContainer>
    </>
  );
};

こんな感じで表示できました!

今回は以上です!