Added some circle drawing tool
This commit is contained in:
		| @@ -25,17 +25,17 @@ | ||||
| <ng-template #menuItem let-item let-menu="menu" let-mode="mode"> | ||||
|     <ng-container *ngIf="mode == 'icon' && !item.subMenu"> | ||||
|         <button mat-icon-button class="d-inline mr-1" [ngClass]="{'selected': item?.enabled}" (click)="clickWrapper(item, menu)" [matTooltip]="item.name"> | ||||
|             <mat-icon *ngIf="item.icon">{{item.icon}}</mat-icon> | ||||
|             <mat-icon *ngIf="item.icon">{{item.icon}}</mat-icon><span *ngIf="item.faicon" [class]="item.faicon" style="height: 18px; width: 18px; font-size: 18px"></span> | ||||
|         </button> | ||||
|     </ng-container> | ||||
|     <ng-container *ngIf="mode == 'menu' && !item.subMenu"> | ||||
|         <button mat-menu-item [ngClass]="{'selected': item?.enabled}" (click)="clickWrapper(item, menu)"> | ||||
|             <mat-icon *ngIf="item.icon">{{item.icon}}</mat-icon> {{item?.name}} | ||||
|             <mat-icon *ngIf="item.icon">{{item.icon}}</mat-icon><span *ngIf="item.faicon" [class]="item.faicon" style="height: 18px; width: 18px; font-size: 18px; margin-left: 4px; margin-right: 16px"></span> {{item?.name}} | ||||
|         </button> | ||||
|     </ng-container> | ||||
|     <ng-container *ngIf="mode == 'icon' && item.subMenu"> | ||||
|         <button mat-icon-button class="d-inline mr-1" [ngClass]="{'selected': item?.enabled}" (click)="clickWrapper(item, menu)" [matTooltip]="item.name" [matMenuTriggerFor]="subMenu"> | ||||
|             <mat-icon *ngIf="item.icon">{{item.icon}}</mat-icon> | ||||
|             <mat-icon *ngIf="item.icon">{{item.icon}}</mat-icon><span *ngIf="item.faicon" [class]="item.faicon" style="height: 18px; width: 18px; font-size: 18px"></span> | ||||
|         </button> | ||||
|         <mat-menu #subMenu="matMenu"> | ||||
|             <ng-container *ngFor="let child of item.subMenu"> | ||||
| @@ -45,7 +45,7 @@ | ||||
|     </ng-container> | ||||
|     <ng-container *ngIf="mode == 'menu' && item.subMenu"> | ||||
|         <button mat-menu-item [ngClass]="{'selected': item?.enabled}" (click)="clickWrapper(item, menu)" [matMenuTriggerFor]="subMenu"> | ||||
|             <mat-icon *ngIf="item.icon">{{item.icon}}</mat-icon> {{item?.name}} | ||||
|             <mat-icon *ngIf="item.icon">{{item.icon}}</mat-icon><span *ngIf="item.faicon" [class]="item.faicon" style="height: 18px; width: 18px; font-size: 18px; margin-left: 4px; margin-right: 16px"></span> {{item?.name}} | ||||
|         </button> | ||||
|         <mat-menu #subMenu="matMenu"> | ||||
|             <ng-container *ngFor="let child of item.subMenu"> | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| export interface ToolbarItem { | ||||
|     name: string; | ||||
|     faicon?: string; | ||||
|     icon?: string; | ||||
|     hidden?: boolean; | ||||
|     toggle?: boolean; | ||||
|   | ||||
| @@ -115,7 +115,8 @@ export class MapService { | ||||
|         if(this.weatherLayer) this.weatherLayer.layer.addTo(this.map); | ||||
|     } | ||||
|  | ||||
|     newCircle(latlng: LatLng, radius: number, opts: any={}) { | ||||
|     newCircle(latlng: LatLng, radius?: number, opts: any={}) { | ||||
|         if(!radius) radius = 100_000 / this.map.getZoom(); | ||||
|         opts.radius = radius; | ||||
|         let circle = L.circle(latlng, opts).addTo(this.map); | ||||
|         circle.on('click', e => this.click.next({event: e, symbol: circle})); | ||||
|   | ||||
| @@ -26,7 +26,6 @@ export class MapComponent implements OnInit { | ||||
|     drawColor = '#ff4141'; | ||||
|     isNaN = isNaN; | ||||
|     map: MapService; | ||||
|     markers = []; | ||||
|     position; | ||||
|     positionMarker = {arrow: null, circle: null}; | ||||
|     shareDialog = false; | ||||
| @@ -37,6 +36,9 @@ export class MapComponent implements OnInit { | ||||
|     menu: ToolbarItem[] = [ | ||||
|         {name: 'Marker', icon: 'room', toggle: true, click: () => { this.addMarker(); }}, | ||||
|         {name: 'Draw', icon: 'create', toggle: true, onEnabled: () => this.startDrawing(), onDisabled: () => this.stopDrawing()}, | ||||
|         {name: 'Circle', faicon: 'far fa-circle', toggle: true, click: () => { this.addCircle(); }}, | ||||
|         {name: 'Square', faicon: 'far fa-square', toggle: true}, | ||||
|         {name: 'Polygon', faicon: 'fas fa-draw-polygon', toggle: true}, | ||||
|         {name: 'Measure', icon: 'straighten', toggle: true, onEnabled: () => this.startMeasuring(), onDisabled: () => this.stopMeasuring()}, | ||||
|         {name: 'Delete', icon: 'delete', toggle: true}, | ||||
|         {name: 'Map Style', icon: 'terrain', subMenu: [ | ||||
| @@ -69,7 +71,7 @@ export class MapComponent implements OnInit { | ||||
|  | ||||
|         // Handle click actions | ||||
|         this.map.click.pipe(filter(e => !!e)).subscribe(e => { | ||||
|             if(!!e.symbol && this.menu[3].enabled) return this.map.delete(e.symbol); | ||||
|             if(!!e.symbol && this.menu[6].enabled) return this.map.delete(e.symbol); | ||||
|             if(e.symbol instanceof L.Marker) this.bottomSheet.open(MarkerComponent, {data: e.symbol}); | ||||
|         }); | ||||
|  | ||||
| @@ -90,10 +92,16 @@ export class MapComponent implements OnInit { | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     addCircle() { | ||||
|         this.map.click.pipe(skip(1), take(1), filter(() => this.menu[2].enabled)).subscribe(e => { | ||||
|             this.menu[2].enabled = false; | ||||
|             this.map.newCircle(e.event.latlng); | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     addMarker() { | ||||
|         this.map.click.pipe(skip(1), take(1), filter(() => this.menu[0].enabled)).subscribe(e => { | ||||
|             this.menu[0].enabled = false; | ||||
|             this.markers.push(e.event.latlng); | ||||
|             this.map.newMarker(e.event.latlng); | ||||
|         }); | ||||
|     } | ||||
| @@ -120,13 +128,13 @@ export class MapComponent implements OnInit { | ||||
|     } | ||||
|  | ||||
|     startCalibrating() { | ||||
|         this.menu[6].enabled = true; | ||||
|         this.menu[9].enabled = true; | ||||
|         this.calibration = this.bottomSheet.open(CalibrateComponent, { | ||||
|             hasBackdrop: false, | ||||
|             disableClose: true | ||||
|         }); | ||||
|         this.calibration.afterDismissed().subscribe(() => { | ||||
|             this.menu[6].enabled = false; | ||||
|             this.menu[9].enabled = false; | ||||
|             this.calibration = null; | ||||
|         }); | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user