Skip to content

UI 图层

Marker 标记

  • 作用:在地图上标记特定位置点
  • 特点
    • 支持自定义图标(图片/SVG/HTML 元素)
    • 可拖拽交互
    • 可绑定弹出窗口(Popup)和工具提示(Tooltip)
  • 坐标定位:通过经纬度(LatLng)确定位置

L.marker(<LatLng> latlng, <Marker options> options?),根据一个地理点和一个可选的选项对象实例化一个 Marker 对象。

js
// 创建默认图标的标记
const marker = L.marker([39.904, 116.405]).addTo(map);

// 创建并绑定弹出窗口
L.marker([39.904, 116.405]).addTo(map).bindPopup("伦敦塔桥");

配置选项(Options)

选项名类型默认值说明
iconL.Icon默认蓝色图标设置自定义图标
draggableBooleanfalse是否允许拖拽标记
autoPanBooleanfalse当拖动此标记靠近边缘时,是否平移地图
autoPanPaddingPointPoint(50, 50)地图边缘开始平移的距离(以像素为单位,向左/右和向上/向下)
autoPanSpeedNumber10地图应平移的像素数
keyboardBooleantrue是否可以通过键盘聚焦并按回车键点击标记
titleString''浏览器提示文本(鼠标悬停时显示)
altString''图标 alt 属性(无障碍访问)
zIndexOffsetNumber0调整标记的 z-index(用于控制重叠顺序)
opacityNumber1.0标记透明度(0-1)
riseOnHoverBooleanfalse鼠标悬停时标记是否上浮(提升 z-index)
riseOffsetNumber250用于 riseOnHover 功能的 z-index 偏移量
paneString'markerPane'指定标记所在的 Map Pane
shadowPaneString'shadowPane'指定标记阴影所在的 Map Pane
bubblingMouseEventsBooleanfalse鼠标事件是否冒泡到地图
autoPanOnFocusBooleantrue点击标记时是否自动平移地图

常用方法

方法名返回值说明
addTo(map)this将标记添加到地图
remove()this从地图中移除标记
getLatLng()LatLng获取当前标记位置
setLatLng(latlng)this设置标记位置
getIcon()Icon获取当前标记图标
setIcon(icon)this设置标记图标
setZIndexOffset(offset)this设置 z-index 偏移量
setOpacity(opacity)this设置透明度
bindPopup(content, options)this绑定弹出窗口(点击标记时显示)
toGeoJSON()Object返回标记的 GeoJSON 表示

事件系统

Marker 触发的事件可通过on()方法监听:

事件类型触发条件
dragstart开始拖拽标记
drag拖拽过程中
dragend拖拽结束
move标记位置改变
movestart标记开始移动
moveend标记结束移动
js
marker.on("move", (e) => {
  console.log(e.target.getLatLng());
});

DivOverlay

  • 作用:在地图上显示一个可交互的、包含丰富 HTML 内容的弹出窗口,通常在用户点击地图上的某个要素(如 Marker)时显示。

  • 特点

    • 提供定位、内容设置和开关的通用机制。
    • 支持自定义 CSS 类和所属的地图 Pane。
    • 处理与地图的交互,如自动平移。
  • 坐标定位DivOverlay  通过其子类(如  Popup  和  Tooltip)绑定到特定的地理坐标或图层。

配置选项(Options)

选项名类型默认值说明
offsetPointPoint(0, 0)覆盖物相对于其锚点(通常是经纬度)的像素偏移量。
classNameString''要添加到覆盖物容器的自定义 CSS 类名。
paneString'undefined'指定覆盖物所在的 Map Pane(例如  'popupPane'  或  'tooltipPane')。
interactiveBooleanfalse如果为真,弹窗/提示框将监听鼠标事件。
contentString/HTMLElement''弹窗/提示框的内容(HTML 字符串或 DOM 元素)。

常用方法

方法名返回值说明
openOn(map)this将覆盖层添加到地图上。
close()this关闭覆盖物。
toggle()this切换覆盖物的可见性。
setLatLng(latlng)this设置覆盖物的位置。
getLatLng()LatLng获取覆盖物当前的位置。
setContent(content)this设置覆盖物的内容(HTML 字符串或 DOM 元素)。
getContent()String获取覆盖物当前的内容。
update()this更新覆盖物的位置和内容。
isOpen()Boolean获取覆盖物当前的可见性。
bringToFront()this将覆盖物提升到所有其他图层的顶部。
bringToBack()this将覆盖物降低到所有其他图层的底部。

事件系统

