import { Component, Input, OnInit,ViewChild } from '@angular/core'; import { Feature} from 'ol'; import { Geometry } from 'ol/geom'; import * as extent from 'ol/extent'; import * as render from 'ol/render'; import * as style from 'ol/style'; @Component({ selector: 'fm-map-feature-thumbnail', templateUrl: './feature-thumbnail.component.html', styleUrls: ['./feature-thumbnail.component.scss'] }) export class GeometryThumbnailComponent implements OnInit { constructor() { } @ViewChild('canvas') canvas; @ViewChild('container') container; @Input('feature') feature:Feature; ngOnInit(): void { } render(canvas,width,height,geometry:Geometry) { let renderContext = render.toContext(canvas.getContext( '2d'),{ size: [width, height] }); let strokeStyle = new style.Style({ stroke: new style.Stroke({ color: 'black',width:1.5 }) }); let geom = geometry.clone(), line = geom.getCoordinates()[0], e = extent.boundingExtent( line ); let dxy = extent.getCenter(e), sxy = [ (width - 2 ) / extent.getWidth(e), (height - 2 ) / extent.getHeight(e) ]; let dx = dxy[0], dy = dxy[1], sx = sxy[0], sy = sxy[1]; geom.translate( -dx, -dy ); geom.scale( Math.min(sx, sy), -Math.min(sx, sy)); geom.translate( width / 2, height / 2 ); renderContext.setStyle( strokeStyle ); renderContext.drawGeometry( geom ); } ngAfterViewInit() { this.render(this.canvas.nativeElement, this.container.nativeElement.offsetWidth, this.container.nativeElement.offsetHeight, this.feature.getGeometry()); } }