Skip to content

leaflet-locatecontrol 定位

使用 leaflet 、leaflet-locatecontrol、vue 展示用户当前的定位。

这个控件可以让用户点击后在地图上展示出自己当前所在的位置,它依赖 leaflet 的 locate 方法。

示例图片

猛击查看 leaflet 官方文档

示例

安装依赖

leaflet-locatecontrol Github 仓库

shell
pnpm i leaflet.locatecontrol

# ts 项目需要安装类型文件
pnpm install @types/leaflet.locatecontrol

代码实现

vue
<script setup>
import { ref, defineAsyncComponent } from 'vue';
import L from "leaflet";
import "leaflet.locatecontrol/dist/L.Control.Locate.min.css";
import { LocateControl } from "leaflet.locatecontrol";

const InitMap = defineAsyncComponent(() =>
  import('../../components/InitMapTianditu.vue')
);

const mapObj = ref();

const mapLoad = (map) => {
  mapObj.value = map;
  new LocateControl().addTo(map);
};
</script>

<template>
  <init-map @map-load="mapLoad"></init-map>
</template>

<style scoped></style>
vue
<script setup>
import { onMounted, onUnmounted, ref } from 'vue';
import L from 'leaflet';

const props = defineProps({
  center: {
    type: Array,
    default: [32.0237855, 118.8075675]
  }
})

const emit = defineEmits(['mapLoad']);

const mapRef = ref();

const initMap = () => {
  const map = L.map(mapRef.value, {
    center: props.center,
    zoom: 11,
    minZoom: 1,
    maxZoom: 18
  });

  const mapType = 'vec';
  L.tileLayer(
    'https://t{s}.tianditu.gov.cn/' +
      mapType +
      '_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=' +
      mapType +
      '&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=b72aa81ac2b3cae941d1eb213499e15e',
    {
      subdomains: ['0', '1', '2', '3', '4', '5', '6', '7'],
      attribution:
        '&copy; <a href="http://lbs.tianditu.gov.cn/home.html">天地图 GS(2022)3124号 - 甲测资字1100471</a>'
    }
  ).addTo(map);

  const mapLabelType = 'cva';
  L.tileLayer(
    'https://t{s}.tianditu.gov.cn/' +
      mapLabelType +
      '_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=' +
      mapLabelType +
      '&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=b72aa81ac2b3cae941d1eb213499e15e',
    {
      subdomains: ['0', '1', '2', '3', '4', '5', '6', '7']
    }
  ).addTo(map);

  // 地图初始化完成发送事件
  emit('mapLoad', map);

  return map;
};

const mapObj = ref();

// 在 onMounted 中初始化地图
onMounted(() => {
  mapObj.value = initMap();
});

const removeMap = () => {
  if (mapObj.value) {
    mapObj.value.remove();
  }
};

// 在组件卸载时删除地图
onUnmounted(() => {
  removeMap();
});
</script>

<template>
  <div ref="mapRef" class="map"></div>
</template>

<style scoped>
.map {
  height: 40vh;
  z-index: 0;
}
</style>

options

以下内容来自 AI 翻译可能存在错误,仅供参考 访问 Github 仓库查看最新配置

选项类型描述默认值
positionstring控件的位置'topleft'
layerILayer用户位置应该绘制的图层新图层
setViewboolean 或 string设置地图视图(缩放和平移)到用户位置的更新方式。选项有 'false'、'once'、'always'、'untilPan' 或 'untilPanOrZoom''untilPanOrZoom'
flyToboolean平滑地平移和缩放到标记的位置。仅适用于 Leaflet 1.0+false
keepCurrentZoomLevelboolean设置视图时仅进行平移false
initialZoomLevelfalse 或 integer点击图标激活插件后,即使 keepCurrentZoomLevel 为 true,也会缩放到选定的缩放级别。设置为 false 可禁用此功能false
clickBehaviorobject用户点击控件时的行为。包含三个选项:inView、inViewNotFollowing 和 outOfView。可能的值是 'stop' 和 'setView',或要继承的行为名称{inView: 'stop', outOfView: 'setView', inViewNotFollowing: 'inView'}
returnToPrevBoundsboolean如果设置,在定位到用户位置前保存地图边界。当控件禁用时,将视图恢复到之前保存的边界false
cacheLocationboolean用户停用控件后保持位置缓存。如果设为 false,用户需要等待定位 API 返回新位置才能再次看到他们的位置true
showCompassboolean在位置标记上显示指南针方向true
drawCircleboolean如果设置,将绘制显示位置精度的圆圈true
drawMarkerboolean如果设置,将在用户位置绘制标记true
markerClassclass用于创建标记的类LocationMarker
compassClassclass用于创建标记的类CompassMarker
circleStylePath options精度圆圈的样式属性见代码
markerStylePath options内部标记的样式属性。仅当标记类支持 setStyle 时有效见代码
compassStylePath options三角形指南针标记的样式属性。仅当标记类支持 setStyle 时有效见代码
followCircleStylePath options跟随时精度圆圈的样式变化。仅需提供更改部分{}
followMarkerStylePath options跟随时内部标记的样式变化。仅需提供更改部分{}
followCompassStylePath options跟随时指南针标记的样式变化。仅需提供更改部分{}
iconstring图标的 CSS 类'leaflet-control-locate-location-arrow'
iconLoadingstring加载时图标的 CSS 类'leaflet-control-locate-spinner'
iconElementTagstring用于创建图标的元素'span'
circlePaddingarray精度圆圈周围的内边距[0, 0]
createButtonCallbackfunction可用于重写按钮创建行为的回调函数见代码
getLocationBoundsfunction可用于重写视口跟踪行为的回调函数见代码
onLocationErrorfunction当用户位置在地图设定边界之外时调用的事件见代码
metricboolean使用公制单位true
onLocationOutsideMapBoundsfunction当用户位置在地图设定边界之外时调用。用户位置改变时重复调用见代码
showPopupboolean用户点击内部标记时显示弹出窗口true
stringsobject控件中使用的字符串。选项包括 title、text、metersUnit、feetUnit、popup 和 outsideMapBoundsMsg见代码
strings.popupstring 或 function显示为弹出窗口的字符串。可包含占位符 {distance} 和 {unit}。如果此选项指定为函数,将使用单个参数 {distance, unit} 执行并期望返回字符串见代码
locateOptionsLocate options传递给 leaflet 定位方法的默认选项见代码

贡献者

Released under the MIT License.