微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DeckGL 和 Mapbox:如何在地图移动时访问 ref 元素?

如何解决DeckGL 和 Mapbox:如何在地图移动时访问 ref 元素?

每次在地图上移动时,我都试图在我的 React 应用程序中 console.log MapBox 地图的边界。

这是我目前的尝试:

return (
    <>
      <DeckGL
        layers={layers}
        initialViewState={INITIAL_VIEW_STATE}
        controller={true}
        onViewStateChange={stateChangeFunc}
      >
        <ReactMapGL
          reuseMaps
          mapStyle={mapStyle}
          preventStyleDiffing={true}
          ref={(ref) => console.log(ref.getMap().getBounds())}
          mapBoxApiAccesstoken={token}
        />
      </DeckGL>
    </>
  );

加载地图时会打印边界,但在地图上移动时打印时遇到问题。是否应该使用 prop 来访问此功能?将 ref={(ref) => console.log(ref.getMap().getBounds())} 放入 DeckGL 不起作用。是否有与 onViewStateChangeReactMapGL 等效的道具?这可能允许我创建一个打印出 ref函数

解决方法

你可以试试:

  • 直接从甲板上收听 onViewStateChange(建议使用一些去抖动)
  • 访问viewState
  • 使用 getBounds 类中的 WebMercatorViewport 方法
import DeckGL,{WebMercatorViewport} from 'deck.gl';

function debounce(fn,ms) {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => {
      timer = null;
      fn.apply(this,args);
    },ms);
  };
}

function handleViewStateChange({ viewState }) {
  const bounds = new WebMercatorViewport(viewState).getBounds();
  console.log(bounds);
};

<DeckGL
  ...
  onViewStateChange={debounce(handleViewStateChange,500)}
/>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。