React Leaflet は、React.js フレームワークと Leaflet ライブラリを組み合わせた地図コンポーネントの作成を容易にするためのライブラリです。この記事では、地図上にポップアップとツールチップを表示させる方法と、見た目をカスタマイズする方法を確認します。
パッケージのインストールとフォルダ構成
アプリを作成します。
npx create-react-app
パッケージをインストールします、leaflet と react-leaflet を使用します。
npm install leaflet react-leaflet
ファイル構成
src //
|-- index.js
|-- index.css
|-- App.css
`-- App.js
React Leaflet マップ表示とレイヤーコントロール
2023年06月06日
leafletマーカー上にポップアップとツールチップを表示
React Leaflet マーカーを表示と見た目をカスタマイズする方法
2023年06月09日
leafletimport {
MapContainer,
TileLayer,
Marker,
Popup,
Tooltip,
useMapEvent,
} from "react-leaflet";
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import "./App.css";
import icon from "leaflet/dist/images/marker-icon.png";
import iconShadow from "leaflet/dist/images/marker-shadow.png";
//defaultMarker
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
iconUrl: icon,
shadowUrl: iconShadow,
});
const center = [35.3628, 138.7307];
const point1 = [35.274774075037776, 138.6131286621094];
const point2 = [35.292710387701696, 138.9097595214844];
function App() {
return (
<MapContainer center={center} zoom={10} zoomControl={false} id="map">
<TileLayer
attribution='© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
<Marker position={point1}>
<Popup className="popup">
Hello <br /> World
</Popup>
</Marker>
<Marker position={point2}>
<Tooltip
direction="top"
className="tooltip"
offset={[-15, -15]}
permanent
opacity={1}
>
Hello World
</Tooltip>
</Marker>
</MapContainer>
);
}
export default App;
5, 34 ~ 36: Popoup コンポーネントを Marker コンポーネント内で表示することで、マーカーをクリック時にポップアップが表示されます。
6, 40 ~ 49: Tooltip コンポーネントを Marker コンポーネント内で表示することで、デフォルトではマーカーにホバー時にツールチップが表示されます。
41 ~ 46: props でオプションを変更することができます。
見た目を変更する
ポップアップとツールチップには以下のクラスが使用されており、プロパティを変更することで、見た目を変更することができます。
.leaflet-popup-tip {
background: rgb(211, 242, 254);
}
.leaflet-popup-content {
background: rgb(211, 242, 254);
}
.leaflet-tooltip {
background: rgb(211, 242, 254);
border: none;
}
/* .leaflet-tooltip-[directionの値] */
.leaflet-tooltip-top:before {
border-top-color: rgb(211, 242, 254);
}
地図上をクリックでポップアップ、ツールチップを追加する
地図上をクリックしてポップアップ、ツールチップを追加する方法。
import {
MapContainer,
TileLayer,
Marker,
Popup,
Tooltip,
useMapEvent,
} from "react-leaflet";
import L from "leaflet";
import "leaflet/dist/leaflet.css";
import "./App.css";
import icon from "leaflet/dist/images/marker-icon.png";
import iconShadow from "leaflet/dist/images/marker-shadow.png";
//defaultMarker
delete L.Icon.Default.prototype._getIconUrl;
L.Icon.Default.mergeOptions({
iconUrl: icon,
shadowUrl: iconShadow,
});
const center = [35.3628, 138.7307];
const point1 = [35.274774075037776, 138.6131286621094];
const point2 = [35.292710387701696, 138.9097595214844];
const Add = () => {
const map = useMapEvent("click", (location) => {
//ポップアップ
map.openPopup("<div>popup</div>", location.latlng);
// ツールチップ
// map.openTooltip("<p>toolTip</p>", location.latlng, { direction: "top" });
});
};
function App() {
return (
<MapContainer center={center} zoom={10} zoomControl={false} id="map">
<TileLayer
attribution='© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
<Marker position={point1}>
<Popup className="popup">
Hello <br /> World
</Popup>
</Marker>
<Marker position={point2}>
<Tooltip
direction="top"
className="tooltip"
offset={[-15, -15]}
permanent
opacity={1}
>
Hello World
</Tooltip>
</Marker>
<Add />
</MapContainer>
);
}
export default App;
7: useMapEvent をインポートします。
26 ~ 33: 地図上をクリックすると、ポップアップまたは、ツールチップが表示される、 Add コンポーネントを作成します。
40: Add コンポーネントを表示させます。
以上 React Leaflet を使ったポップアップとツールチップの使い方でした。