Как остановить рисование после завершения одного круга в DrawingManager на реагировать-google-карты?
Я уже упоминал эту проблему.
Я также могу реализовать это, но проблема в том, как мне определить, есть ли какое-то изменение радиуса, потому что DrawingManager
компонент будет размонтирован.
Также я не могу использовать функцию, как setDrawingMode(null)
потому что он не выставлен в общедоступных API реагировать на google-maps, а также обновляется 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>
Любая помощь будет оценена. Благодарю.
1 ответ
Вот подпись для onOverlayComplete
событие:
onOverlayComplete?(e: google.maps.drawing.OverlayCompleteEvent): void
поскольку onOverlayComplete
событие связано с экземпляром DrawingManager
класс, режим рисования может быть отключен следующим образом:
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>
);
}
}
Вот демо