【问题标题】:Google Maps DrawingManager is undefined in AngularGoogle Maps DrawingManager 在 Angular 中未定义
【发布时间】:2019-05-25 12:00:42
【问题描述】:

我正在尝试通过单击使用 Angular 的按钮来更改 Google 地图绘图管理器的几个选项。但我收到错误消息说 DrawingManager 变量未定义。

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

索引.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 选项?

【问题讨论】:

    标签: javascript angular google-maps


    【解决方案1】:

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

      theMap: any;
      drawingManager: any;
    

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

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

      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>
    

    点击按钮,绘图控件将出现在地图上。

    我们的不同之处在于我在 ngOnInit 中创建地图。

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多