angular - AGM Angular 谷歌地图以编程方式设置缩放

标签 angular angular-components angular-google-maps openlayers-5 angular-library

我正在使用 AGM(Angular Google Maps)和 OpenLayers。

我需要以编程方式设置我的 AGM 的缩放,但无法弄清楚它是如何工作的。

HTML map ...

<div id="mapWrap" class="mapWrap" style="padding: 0px; width: 100%; height: 
100%; text-align: left">

  <agm-map  
    [latitude]="lat" 
    [longitude]="lng"
    [zoom]="currZoom" 
    [mapTypeId]="mapType" 
    [mapTypeControl]="mapControls" 
    [zoomControl]="mapControls" 
    [streetViewControl]="mapControls" 
  ></agm-map>

  <div id="map" class="map" style="padding: 0px; width: 100%; height: 100%;z-index: 0; position: absolute; opacity: 0.5"></div>
</div>

组件代码
import { Component, OnInit, ViewChild } from '@angular/core';
import { AgmMap } from '@agm/core';
import { GoogleMap } from '@agm/core/services/google-maps-types';

import olMap from 'ol/Map';
import TileLayer from 'ol/layer/Tile';
import View from 'ol/View';
import OSM from 'ol/source/OSM.js';
import XYZ from 'ol/source/XYZ';
import {transform} from 'ol/proj';
import {msFormValues} from './../values/ms-form-values';

@Component({
  selector: 'ms-map',
  templateUrl: './ms-map.component.html',
  styleUrls: ['./ms-map.component.scss']
})
export class MsMapComponent implements OnInit {

// testCoord = 
transform([msFormValues.googleLng,msFormValues.googleLat],'EPSG:3857', 
'EPSG:4326');

lat: number = msFormValues.googleLat;
lng: number = msFormValues.googleLng;
currZoom: number = msFormValues.googleZoom;
mapType = 'satellite' ;
mapControls = false;

constructor() {}

ngOnInit() {
  const osmLayer = new TileLayer({
    source: new OSM()
  });

  const xyzLayer = new TileLayer({
    source: new XYZ({
      url: 'http://tile.osm.org/{z}/{x}/{y}.png'
    })
  });
  msFormValues.view = new View({
    center: [0,0],
    zoom: 0,
    projection: 'EPSG:3857',
    maxZoom: 20,
    minZoom: 5
  });

  msFormValues.googleZoom = msFormValues.view.getZoom();
  msFormValues.map = new olMap({
    target: 'map',
    layers: [
      osmLayer,
      // xyzLayer
    ],
    view: msFormValues.view
  }); 

  msFormValues.view.on('change:center',function() {
    var mapCenter = transform(msFormValues.view.getCenter(),'EPSG:3857', 'EPSG:4326');
    msFormValues.googleLat = mapCenter[1];
    msFormValues.googleLng = mapCenter[0];
  });
  msFormValues.view.on('change:resolution',function() {
    msFormValues.googleZoom = msFormValues.view.getZoom();   
  });

  }
  setMapType(mapTypeId: string) {}
}

我实际上是从 AngularJS 移植这个的
谷歌的原始 JS 然而在 Angular 6 中似乎只是将谷歌库拉到一个组件库中并不是很简单,一旦你试图将你的组件安装到另一个应用程序中就不起作用了。

最佳答案

所以根据@agm/core文档有放大 @input https://angular-maps.com/api-docs/agm-core/components/agmmap#zoom

更改此输入的值会影响 map 的缩放

将这样的功能添加到您的组件中

public setZoom(): void {
  this.zoom = 10;
}

然后在按钮上绑定(bind)功能
<button (click)="setZoom()">Set Zoom</button>

根据您的需要进行调整

关于angular - AGM Angular 谷歌地图以编程方式设置缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54774507/

相关文章:

angular - 错误 : @angular/core/testing "' has no exported member ' beforeEach' after upgrading to angular rc. 5

Angular 6 将应用程序转换为库

Angular Material : 'mat-dialog-content' is not a known element

javascript - Angular Google Maps map 点击事件工作一次

angularjs - 带有指令和表达式的 ui-gmap-window

html - 在模板 block 中使用不存在的主 html 标签的模板

Angular - 允许在文本区域上输入键,但不允许在 formGroup 中输入键

javascript - 将事件向下传递给 Angular 2 应用程序中不是另一个组件的父组件或子组件

javascript - 哪种 Angular 1.5 组件绑定(bind)类型更昂贵? '=' 还是 '<'?

angular - 如何在编辑和拖动时获取agm多边形的路径?