事件类型触发条件
contentupdate覆盖物内容更新

  • 作用Popup  用于在地图上显示一个可交互的、包含丰富 HTML 内容的弹出窗口,通常在用户点击地图上的某个要素(如 Marker)时显示。

  • 特点

    • 支持显示任意 HTML 内容。
    • 可绑定到任何  Layer  对象(如  MarkerCirclePolygon  等)。
    • 通常带有关闭按钮,并支持点击地图外部自动关闭。
    • 可配置最大/最小宽度和高度,以及自动平移地图以确保可见。
  • 坐标定位: L.popup(<Popup options> options?, <Layer> source?):根据一个可选的选项对象和一个可选的源图层实例化一个 Popup 对象。 layer.bindPopup(content, options?):将 Popup 绑定到指定的图层,当图层被点击时显示。

js
// 创建一个独立的弹出窗口并打开
const popup = L.popup()
  .setLatLng([39.904, 116.405])
  .setContent("我是一个独立的弹出窗口")
  .openOn(map);
// or
var popup = L.popup([39.904, 116.405], {
  content: "<p>Hello world!<br />This is a nice popup.</p>",
}).openOn(map);

// 将弹出窗口绑定到标记
L.marker([39.904, 116.405])
  .addTo(map)
  .bindPopup("<b>你好!</b><br />我是一个绑定到标记的弹出窗口。")
  .openPopup();

配置选项(Options)

选项名类型默认值说明
paneString'popupPane'Map pane 弹出窗口将被添加的位置
offsetPointPoint(0, 7)弹出窗口位置的偏移量
maxWidthNumber300弹出窗口的最大宽度(像素)。
minWidthNumber50弹出窗口的最小宽度(像素)。
maxHeightNumbernull弹出窗口的最大高度(像素),如果内容超出则显示滚动条。
autoPanBooleantrue当弹出窗口打开时,是否自动平移地图以使其完全可见。
autoPanPaddingTopLeftPointnull自动平移时,弹出窗口左上角与地图视图边缘的最小距离。
autoPanPaddingBottomRightPointnull自动平移时,弹出窗口右下角与地图视图边缘的最小距离。
autoPanPaddingPointPoint(5, 5)相当于将左上角和右下角的自动平移填充设置为相同的值
keepInViewBooleanfalse当地图缩放时,弹出窗口是否保持在地图视图内。
closeButtonBooleantrue是否显示关闭按钮。
autoCloseBooleantrue点击地图关闭弹出窗口。
closeOnEscapeKeyBooleantrue是否允许通过按下  Esc  键关闭弹出窗口。
closeOnClickBoolean-是否允许通过点击地图关闭弹出窗口。
classNameString''自定义类名,用于设置弹出窗口的样式。

常用方法

事件类型触发条件
openOnmap.openPopup(popup) 的替代方案。将弹窗添加到地图上并关闭上一个弹窗
js
marker.on("popupopen", (e) => {
  console.log("弹出窗口已打开,内容是:", e.popup.getContent());
});
marker.on("popupclose", (e) => {
  console.log("弹出窗口已关闭");
});

Tooltip 工具提示

  • 作用Tooltip  用于在地图上显示一个简单的文本标签,通常在用户鼠标悬停或聚焦在某个要素上时显示。它通常是非交互式的,用于提供额外的信息。

  • 特点

    • 显示纯文本或简单的 HTML 内容。
    • 可绑定到任何  Layer  对象。
    • 支持不同的显示方向(上、下、左、右、自动)。
    • 可配置为永久显示或仅在悬停时显示。
    • 可配置为“粘性”,即跟随鼠标移动。
  • 坐标定位: L.tooltip(<Tooltip options> options?, <Layer> source?):根据一个可选的选项对象和一个可选的源图层实例化一个 Tooltip 对象。 layer.bindTooltip(content, options?):将 Tooltip 绑定到指定的图层,当鼠标悬停时显示。

js
// 创建一个独立的工具提示并打开
const tooltip = L.tooltip()
  .setLatLng([39.904, 116.405])
  .setContent("我是一个独立的工具提示")
  .openOn(map);
// or
var tooltip = L.tooltip([39.904, 116.405], {
  content: "Hello world!<br />This is a nice tooltip.",
}).addTo(map);

// 将工具提示绑定到标记
L.marker([39.904, 116.405])
  .addTo(map)
  .bindTooltip("这是一个标记的提示", { permanent: true, direction: "right" })
  .openTooltip();

配置选项(Options)

选项名类型默认值说明
paneString'tooltipPane'指定工具提示所在的 Map Pane。
directionString'auto'工具提示的显示方向:'right''left''top''bottom''center''auto'
permanentBooleanfalse如果为  true,工具提示将永久显示,而不是仅在悬停时显示。
stickyBooleanfalse如果为  true,工具提示将跟随鼠标指针移动。
opacityNumber0.9工具提示的透明度(0-1)。
offsetPointPoint(0, 0)工具提示相对于其锚点的像素偏移量。
js
marker.on("tooltipopen", (e) => {
  console.log("工具提示已打开,内容是:", e.tooltip.getContent());
});
marker.on("tooltipclose", (e) => {
  console.log("工具提示已关闭");
});