【发布时间】:2020-08-13 17:56:28
【问题描述】:
我有一个使用 Leaflet 的相当基本的地图,有两个可以使用标准图层选择控件选择的基础图层。每一层都有自己的属性字符串,显示在右下角的通常位置。这是我正在使用的代码的简化版本,作为演示:
<script>
var zoomLevel = 6;
var lat = 54.00366;
var lon = -2.547855;
var OSM = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: 'this is the string for OSM, and should only show when OSM is selected'
});
var Esri_WorldImagery = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', {
maxZoom: 18,
attribution: 'this is the string for Esri, and should only show when Esri is selected'
});
var baseMaps = {
"Satellite": Esri_WorldImagery,
"Open StreetMap": OSM
};
var map = L.map('map',{
dragging: !L.Browser.mobile,
center: [lat, lon],
zoom: 6,
layers: [Esri_WorldImagery,OSM]
});
L.control.layers(baseMaps).addTo(map);
</script>
我遇到的问题是,当地图首次加载时,两个属性字符串被连接起来并显示为一个字符串。一旦实际选择了任一层,显示的唯一属性字符串就是适用于该层的属性字符串。
这是我服务器上测试地图的副本:
https://markgoodge.com/demo/maptest.html
如果您打开该页面,您将看到属性字符串最初显示为
“这是 Esri 的字符串,应该只在选择 Esri 时显示,这是 OSM 的字符串,应该只在选择 OSM 时显示”
这是不正确的 - 它应该只在初始加载时显示 OSM 属性,因为默认底图是 OSM。
选择任一底图,字符串将成为该图层的正确字符串。
如何阻止它这样做?如何使初始属性字符串成为默认图层的正确属性?
(这很重要的原因是,当只有两个基本地图时,它可能不是什么大问题,但是当有多个时 - 我有一个站点确实使用了几个 - 然后是初始的串联属性字符串跑了好几行,在地图底部占据了太多空间)。
编辑:我刚刚发现了两件事。首先,如果字符串相同,它们不会被连接 - 它只显示一次。其次,当它们连接时,在它们之间插入一个逗号。因此,这显然是 Leaflet 的故意行为,而不是错误或陷阱。但是,如果是这样,肯定有一个设置来覆盖它,因为在很多情况下这种行为是不合适的。我在文档中遗漏了什么吗?
【问题讨论】:
标签: leaflet