给leaflet地图局部做拖拽限制

地图是先知道某市这个区域,超过这个区域的一律不让进行鼠标拖拽,因为还有缩放,这里也给进行了缩小处理,放大不做限制。

const [map, setMap] = useState<any>();
const TiledMapLayer = useMemo(() => tiledMapLayer(MapUrl), []);
const boundsHandler = debounce(() => {
    // 给地图区域做限制的上下左右四部分
    const bounds = L.latLngBounds([
      [22.285236, 113.464256], // 下
      [22.553914, 113.331012], // 上
      [22.420586, 113.331012], // 左
      [22.451933, 113.27746], // 右
    ]);
    map.setMaxBounds(bounds);
    map.panInsideBounds(bounds, { animate: false });
}, 1000);
useEffect(() => {
    if (map) {
     // 注:drag是拖动事件,这里也可以有move,click等
      map.on('drag', boundsHandler);
      map.setView(opt.center, opt.zoom);
    }
}, [opt, map]);

<MapContainer
    whenCreated={setMap}
    crs={CRS_4490}
    attributionControl={false}
    // zoomDelta={0.4}
    minZoom={9}
    // zoomSnap={0.1}
    center={opt.center}
    zoom={opt.zoom}
    layers={TiledMapLayer}
    style={{ height, backgroundColor: '#fff', border: '1px dashed #e0e0e0' }}
>
    <GeoJSON data={GeoData as any} />
</MapContainer>

参考:https://qa.1r1g.com/sf/ask/1801907271/
参考演示地址:http://jsfiddle.net/asleepwalker/exqar2w4/
注:关于中山这个区域的上下左右的坐标是在“高德地图 —— 在哪儿”,然后在network中获取给接口传递的参数得到的
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值