gpt4 book ai didi

javascript - Google Maps DrawingManager 在 Angular 中未定义

转载 作者:行者123 更新时间:2023-11-30 06:19:38 26 4
gpt4 key购买 nike

我试图通过使用 Angular 单击按钮来更改 Google map 绘图管理器的几个选项。但是我收到错误消息,指出 DrawingManager 变量未定义。

我在 Angular 组件的 ngAfterViewInit 函数中初始化了 Google Maps 和 DrawingManager。 Google Map 对象和 Drawing Manager 对象被分配给组件中的变量,如代码所示。我想通过单击组件中的按钮来更改绘图管理器的几个选项。单击按钮调用“drawControlEnable”函数。但是 DrawingManager 对象在“drawControlEnable”函数中是未定义的。我已将 Google map 脚本和组件代码放入 index.html 中。

Index.html

<script async defer src="https://maps.googleapis.com/maps/api/js?key=XXXXX&libraries=drawing,geometry"></script>

Angular 分量

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 选项?

最佳答案

这就是我创建 map 并使用按钮更改绘图控制选项的方式:首先我声明了两个变量:一个用于 map ,一个用于绘图管理器

  theMap: any;
drawingManager: any;

我在 ngOnInit 中创建 map 并调用绘图管理器:

this.theMap = this.initMap(lat, lng);

if(this.theMap) {
this.initDrawingManager(this.theMap)
}

创建 map 和初始化绘图管理器的两个函数是:

  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;
}

  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);
}

改变drawingControl选项的函数是:

  change() {
this.drawingManager.setOptions({
drawingControl: true
});
}

HTML 是:

<button
(click)="change()">
change
</button>

通过单击按钮,绘图控件将出现在 map 上。

我们的区别在于我在 ngOnInit 中创建 map 。

关于javascript - Google Maps DrawingManager 在 Angular 中未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53945340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com