未在Angular中定义Google Maps DrawingManager

时间:2018-12-27 12:45:18

标签: javascript angular google-maps

我正在尝试通过使用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选项?

1 个答案:

答案 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中创建地图。