我已经做了一个非常简单的React / Leaflet演示,但是标记图标根本没有显示。完整运行的代码是here。
下面是我的componentDidMount
方法中的内容:
componentDidMount() {
this.map = L.map("map-id", {
center: [37.98, 23.72],
zoom: 12,
zoomControl: true
});
const mapboxAccessToken =
"pk.eyJ1IjoibXBlcmRpa2VhcyIsImEiOiJjazZpMjZjMW4wOXJzM2ttc2hrcTJrNG9nIn0.naHhlYnc4czWUjX0-icY7Q";
L.tileLayer(
"https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}",
{
attribution:
'Map data © <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
maxZoom: 25,
id: "mapbox/streets-v11",
accessToken: mapboxAccessToken
}
).addTo(this.map);
L.marker([37.98, 23.72])
.addTo(this.map)
.bindPopup("a marker")
.openPopup();
}
基本上,弹出窗口是可见的,但标记图标本身是不可见的。也就是说,下面是我看到的:
7条答案
按热度按时间cxfofazt1#
我用的是React传单。我是这么做的。
然后,在MapContainer中:
wpx232ag2#
尝试添加图标:
也许您对默认的配置有一些问题:https://leafletjs.com/reference-1.6.0.html#icon-default
rt4zxlrg3#
以下是最后对我起作用的方法(我在webpack上):
efzxgjgh4#
仅供参考,这是由于webpack试图将Leaflet CSS中指定的标记图标图像文件作为静态资产包含在不同文件夹中,并可能对文件进行重命名(例如,用于指纹);所有这些都干扰了Leaflet算法,该算法仅将该图像用作指向其实际CSS图像文件夹的指针,因此,在Webpack构建步骤之后,该文件夹可能完全丢失。
请参阅https://github.com/Leaflet/Leaflet/issues/4968中的详细信息
我专门做了一个传单插件来解决这个问题:https://github.com/ghybs/leaflet-defaulticon-compatibility
从CSS中检索所有Leaflet默认图标选项,特别是所有图标图像URL,以提高与修改CSS中URL的捆绑包和框架的兼容性。
不幸的是,它在CodeSandbox(甚至StackBlitz)中仍然不起作用,因为后者不处理这些静态资产。只要尝试使用Leaflet Layers控件就可以看到它,该控件使用了一个非常简单的CSS背景图像,这在CodeSandbox中也是缺失的。
但是在你自己的环境中一切都应该很好。
CodeSandbox中的演示:https://codesandbox.io/s/elegant-swirles-yzsql
在StackBlitz中(相同的静态资产问题):https://stackblitz.com/edit/react-vqgtxd?file=index.js
mnowg1ta5#
包括在index.js文件中。
6xfqseft6#
我猜一个简单的方法就是改变图像路径:
我使用react,所以我将文件夹
/node_modules/leaflet/dist/images
复制到/public
。6kkfgxo07#
这个解决方案对我很有效!