我正在尝试通过使用Angular单击按钮来更改Google Maps绘图管理器的一些选项。但是我收到错误消息,说未定义DrawingManager变量。
我在Angular组件的ngAfterViewInit函数中初始化了Google Maps和DrawingManager。如代码所示,将Google Map对象和Drawing Manager对象分配给组件中的变量。我想通过单击组件中的按钮来更改“图形管理器”的几个选项。单击该按钮可调用“ drawControlEnable”功能。但是在“ drawControlEnable”函数中未定义DrawingManager对象。我已经将Google Maps脚本放入了index.html和该组件的代码中。
Index.html
<script async defer src="https://maps.googleapis.com/maps/api/js?key=XXXXX&libraries=drawing,geometry"></script>
角度组件
import {Component, OnInit, ViewChild, AfterViewInit} from '@angular/core';
import { } from '@types/googlemaps';
.....
.....
@ViewChild('gmap') gmapElement: any;
map: google.maps.Map;
shapes = [];
coordinatesArray = [];
drawingManager: any;
ngAfterViewInit() {
var mapProp = {
center: new google.maps.LatLng(7.515073, 80.723066),
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
this.map = new google.maps.Map(this.gmapElement.nativeElement, mapProp);
this.drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: null,
drawingControl: false,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: ['polygon']
},
markerOptions: {icon: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png'},
polygonOptions: {
editable: true,
draggable: true
}
});
this.drawingManager.setMap(this.map);
}
.....
.....
drawControlEnable() {
this.drawingManager.setDrawingMode(google.maps.drawing.OverlayType.MARKER);
this.drawingManager.setOptions({drawingControl : true});
}
如何通过单击按钮来更改DrawingManager选项?
答案 0 :(得分:0)
这是我创建地图并使用按钮更改绘图控制选项的方式: 首先,我声明两个变量:一个用于地图,一个用于drawingManager
var tbl = document.getElementById("GridView5");
我在ngOnInit中创建地图并调用drawingManager:
theMap: any;
drawingManager: any;
用于创建地图和初始化图形管理器的两个功能是:
this.theMap = this.initMap(lat, lng);
if(this.theMap) {
this.initDrawingManager(this.theMap)
}
和
initMap(lat, lng) {
let mapProp = {
center: new google.maps.LatLng(lat, lng),
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
let map = new google.maps.Map(document.getElementById("map"), mapProp);
let marker = new google.maps.Marker({
icon: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png',
animation: google.maps.Animation.DROP,
position: { lat: lat, lng: lng },
map: map
})
return map;
}
更改drawingControl选项的函数是:
initDrawingManager(map) {
this.drawingManager = new google.maps.drawing.DrawingManager({
// drawingMode: google.maps.drawing.OverlayType.MARKER,
drawingControl: false,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: ['circle', 'polygon']
},
// markerOptions: {icon: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/beachflag.png'},
polygonOptions: {
draggable: true,
editable: true
},
circleOptions: {
// fillColor: '#ffff00',
// fillOpacity: 1,
// strokeWeight: 5,
draggable: true,
clickable: true,
editable: true,
zIndex: 1
}
});
this.drawingManager.setMap(map);
}
,HTML是:
change() {
this.drawingManager.setOptions({
drawingControl: true
});
}
通过单击按钮,绘图控件将出现在地图上。
我们的区别是我在ngOnInit中创建地图。