如何在不禁用编辑的情况下禁用谷歌地图绘图工具
How do I disable Google Maps drawing tool without disabling the editing?
我正在努力做到这一点:
用户可以在谷歌地图上画圆圈
用户可以更改它:拖动它并更改半径
用户无法绘制其他圆
在每一个事件中,我都想得到圆心和它的半径。
现在用户可以画圆,我会收到中心的坐标和半径,但在circlecomplete
事件之后,我无法检索到任何关于编辑(拖动和更改半径)的数据
这里的代码:
var mapOptions = {
center: this.mapCenterLatLng(),
zoom: this.state.initialZoom,
disableDefaultUI: true
},
map = new google.maps.Map(this.getDOMNode(), mapOptions);
var drawingManager;
if(!this.props.lat)(
drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.CIRCLE,
drawingControl: false,
circleOptions: {
fillColor: '#4dd0e1',
strokeColor: '#4dd0e1',
fillOpacity: 0.3,
strokeWeight: 2,
clickable: false,
editable: true,
zIndex: 1
}
}),
drawingManager.setMap(map),
google.maps.event.addListener(drawingManager, 'circlecomplete', onCircleComplete)
)
function onCircleComplete (shape) {
$('#closeMapModal.success').animate({
opacity: 1
}, 500)
drawingManager.drawingMode = null;
drawingManager.setMap(map);
var circle;
if (shape == null || (!(shape instanceof google.maps.Circle))) return;
if (circle != null) {
circle.setMap(null);
circle = null;
}
circle = shape;
var area = [circle.getRadius(), circle.getCenter().lat(), circle.getCenter().lng()]
console.log(area) // HERE THE COORDS I'M RECEIVING ON 'circlecomplete'
}
将侦听器添加到circlecomplete
上的圆中,当它们发生变化时,这些侦听器会为您提供坐标和半径。
google.maps.event.addListener(circle, `center_changed`, logData);
google.maps.event.addListener(circle, `radius_changed`, logData);
代码片段:
var map;
var uniqueId = 0;
var drawingManager;
var circle;
function initialize() {
map = new google.maps.Map(
document.getElementById("map_canvas"), {
center: new google.maps.LatLng(37.4419, -122.1419),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.CIRCLE,
drawingControl: false,
circleOptions: {
fillColor: '#4dd0e1',
strokeColor: '#4dd0e1',
fillOpacity: 0.3,
strokeWeight: 2,
clickable: false,
editable: true,
zIndex: 1
}
});
drawingManager.setMap(map);
google.maps.event.addListener(drawingManager, 'circlecomplete', onCircleComplete);
google.maps.event.addDomListener(document.getElementById('done'), 'click', doneWithCircle)
}
function onCircleComplete(shape) {
drawingManager.setDrawingMode(null);
drawingManager.setMap(map);
if (shape == null || (!(shape instanceof google.maps.Circle))) return;
if (circle != null && circle.setMap) {
circle.setMap(null);
circle = null;
}
circle = shape;
circle._uniqueId = uniqueId++;
var area = [circle.getRadius(), circle.getCenter().lat(), circle.getCenter().lng()]
logData(circle);
google.maps.event.addListener(circle, `center_changed`, logData);
google.maps.event.addListener(circle, `radius_changed`, logData);
}
function logData() {
// HERE THE COORDS I'M RECEIVING ON 'circlecomplete'
document.getElementById('circle_coords').innerHTML = circle._uniqueId + "<br/>center: " + circle.getCenter() + "<br/>radius: " + circle.getRadius();
};
function doneWithCircle() {
if (circle != null && circle.setMap) {
circle.setMap(null);
circle = null;
}
drawingManager.setDrawingMode(google.maps.drawing.OverlayType.CIRCLE);
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map_canvas {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=drawing"></script>
<input type="button" value="delete" id="done" />
<div id="circle_coords"></div>
<div id="map_canvas"></div>
相关文章:
- 嵌入的自定义谷歌地图不会在没有刷新的情况下显示
- 如何创建谷歌地图下拉列表
- 如何在不与谷歌地图重叠的情况下对标记进行聚类
- 在不加载页面的情况下更新谷歌地图上的标记位置
- 在没有jQuery的情况下切换谷歌地图标记
- 谷歌地图与方向 - 我可以在没有表单标签的情况下做到这一点吗?
- 人们如何在不透露他们的谷歌API密钥的情况下将所有这些很酷的谷歌地图示例放在jsFiddle上
- 如何在没有标记内容的情况下加载谷歌地图
- 如何在不禁用编辑的情况下禁用谷歌地图绘图工具
- 谷歌地图:如何在不缩小的情况下添加标记
- 谷歌地图API v3:在保持中心点固定的情况下,使地图适应标记
- 如何在没有标记的情况下将信息窗口添加到谷歌地图中
- 如何在不使用谷歌地图的情况下将当前纬度和经度与多段线匹配
- 在谷歌地图api重叠的情况下,只显示单个标记
- 谷歌地图-在多个标记的情况下显示地址标记
- 谷歌地图如何在不重新加载和不使用历史API的情况下改变其URL ?
- 在不使用computeheading的情况下,从谷歌地图URL中找到正确的街景
- 在谷歌地图 API V3 中,如何在不使用限制平移解决方案的情况下防止标记在 x 轴上重复
- 在不使用HTTPS的情况下嵌入谷歌地图
- 默认情况下,当html标签隐藏时,谷歌地图不会渲染整个帧