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マーカーアイコンをクリックしてズーム
import {
MapContainer,
TileLayer,
useMap,
Marker,
} from "react-leaflet";
import "leaflet/dist/leaflet.css";
import L from "leaflet";
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 ZoomMarker = () => {
const map = useMap();
const zoom = (e) => {
map.setView([e.latlng.lat, e.latlng.lng], 12);
};
return (
<Marker
position={center}
eventHandlers={{
click: zoom,
}}
/>
);
};
function App() {
return (
<MapContainer center={center} zoom={10} zoomControl={true} id="map">
<TileLayer
attribution='© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
<ZoomMarker />
</MapContainer>22
);
}
export default App;
4, 5: useMap Marker をインポートします。
22 ~ 37: クリックすると、マーカーの位置に移動し、ズームするマーカーを出力する<ZoomMarker /> コンポーネントを作成します。
32 ~ 34: eventhandlers を使用して、click 時に、26: setView メソッドの第一引数の位置へ移動、第二引数のズームレベルへズームしています。
46: <ZoomMarker /> コンポーネントを配置します。
以上マップ上のマーカーアイコンをクリックしてズームさせる方法でした。