在 Leaflet 中导入多个自定义标记
Multiple custom markers import in Leaflet
我使用 Leaflet 在地图上显示一些点。但是,我想根据某些参数放置不同的标记。
问题是:是否可以在 React 中导入我的自定义标记(.png 文件)的整个目录?
目前看起来像这样:
import icon from 'leaflet/dist/images/marker-icon.png';
然后
render() {
const position = [54.40, 18.60];
let DefaultIcon = L.icon({
iconUrl: icon,
shadowUrl: iconShadow,
iconSize: [24, 36],
iconAnchor: [12, 36],
popupAnchor: [0, -25]
});
所以对于一个标记,在顶部有一个导入。
假设我想导入几个图标,那么我是否必须在我的 React 组件顶部分别导入每个 .png
文件?或者有没有办法只导入一个目录,然后只放置适当图标文件的路径?
为此,可以使用名为 dynamic require 的 webpack 功能,例如 expression:
const icon = L.icon({
iconUrl: require(`../public/custom-icons/${item.iconName}`),
});
图标图像从 /public/custom-icons/
文件夹动态加载并包含在包中
例子
const MapExample = () => {
const data = [
{ position: { lat: -33.8478796, lng: 150.7918932 }, title: "Sydney", "iconName" : "leaf-red.png" },
{ position: { lat: -31.954654, lng: 115.8399823 }, title: "Perth ", "iconName" : "leaf-green.png" }
];
return (
<Map center={{ lat: -24.9929159, lng: 115.2297986 }} zoom={4}>
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
/>
{data.map((item, idx) => {
const icon = L.icon({
iconUrl: require(`../public/custom-icons/${item.iconName}`),
iconSize: [24, 36],
iconAnchor: [12, 36],
popupAnchor: [0, -25]
});
return (
<Marker key={idx} icon={icon} position={item.position}>
<Popup>{item.title}</Popup>
</Marker>
);
})}
</Map>
);
};
这里是a demo
你可以做这样的事情:
if ( feature.properties.name === "NONE") {
var shadow = "Project/data/images/NONE.png";
} else {
var shadow = "Project/data/images/shadow.png";
}
var flag = L.icon({
shadowUrl: shadow,
iconUrl: `Project/data/images/${feature.properties.name }.png`,
我使用 Leaflet 在地图上显示一些点。但是,我想根据某些参数放置不同的标记。 问题是:是否可以在 React 中导入我的自定义标记(.png 文件)的整个目录? 目前看起来像这样:
import icon from 'leaflet/dist/images/marker-icon.png';
然后
render() {
const position = [54.40, 18.60];
let DefaultIcon = L.icon({
iconUrl: icon,
shadowUrl: iconShadow,
iconSize: [24, 36],
iconAnchor: [12, 36],
popupAnchor: [0, -25]
});
所以对于一个标记,在顶部有一个导入。
假设我想导入几个图标,那么我是否必须在我的 React 组件顶部分别导入每个 .png
文件?或者有没有办法只导入一个目录,然后只放置适当图标文件的路径?
为此,可以使用名为 dynamic require 的 webpack 功能,例如 expression:
const icon = L.icon({
iconUrl: require(`../public/custom-icons/${item.iconName}`),
});
图标图像从 /public/custom-icons/
文件夹动态加载并包含在包中
例子
const MapExample = () => {
const data = [
{ position: { lat: -33.8478796, lng: 150.7918932 }, title: "Sydney", "iconName" : "leaf-red.png" },
{ position: { lat: -31.954654, lng: 115.8399823 }, title: "Perth ", "iconName" : "leaf-green.png" }
];
return (
<Map center={{ lat: -24.9929159, lng: 115.2297986 }} zoom={4}>
<TileLayer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
attribution='© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
/>
{data.map((item, idx) => {
const icon = L.icon({
iconUrl: require(`../public/custom-icons/${item.iconName}`),
iconSize: [24, 36],
iconAnchor: [12, 36],
popupAnchor: [0, -25]
});
return (
<Marker key={idx} icon={icon} position={item.position}>
<Popup>{item.title}</Popup>
</Marker>
);
})}
</Map>
);
};
这里是a demo
你可以做这样的事情:
if ( feature.properties.name === "NONE") {
var shadow = "Project/data/images/NONE.png";
} else {
var shadow = "Project/data/images/shadow.png";
}
var flag = L.icon({
shadowUrl: shadow,
iconUrl: `Project/data/images/${feature.properties.name }.png`,