React Leaflet は、React.js フレームワークと Leaflet ライブラリを組み合わせた地図コンポーネントの作成を容易にするためのライブラリです。この記事では、マップ上にマーカーの追加、デフォルトのマーカーの色を変更、マーカーに svg ファイルを使用する方法を確認します。
パッケージのインストールとフォルダ構成
アプリを作成します。
npx create-react-app
パッケージをインストールします、leaflet と react-leaflet を使用します。
npm install leaflet react-leaflet
ファイル構成
src //
|-- index.js
|-- index.css
|-- App.css
|-- App.js
`-- conponents //
|-- markers.js
`-- icons //
`-- location.svg
マーカーを表示と見た目をカスタマイズする
React Leaflet マップ表示とレイヤーコントロール
2023年06月06日
leaflet最終的にこんな感じになります。
import {
MapContainer,
TileLayer,
} from "react-leaflet";
import "leaflet/dist/leaflet.css";
import "./App.css";
import Markers from './components/markers'
const center = [35.3628, 138.7307];
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"
/>
<Markers />
</MapContainer>
);
}
export default App;
今回は、マーカーを別のコンポーネントに分けて作成していきます。
7, 18: <Markers /> コンポーネントをインポートして表示させます。
Markers コンポーネントを作成する
import { Marker } from "react-leaflet";
import L from "leaflet";
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 colorMarker = (color) => {
return L.icon({
iconUrl: icon,
shadowUrl: iconShadow,
className: `default-marker ${color}`,
});
};
const customMarker = (type) => {
const icon = require(`./icons/${type}.svg`);
return L.icon({
iconUrl: icon,
iconSize: [35, 35],
className: "marker",
});
};
function Markers() {
const center = [35.3628, 138.7307];
const point1 = [35.274774075037776, 138.6131286621094];
const point2 = [35.292710387701696, 138.9097595214844];
return (
<>
<Marker position={point1} icon={colorMarker("green")} />
<Marker position={point2} icon={colorMarker("red")} />
<Marker position={center} icon={customMarker("location")} />
</>
);
}
export default Markers;
マーカーを表示とデフォルトの見た目
36: react leaflet では、<Marker position={座標} /> の形でマーカーを表示させることができます。
3 ~ 11: デフォルトの見た目を指定しています。デフォルトでは青いマーカーが使用されています。
デフォルトのマーカーの色を変更する
13 ~ 19: colorMarker 、 クラスを付与して後述のcssファイルでマーカーの色と位置を変更しています。
36, 37: 変更したい色を渡して colorMarker を呼び出しています。
マーカーにsvg を使う
21 ~ 28: customMarker、iconディレクトリ以下の svg ファイルを読み込んでマーカーを作成します。
38: 使いたい svg ファイルの名前を渡して customMarker を呼び出しています。
最後に、css ファイルで見た目を作っていきます。
.red {
filter: hue-rotate(150deg)
}
.deep-green {
filter: hue-rotate(250deg)
}
.green {
filter: hue-rotate(300deg)
}
.sky {
filter: hue-rotate(335deg)
}
.purple {
filter: hue-rotate(50deg)
}
.pink {
filter: hue-rotate(100deg)
}
.brown {
filter: hue-rotate(185deg)
}
.default-marker {
/* マーカーの中心を調整 */
margin-left: -12.5px !important;
margin-top: -41px !important;
}
.marker {
/* マーカーの中心を調整 */
margin-top: -35px !important;
}
以上マーカーの見た目をカスタマイズしてきました。