Skip to content

控制器管理

控制器是地图上的交互控件,用于辅助用户操作地图,如缩放、旋转、定位等。

addControl

添加控制器到地图。

javascript
/**
 * 添加控制器
 * @param {thmap.ControlTypes} type - 控制器类型
 * @param {thmap.ControlOptions} [options] - 控制器配置
 * @returns {ThMap} - 返回 this 以支持链式调用
 */
addControl(type, options)

参数说明

参数类型描述
typestring控制器类型
optionsthmap.ControlOptions可选,控制器的配置选项

支持的控制器类型

类型描述
scale比例尺控制器,显示地图比例尺
compass指南针控制器,显示和控制地图方向
attribution归属控制器,显示地图数据归属信息
miniMap小地图控制器,显示缩略图
fullscreen全屏控制器,切换地图全屏显示
navigation导航控制器,提供缩放和旋转控制
geolocate定位控制器,获取用户当前位置

ControlOptions 详细配置

不同类型的控制器有不同的配置选项,以下是各种控制器的配置:

MiniMapOptions

选项类型默认值必填描述
layerstring瓦片地址
widthstring控件的宽度(300px)
heightstring控件的高度(200px)
positionstring控件位置,'top-left','top-right','bottom-left','bottom-right'
boundsstring'parent'控件的显示边界,默认填parent
zoomLevelsnumber4鹰眼地图与当前地图的zoom差
lineColorstring'#f17c67'鹰眼控件边界范围的线颜色
lineWidthnumber2鹰眼控件边界范围的线宽
lineOpacitynumber1鹰眼控件边界范围的线透明度
fillColorstring'#eb3f2f'鹰眼控件边界范围的面颜色
fillOpacitynumber0.5鹰眼控件边界范围的面透明度

ScaleOptions

选项类型默认值必填描述
positionstring控制器位置
unitstring'metric'单位,可选值:'metric' (米/公里), 'imperial' (英尺/英里)
maxWidthnumber100比例尺最大宽度
选项类型默认值必填描述
positionstring控制器位置
showCompassbooleantrue是否显示指南针
showZoombooleantrue是否显示缩放按钮

CompassOptions

选项类型默认值必填描述
positionstring控制器位置
rotateAbleboolean是否可旋转
pitchAbleboolean是否可俯仰
classNamestring样式类名

GeolocateOptions

选项类型默认值必填描述
positionstring控制器位置
trackUserLocationbooleanfalse是否跟踪用户位置
showUserLocationbooleantrue是否显示用户位置
fitBoundsOptionsobject{}定位成功后调整地图视野的选项

FullscreenOptions

选项类型默认值必填描述
positionstring控制器位置

AttributionOptions

选项类型默认值必填描述
positionstring控制器位置

示例

javascript
// 添加导航控制器
map.addControl('navigation', {
  position: 'top-right',
  showCompass: true,
  showZoom: true
})

// 添加比例尺控制器
map.addControl('scale', {
  position: 'bottom-left',
  unit: 'metric',
  maxWidth: 150
})

// 添加定位控制器
map.addControl('geolocate', {
  position: 'top-left',
  trackUserLocation: true,
  fitBoundsOptions: {
    maxZoom: 16
  }
})

getControl

获取指定的控制器实例。

javascript
/**
 * 获取控制器
 * @param {thmap.ControlTypes} type - 控制器类型
 * @returns {thmap.Controls} - 控制器实例
 */
getControl(type)

参数说明

参数类型描述
typestring控制器类型

示例

javascript
const navControl = map.getControl('navigation')
// 禁用指南针
navControl.options.showCompass = false

removeControl

移除控制器。

javascript
/**
 * 移除控制器
 * @param {thmap.ControlTypes} [type] - 控制器类型,不提供则移除所有控制器
 * @returns {ThMap} - 返回 this 以支持链式调用
 */
removeControl(type)

参数说明

参数类型描述
typestring可选,控制器类型,不提供则移除所有控制器

示例

javascript
// 移除特定控制器
map.removeControl('navigation')

// 移除所有控制器
map.removeControl()

控制器操作示例

javascript
// 添加多个控制器
map
  .addControl('navigation', {
    position: 'top-right'
  })
  .addControl('scale', {
    position: 'bottom-left'
  })
  .addControl('compass', {
    position: 'top-left'
  })
  .addControl('fullscreen', {
    position: 'bottom-right'
  })

// 监听定位事件
const geolocateControl = map.getControl('geolocate')
geolocateControl.on('geolocate', (e) => {
  console.log('用户位置:', e.coords)
})

geolocateControl.on('error', (e) => {
  console.error('定位失败:', e.error)
})

常见问题

  1. 控制器不显示:检查控制器类型是否正确,确保 position 参数设置合理。

  2. 定位失败:确保浏览器有权限访问位置信息,检查网络连接。

  3. 控制器样式问题:可以通过自定义 CSS 调整控制器的外观。

  4. 多个控制器位置冲突:合理设置不同控制器的 position 参数,避免重叠。