javascript - 在 react-google-maps 上的 DrawingManager 中完成一圈后如何停止绘制?

标签 javascript reactjs google-maps google-maps-react

我已经提到了 this问题已经出现。

我也可以实现它,但问题是我如何确定 radius 是否有变化,因为 DrawingManager 组件将被卸载。

此外,我无法使用像 setDrawingMode(null) 这样的函数,因为它没有在 react-google-maps 公共(public) API 中公开,还将 options 更新为 drawingControl = false 不工作。

是否有任何其他可能的解决方案,通过它我们可以限制用户只能创建一个圆圈,并且还能够以某种方式获得radius_changed

下面是代码

<GoogleMap
    defaultZoom={8}
    defaultCenter={new google.maps.LatLng(-34.397, 150.644)}
  >
    <DrawingManager
      defaultDrawingMode={google.maps.drawing.OverlayType.CIRCLE}
      defaultOptions={{
        drawingControl: true,
        drawingControlOptions: {
          position: google.maps.ControlPosition.TOP_CENTER,
          drawingModes: [
            google.maps.drawing.OverlayType.CIRCLE,
          ],
        },
        circleOptions: {
          fillColor: `#ffff00`,
          fillOpacity: 1,
          strokeWeight: 5,
          clickable: false,
          editable: true,
          zIndex: 1,
        },
      }},
      onOverlayComplete={(...args)=> /* what to do to disable drawing??*/}
    />
  </GoogleMap>

任何帮助将不胜感激。谢谢。

最佳答案

这是 onOverlayComplete 事件的签名:

onOverlayComplete?(e: google.maps.drawing.OverlayCompleteEvent): void 

由于 onOverlayComplete 事件绑定(bind)到 DrawingManager class 的实例, 可以像这样禁用绘图模式:

class MyMapComponent extends Component {
  handleOverlayComplete(e){
    this.setDrawingMode(null);
    this.setOptions({drawingControlOptions: {drawingModes: [] }}); 
  };

  render() {
    return (
      <GoogleMap defaultZoom={this.props.zoom} defaultCenter={this.props.center}>
        <DrawingManager
          defaultDrawingMode={google.maps.drawing.OverlayType.CIRCLE}
          defaultOptions={{
            drawingControl: true,
            drawingControlOptions: {
              position: google.maps.ControlPosition.TOP_CENTER,
              drawingModes: [google.maps.drawing.OverlayType.CIRCLE]
            },
            circleOptions: {
              fillColor: `#ffff00`,
              fillOpacity: 1,
              strokeWeight: 5,
              clickable: false,
              editable: true,
              zIndex: 1
            }
          }}
          onOverlayComplete={this.handleOverlayComplete}
        />
      </GoogleMap>
    );
  }
}

这里是 a demo

关于javascript - 在 react-google-maps 上的 DrawingManager 中完成一圈后如何停止绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54341179/

相关文章:

javascript - 根据递归 ul 中的输入获取表单的序列化数组

javascript - React onScroll 未触发

debugging - 尽管 webpack 源映射,jsx React 调试器仍不匹配

android - 有没有办法在 Maps API v2 上显示所有信息窗口?

javascript - 谷歌地图API突出显示区域

ruby-on-rails - Gmaps4rails : zoom not working?

javascript - 处理来自多个 AJAX JQuery 查询的独立数据

Javascript for 循环似乎在第一次迭代后退出或卡住

javascript - 如何使用谷歌脚本从侧边栏(也是 HTML)调用模式对话框(带有 HTML 文件)

javascript - AND 运算符和 OR javascript 的混合使用