angular - 将 DrawingManager 与 @angular/google-maps 一起使用
问题描述
我一直在尝试使用DrawingManager
Maps API 的官方 Angular 组件包装器,但它没有按预期工作。如果有人可以让它工作,我会很感激能得到一个解决方案。这是我尝试但没有运气的解决方案的片段和 stackblitz 链接。(在 stackblitz 中它无法识别 google 命名空间,但如果你在本地机器上下载它就可以了)
this.drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.POLYGON,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [google.maps.drawing.OverlayType.POLYGON]
}
});
this.drawingManager.setMap(this.map._googleMap);
https://stackblitz.com/edit/angular-vvwbdg
Github 问题链接: https ://github.com/angular/components/issues/18599
编辑1:原来问题是地图没有完全加载并且DrawingManager
在此之前设置没有生效。包装模块中没有加载回调。但是 Angular 的 AfterViewInit 似乎做得很好。
解决方案
一旦组件可用,使用@ViewChild
setter 创建 DrawingManager:
home.component.html:
<div *ngIf="apiLoaded | async">
<google-map [options]="options"></google-map>
</div>
home.component.ts:
export class HomeComponent implements OnInit {
@ViewChild(GoogleMap, { static: false }) set map(m: GoogleMap) {
if (m) {
this.initDrawingManager(m);
}
}
apiLoaded: Observable<boolean>;
drawingManager: any;
options: google.maps.MapOptions = {
zoom: 18,
mapTypeId: 'satellite',
disableDefaultUI: true
};
constructor(httpClient: HttpClient) {
this.apiLoaded = httpClient.jsonp('https://maps.googleapis.com/maps/api/js?key=<API_KEY>&libraries=drawing', 'callback')
.pipe(
map(() => true),
catchError(() => of(false)),
);
}
initDrawingManager(map: GoogleMap) {
const drawingOptions = {
drawingMode: google.maps.drawing.OverlayType.POLYGON,
drawingControl: true,
drawingControlOptions: {
position: google.maps.ControlPosition.TOP_CENTER,
drawingModes: [
google.maps.drawing.OverlayType.POLYGON,
],
},
polygonOptions: {
strokeColor: '#00ff00',
},
};
this.drawingManager = new google.maps.drawing.DrawingManager(drawingOptions);
this.drawingManager.setMap(map.googleMap);
}
推荐阅读
- php - Woocommerce 变量产品附加 _product_attributes 并且不替换
- javascript - 基于变量获取 (0,3) (3,6) (6,9) 的逻辑
- java - 如何从 SubClass 实例中获取定义类实例?
- git - 如何使用 Visual Studio Code 为现有项目使用 Github 个人访问令牌
- python - python 从 azure 存储帐户读取
- javascript - 关闭 IonModel 和 IonPicker 后页面滚动回顶部
- controller - Yii2 控制器触发两次/取决于浏览器
- python - 如果 Xpath 不存在,播放 mp3 - Python
- azure - 触发器主体属性的全局参数和在 @triggerbody().folderpath 上使用拆分功能
- google-cloud-platform - Google OAuth 同意屏幕 - 范围错误