javascript - Mapbox 更改标记位置和颜色
问题描述
以下代码显示了一个标记和一个弹出窗口,当我点击地图时,它会显示纬度和经度。
我希望标记将颜色从蓝色变为红色,并且我希望弹出窗口位于标记上方,这样它就不会覆盖标记。我怎样才能做到这一点?谢谢你。
<!DOCTYPE html>
<html>
<head>
<title>Quick Start - Leaflet</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" />
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.3.1/dist/leaflet.css" integrity="sha512-Rksm5RenBEKSKFjgI3a41vrjkw4EVPlJ3+OiI65vTjIdo9brlAacEuKOiQ5OFh7cOI1bkDwLqdLw3Zg0cRJAAQ==" crossorigin=""/>
<script src="https://unpkg.com/leaflet@1.3.1/dist/leaflet.js" integrity="sha512-/Nsx9X4HebavoBvEBuyp3I7od5tA0UzAxs+j83KgC8PU0kgB4XiK4Lfe4y4cgBtaRJQEIFCW+oC506aPT2L1zw==" crossorigin=""></script>
</head>
<body>
<div id="mapid" style="width: 600px; height: 400px;"></div>
<script>
var mymap = L.map('mapid').setView([51.505, -0.09], 13);
L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', {
maxZoom: 18,
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>',
id: 'mapbox.streets'
}).addTo(mymap);
L.marker([40.7127837, -74.0059413]).addTo(mymap)
.bindPopup("<b>Hello world!</b><br />I am a popup.").openPopup();
var popup = L.popup();
function onMapClick(e) {
L.marker([e.latlng.lat, e.latlng.lng]).addTo(mymap)
popup
.setLatLng(e.latlng)
.setContent("You clicked the map at " + e.latlng.toString())
.openOn(mymap);
}
mymap.on('click', onMapClick);
</script>
</body>
</html>
解决方案
标记使用图标图像来显示,因此您需要创建自己的自定义图标,iconUrl 指向您要用于标记的图像,然后告诉标记在渲染时使用您的自定义图标。您还可以在图标设置中指定 popupAnchor 以将弹出窗口从图标上移开
示例(传单文档)
var myIcon = L.icon({
iconUrl: 'my-icon.png',
iconSize: [38, 95],
iconAnchor: [22, 94],
popupAnchor: [-3, -76],
shadowUrl: 'my-icon-shadow.png',
shadowSize: [68, 95],
shadowAnchor: [22, 94]
});
L.marker([50.505, 30.57], {icon: myIcon}).addTo(map);
推荐阅读
- javascript - 移动浏览器/视图中的按钮“点击”动画滞后
- python - 如何为两个分类变量的每个变体打印直方图
- python - 如何使用带有 tkinter 的 tk.filedialog 保存 csv 文件?
- subdomain - 为什么从导航栏单击论坛链接时子域重定向会导致错误消息?
- python - 烧瓶中的测试和开发路线/数据库
- python - 获取错误即时消息 Django“异常值:名称'order_id'未定义”查询以列出子记录
- sql - 无法将字符串转换为时间戳
- node.js - 文件上传失败
- javascript - 为什么 React Bootstrap Card 没有在浏览器中显示?尽管使用了组件,但页面为空
- css - gtk_style_context_get_property 的 GTK4 等价物是什么?