Compare commits
26 Commits
250b3841fe
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
df0d13e5dd | ||
|
b347220dd4 | ||
|
edeadef96f | ||
|
267a299589 | ||
|
134220d75f | ||
|
80ef4ed6fe | ||
|
d21f304081 | ||
2bad3274fd | |||
|
31d3e58062 | ||
0231421cef | |||
|
f2c133e9bd | ||
|
1274d96f1d | ||
35ccb4f4c5 | |||
|
47fbc5eab9 | ||
564d08b5b9 | |||
7e17a49dc6 | |||
|
3f286ee042 | ||
747499d009 | |||
|
c4f4a4f61e | ||
6b095b7f49 | |||
b2791eb80b | |||
|
4c93a9f766 | ||
93554bc7c4 | |||
d074cd81cf | |||
87547aafcc | |||
6ab5ba8a56 |
12
package-lock.json
generated
12
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "farmmaps-lib-app",
|
"name": "farmmaps-lib-app",
|
||||||
"version": "4.17.0",
|
"version": "4.14.3",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "farmmaps-lib-app",
|
"name": "farmmaps-lib-app",
|
||||||
"version": "4.17.0",
|
"version": "4.14.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular-eslint/eslint-plugin": "^18.2.0",
|
"@angular-eslint/eslint-plugin": "^18.2.0",
|
||||||
"@angular/animations": "18.2.3",
|
"@angular/animations": "18.2.3",
|
||||||
@@ -90,7 +90,7 @@
|
|||||||
},
|
},
|
||||||
"dist/common": {
|
"dist/common": {
|
||||||
"name": "@farmmaps/common",
|
"name": "@farmmaps/common",
|
||||||
"version": "4.17.0-prerelease.2559",
|
"version": "4.14.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
},
|
},
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
},
|
},
|
||||||
"dist/common-map": {
|
"dist/common-map": {
|
||||||
"name": "@farmmaps/common-map",
|
"name": "@farmmaps/common-map",
|
||||||
"version": "4.17.0-prerelease.2559",
|
"version": "4.14.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.0.0"
|
"tslib": "^2.0.0"
|
||||||
},
|
},
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
},
|
},
|
||||||
"dist/common-map3d": {
|
"dist/common-map3d": {
|
||||||
"name": "@farmmaps/common-map3d",
|
"name": "@farmmaps/common-map3d",
|
||||||
"version": "4.17.0-prerelease.2559",
|
"version": "4.14.2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.0.0"
|
"tslib": "^2.0.0"
|
||||||
},
|
},
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
},
|
},
|
||||||
"dist/ng-openlayers": {
|
"dist/ng-openlayers": {
|
||||||
"name": "@farmmaps/ng-openlayers",
|
"name": "@farmmaps/ng-openlayers",
|
||||||
"version": "4.17.0-prerelease.2559",
|
"version": "4.14.2",
|
||||||
"license": "MPL-2.0",
|
"license": "MPL-2.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"tslib": "^2.3.0"
|
"tslib": "^2.3.0"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "farmmaps-lib-app",
|
"name": "farmmaps-lib-app",
|
||||||
"version": "4.17.0",
|
"version": "4.14.3",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"ng": "ng",
|
"ng": "ng",
|
||||||
"start": "ng serve",
|
"start": "ng serve",
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
<li class="nav-item py-0">
|
<li class="nav-item py-0">
|
||||||
<span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Base maps</span></span>
|
<span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Base maps</span></span>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
<fm-map-layer-list [baseLayers]="true" [itemLayers]="baseMaps|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
|
<fm-map-layer-list [baseLayers]="true" [itemLayers]="baseLayers|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item py-0">
|
<li class="nav-item py-0">
|
||||||
@@ -19,12 +19,6 @@
|
|||||||
<fm-map-layer-list [itemLayers]="overlayLayers|async" [selectedLayer]="selectedOverlayLayer|async" (onDelete)="handleOnDelete($event)" (onToggleVisibility)="handleOnToggleVisibility($event)" (onSetOpacity)="handleOnSetOpacity($event)" (onZoomToExtent)="handleZoomToExtent($event)" (onSelectLayer)="handleSelectOverlayLayer($event)"></fm-map-layer-list>
|
<fm-map-layer-list [itemLayers]="overlayLayers|async" [selectedLayer]="selectedOverlayLayer|async" (onDelete)="handleOnDelete($event)" (onToggleVisibility)="handleOnToggleVisibility($event)" (onSetOpacity)="handleOnSetOpacity($event)" (onZoomToExtent)="handleZoomToExtent($event)" (onSelectLayer)="handleSelectOverlayLayer($event)"></fm-map-layer-list>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item py-0">
|
|
||||||
<span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Aerial photos</span></span>
|
|
||||||
<div class="mb-4">
|
|
||||||
<fm-map-layer-list [baseLayers]="true" [itemLayers]="aerialMaps|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li class="nav-item py-0" *ngIf="selectedItemLayer$ | async as selectedItemLayer">
|
<li class="nav-item py-0" *ngIf="selectedItemLayer$ | async as selectedItemLayer">
|
||||||
<span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Data</span><span class="slideButton"><a href="#" title="Compare" class="btn btn-light btn-sm" (click)="handleToggleShowDatalayerSlide($event)"><i class="fal fa-sliders-h-square"></i></a></span></span>
|
<span><i class="fal fa-layer-group" aria-hidden="true"></i> <span i18n>Data</span><span class="slideButton"><a href="#" title="Compare" class="btn btn-light btn-sm" (click)="handleToggleShowDatalayerSlide($event)"><i class="fal fa-sliders-h-square"></i></a></span></span>
|
||||||
<div class="mb-4">
|
<div class="mb-4">
|
||||||
|
@@ -4,7 +4,7 @@ import { Store } from '@ngrx/store';
|
|||||||
import * as mapReducers from '../../reducers/map.reducer';
|
import * as mapReducers from '../../reducers/map.reducer';
|
||||||
import * as mapActions from '../../actions/map.actions';
|
import * as mapActions from '../../actions/map.actions';
|
||||||
import {createEmpty,extend } from 'ol/extent';
|
import {createEmpty,extend } from 'ol/extent';
|
||||||
import { filter, map, Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'fm-map-layer-switcher',
|
selector: 'fm-map-layer-switcher',
|
||||||
@@ -17,8 +17,7 @@ export class LayerSwitcher implements OnInit,OnChanges{
|
|||||||
public overlayLayers: Observable<Array<IItemLayer>>;
|
public overlayLayers: Observable<Array<IItemLayer>>;
|
||||||
public selectedOverlayLayer: Observable<IItemLayer>;
|
public selectedOverlayLayer: Observable<IItemLayer>;
|
||||||
public selectedItemLayer$: Observable<IItemLayer>;
|
public selectedItemLayer$: Observable<IItemLayer>;
|
||||||
public baseMaps: Observable<Array<IItemLayer>>;
|
public baseLayers: Observable<Array<IItemLayer>>;
|
||||||
public aerialMaps: Observable<Array<IItemLayer>>;
|
|
||||||
public selectedBaseLayer: Observable<IItemLayer>;
|
public selectedBaseLayer: Observable<IItemLayer>;
|
||||||
|
|
||||||
constructor( private store: Store<mapReducers.State>) {
|
constructor( private store: Store<mapReducers.State>) {
|
||||||
@@ -27,8 +26,7 @@ export class LayerSwitcher implements OnInit,OnChanges{
|
|||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.overlayLayers = this.store.select(mapReducers.selectGetOverlayLayers);
|
this.overlayLayers = this.store.select(mapReducers.selectGetOverlayLayers);
|
||||||
this.selectedOverlayLayer = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
|
this.selectedOverlayLayer = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
|
||||||
this.baseMaps = this.store.select(mapReducers.selectGetBaseMaps);
|
this.baseLayers = this.store.select(mapReducers.selectGetBaseLayers);
|
||||||
this.aerialMaps = this.store.select(mapReducers.selectGetArealMaps);
|
|
||||||
this.selectedBaseLayer = this.store.select(mapReducers.selectGetSelectedBaseLayer);
|
this.selectedBaseLayer = this.store.select(mapReducers.selectGetSelectedBaseLayer);
|
||||||
this.selectedItemLayer$ = this.store.select(mapReducers.selectGetSelectedItemLayer)
|
this.selectedItemLayer$ = this.store.select(mapReducers.selectGetSelectedItemLayer)
|
||||||
this.showLayerSwitcher = this.store.select(mapReducers.selectGetShowLayerSwitcher);
|
this.showLayerSwitcher = this.store.select(mapReducers.selectGetShowLayerSwitcher);
|
||||||
@@ -85,4 +83,3 @@ export class LayerSwitcher implements OnInit,OnChanges{
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@@ -92,6 +92,8 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
|
|||||||
public noContent = false;
|
public noContent = false;
|
||||||
public overrideSelectedItemLayer = false;
|
public overrideSelectedItemLayer = false;
|
||||||
public overrideOverlayLayers = false;
|
public overrideOverlayLayers = false;
|
||||||
|
public hideShowLayerValues = false;
|
||||||
|
public const
|
||||||
public dataLayerSlideValue = 50;
|
public dataLayerSlideValue = 50;
|
||||||
public dataLayerSlideEnabled = false;
|
public dataLayerSlideEnabled = false;
|
||||||
private visibleAreaBottom = 0;
|
private visibleAreaBottom = 0;
|
||||||
@@ -116,6 +118,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
|
|||||||
const params = route.snapshot.data["fm-map-map"];
|
const params = route.snapshot.data["fm-map-map"];
|
||||||
this.overrideSelectedItemLayer = params["overrideSelectedItemlayer"] ? params["overrideSelectedItemlayer"] : false;
|
this.overrideSelectedItemLayer = params["overrideSelectedItemlayer"] ? params["overrideSelectedItemlayer"] : false;
|
||||||
this.overrideOverlayLayers = params["overrideOverlayLayers"] ? params["overrideOverlayLayers"] : false;
|
this.overrideOverlayLayers = params["overrideOverlayLayers"] ? params["overrideOverlayLayers"] : false;
|
||||||
|
this.hideShowLayerValues = params["hideShowLayerValues"] ? params["hideShowLayerValues"] : false;
|
||||||
}
|
}
|
||||||
this.querySub = this.query$.pipe(skip(1), withLatestFrom(this.mapState$)).subscribe(([query, mapState]) => {
|
this.querySub = this.query$.pipe(skip(1), withLatestFrom(this.mapState$)).subscribe(([query, mapState]) => {
|
||||||
if (query && query.querystate) {
|
if (query && query.querystate) {
|
||||||
@@ -297,11 +300,13 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
|
|||||||
|
|
||||||
normalizeMapState(mapState: IMapState): IMapState {
|
normalizeMapState(mapState: IMapState): IMapState {
|
||||||
if (!mapState) return null;
|
if (!mapState) return null;
|
||||||
return {zoom: this.round(mapState.zoom,0),
|
return {
|
||||||
|
zoom: this.round(mapState.zoom, 0),
|
||||||
rotation: this.round(mapState.rotation, 2),
|
rotation: this.round(mapState.rotation, 2),
|
||||||
xCenter: this.round(mapState.xCenter, 5),
|
xCenter: this.round(mapState.xCenter, 5),
|
||||||
yCenter: this.round(mapState.yCenter, 5),
|
yCenter: this.round(mapState.yCenter, 5),
|
||||||
baseLayerCode: mapState.baseLayerCode };
|
baseLayerCode: mapState.baseLayerCode
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
serializeMapState(mapState: IMapState): string {
|
serializeMapState(mapState: IMapState): string {
|
||||||
@@ -472,11 +477,13 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
handleShowLayerValues(event: MouseEvent) {
|
handleShowLayerValues(event: MouseEvent) {
|
||||||
|
if (!this.hideShowLayerValues) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
this.zone.run(() => {
|
this.zone.run(() => {
|
||||||
this.store.dispatch(new mapActions.ToggleLayerValuesEnabled());
|
this.store.dispatch(new mapActions.ToggleLayerValuesEnabled());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handleOnDownload(event) {
|
handleOnDownload(event) {
|
||||||
|
|
||||||
|
@@ -7,8 +7,7 @@
|
|||||||
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
|
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
|
||||||
<h1>{{item.name}}</h1>
|
<h1>{{item.name}}</h1>
|
||||||
</div>
|
</div>
|
||||||
<ng-container *ngIf="item?.data.layers;let layers">
|
<div class="legend-container" *ngIf="item?.data.layers;let layers">
|
||||||
<div class="legend-container">
|
|
||||||
<div class="card menu-card">
|
<div class="card menu-card">
|
||||||
<div *ngIf="layers.length>1">
|
<div *ngIf="layers.length>1">
|
||||||
<select (change)="onLayerChanged($event.target.value)">
|
<select (change)="onLayerChanged($event.target.value)">
|
||||||
@@ -27,11 +26,9 @@
|
|||||||
<li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
|
<li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<li><fm-item-link class="text-primary p-0" [itemCode]="item.code" pathSuffix="data" [showText]="true"></fm-item-link></li>
|
<li><fm-item-link class="text-primary p-0" [itemCode]="item.code" pathSuffix="data" [showText]="true"></fm-item-link></li>
|
||||||
<li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i> <span i18n>Download</span></a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
|
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
|
||||||
</ng-container>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,13 +1,12 @@
|
|||||||
|
import { Component, Injectable } from '@angular/core';
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
import { Component, Injectable, OnDestroy } from '@angular/core';
|
|
||||||
import { Router } from '@angular/router';
|
|
||||||
import { commonReducers, FolderService, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
|
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import { Subscription } from 'rxjs';
|
|
||||||
import * as mapActions from '../../actions/map.actions';
|
|
||||||
import * as mapReducers from '../../reducers/map.reducer';
|
import * as mapReducers from '../../reducers/map.reducer';
|
||||||
|
import { commonReducers, ItemTypeService, ItemService, FolderService } from '@farmmaps/common';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
||||||
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
|
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
|
||||||
|
import * as mapActions from '../../actions/map.actions';
|
||||||
|
|
||||||
|
|
||||||
@ForItemType("vnd.farmmaps.itemtype.geotiff.processed")
|
@ForItemType("vnd.farmmaps.itemtype.geotiff.processed")
|
||||||
@@ -17,17 +16,12 @@ import { AbstractSelectedItemComponent } from '../selected-item/selected-item.co
|
|||||||
templateUrl: './selected-item-geotiff.component.html',
|
templateUrl: './selected-item-geotiff.component.html',
|
||||||
styleUrls: ['./selected-item-geotiff.component.scss']
|
styleUrls: ['./selected-item-geotiff.component.scss']
|
||||||
})
|
})
|
||||||
export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent implements OnDestroy {
|
export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent {
|
||||||
sub: Subscription;
|
|
||||||
|
|
||||||
constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
|
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
|
||||||
super(store, itemTypeService,location,router);
|
super(store, itemTypeService,location,router);
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy(): void {
|
|
||||||
if (this.sub) this.sub.unsubscribe();
|
|
||||||
}
|
|
||||||
|
|
||||||
onLayerChanged(layerIndex: number) {
|
onLayerChanged(layerIndex: number) {
|
||||||
this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
|
this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
|
||||||
}
|
}
|
||||||
@@ -35,13 +29,4 @@ export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent
|
|||||||
layer(layers:any,layerIndex:number) {
|
layer(layers:any,layerIndex:number) {
|
||||||
return layers.find(l => l.index == layerIndex);
|
return layers.find(l => l.index == layerIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
|
|
||||||
event.stopPropagation();
|
|
||||||
event.preventDefault();
|
|
||||||
const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
|
|
||||||
this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {
|
|
||||||
window.location.href = itemLinkUrl.url;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -7,8 +7,7 @@
|
|||||||
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
|
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
|
||||||
<h1>{{item.name}}</h1>
|
<h1>{{item.name}}</h1>
|
||||||
</div>
|
</div>
|
||||||
<ng-container *ngIf="item?.data.layers;let layers">
|
<div class="legend-container" *ngIf="item?.data.layers;let layers">
|
||||||
<div class="legend-container">
|
|
||||||
<div class="card menu-card">
|
<div class="card menu-card">
|
||||||
<div *ngIf="layers.length>1">
|
<div *ngIf="layers.length>1">
|
||||||
<select (change)="onLayerChanged($event.target.value)">
|
<select (change)="onLayerChanged($event.target.value)">
|
||||||
@@ -25,10 +24,8 @@
|
|||||||
<li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-olus" aria-hidden="true" i18n-title title="Add as layer"></i> <span i18n>Add as overlay</span></a></li>
|
<li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-olus" aria-hidden="true" i18n-title title="Add as layer"></i> <span i18n>Add as overlay</span></a></li>
|
||||||
<li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
|
<li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i> <span i18n>Download</span></a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
|
||||||
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
|
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,13 +1,14 @@
|
|||||||
|
import { Component, Input, Injectable, OnInit } from '@angular/core';
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
import { Component, Injectable, OnDestroy } from '@angular/core';
|
import { Feature } from 'ol';
|
||||||
import { Router } from '@angular/router';
|
|
||||||
import { commonReducers, FolderService, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
|
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import * as mapActions from '../../actions/map.actions';
|
|
||||||
import * as mapReducers from '../../reducers/map.reducer';
|
import * as mapReducers from '../../reducers/map.reducer';
|
||||||
|
import { commonReducers, ItemTypeService, IItem, Item, ItemService, FolderService, IListItem} from '@farmmaps/common';
|
||||||
|
import * as mapActions from '../../actions/map.actions';
|
||||||
|
import { Router, ActivatedRoute, ParamMap, Event } from '@angular/router';
|
||||||
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
||||||
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
|
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
|
||||||
import { Subscription } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
|
|
||||||
|
|
||||||
@ForItemType("vnd.farmmaps.itemtype.shape.processed")
|
@ForItemType("vnd.farmmaps.itemtype.shape.processed")
|
||||||
@@ -17,17 +18,12 @@ import { Subscription } from 'rxjs';
|
|||||||
templateUrl: './selected-item-shape.component.html',
|
templateUrl: './selected-item-shape.component.html',
|
||||||
styleUrls: ['./selected-item-shape.component.scss']
|
styleUrls: ['./selected-item-shape.component.scss']
|
||||||
})
|
})
|
||||||
export class SelectedItemShapeComponent extends AbstractSelectedItemComponent implements OnDestroy {
|
export class SelectedItemShapeComponent extends AbstractSelectedItemComponent {
|
||||||
public selectedLayer = 0;
|
|
||||||
sub: Subscription;
|
|
||||||
|
|
||||||
constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
|
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
|
||||||
super(store, itemTypeService,location,router);
|
super(store, itemTypeService,location,router);
|
||||||
}
|
}
|
||||||
|
public selectedLayer = 0;
|
||||||
ngOnDestroy(): void {
|
|
||||||
if (this.sub) this.sub.unsubscribe();
|
|
||||||
}
|
|
||||||
|
|
||||||
onLayerChanged(layerIndex: number) {
|
onLayerChanged(layerIndex: number) {
|
||||||
this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
|
this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
|
||||||
@@ -36,13 +32,4 @@ export class SelectedItemShapeComponent extends AbstractSelectedItemComponent im
|
|||||||
layer(layers:any,layerIndex:number) {
|
layer(layers:any,layerIndex:number) {
|
||||||
return layers.find(l => l.index == layerIndex);
|
return layers.find(l => l.index == layerIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
|
|
||||||
event.stopPropagation();
|
|
||||||
event.preventDefault();
|
|
||||||
const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
|
|
||||||
this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {
|
|
||||||
window.location.href = itemLinkUrl.url;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -7,8 +7,7 @@
|
|||||||
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
|
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
|
||||||
<h1>{{item.name}}</h1>
|
<h1>{{item.name}}</h1>
|
||||||
</div>
|
</div>
|
||||||
<ng-container *ngIf="item?.data.layers;let layers">
|
<div class="legend-container" *ngIf="item?.data.layers;let layers">
|
||||||
<div class="legend-container">
|
|
||||||
<div class="card menu-card">
|
<div class="card menu-card">
|
||||||
<h5><span i18n>Date</span>: {{temporalService.selectedDate(itemLayer)}}</h5>
|
<h5><span i18n>Date</span>: {{temporalService.selectedDate(itemLayer)}}</h5>
|
||||||
<div class="d-flex justify-content-between">
|
<div class="d-flex justify-content-between">
|
||||||
@@ -43,10 +42,9 @@
|
|||||||
<li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
|
<li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i> <span i18n>Remove overlay</span></a></li>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<li><a href="#" (click)="handleGoToChart(item)"><i class="fal fa-line-chart" aria-hidden="true" i18m-title title="Show chart"></i> <span i18n>Show chart</span></a></li>
|
<li><a href="#" (click)="handleGoToChart(item)"><i class="fal fa-line-chart" aria-hidden="true" i18m-title title="Show chart"></i> <span i18n>Show chart</span></a></li>
|
||||||
<li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i> <span i18n>Download</span></a></li>
|
<li><a href="#" (click)="download(item,$event)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i> <span i18n>Download</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</ng-container>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
|
import { Component, Injectable } from '@angular/core';
|
||||||
import { Location } from '@angular/common';
|
import { Location } from '@angular/common';
|
||||||
import { Component, Injectable, OnDestroy } from '@angular/core';
|
|
||||||
import { Router } from '@angular/router';
|
|
||||||
import { commonReducers, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
|
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import { Subscription } from 'rxjs';
|
|
||||||
import * as mapActions from '../../actions/map.actions';
|
|
||||||
import { IItemLayer, ITemporalItemLayer } from '../../models/item.layer';
|
|
||||||
import * as mapReducers from '../../reducers/map.reducer';
|
import * as mapReducers from '../../reducers/map.reducer';
|
||||||
import { TemporalService } from '../../services/temporal.service';
|
import { commonReducers, ItemTypeService, IItem, ItemService, IItemLinkType, IUrlType } from '@farmmaps/common';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
||||||
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
|
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
|
||||||
|
import { ITemporalItemLayer} from '../../models/item.layer';
|
||||||
|
import * as mapActions from '../../actions/map.actions';
|
||||||
|
import { IItemLayer } from '../../models/item.layer';
|
||||||
|
import {TemporalService} from '../../services/temporal.service';
|
||||||
|
|
||||||
@ForItemType("vnd.farmmaps.itemtype.temporal")
|
@ForItemType("vnd.farmmaps.itemtype.temporal")
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@@ -18,17 +18,12 @@ import { AbstractSelectedItemComponent } from '../selected-item/selected-item.co
|
|||||||
templateUrl: './selected-item-temporal.component.html',
|
templateUrl: './selected-item-temporal.component.html',
|
||||||
styleUrls: ['./selected-item-temporal.component.scss']
|
styleUrls: ['./selected-item-temporal.component.scss']
|
||||||
})
|
})
|
||||||
export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent implements OnDestroy {
|
export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent {
|
||||||
sub: Subscription;
|
|
||||||
|
|
||||||
constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router,public temporalService:TemporalService) {
|
constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router,public temporalService:TemporalService) {
|
||||||
super(store, itemTypeService,location,router);
|
super(store, itemTypeService,location,router);
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy(): void {
|
|
||||||
if (this.sub) this.sub.unsubscribe();
|
|
||||||
}
|
|
||||||
|
|
||||||
onLayerChanged(layerIndex: number) {
|
onLayerChanged(layerIndex: number) {
|
||||||
this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
|
this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
|
||||||
}
|
}
|
||||||
@@ -37,6 +32,8 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent
|
|||||||
return (this.itemLayer as ITemporalItemLayer)?.selectedItemLayer
|
return (this.itemLayer as ITemporalItemLayer)?.selectedItemLayer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
handleNextTemporal(event:MouseEvent) {
|
handleNextTemporal(event:MouseEvent) {
|
||||||
this.store.dispatch(new mapActions.NextTemporal());
|
this.store.dispatch(new mapActions.NextTemporal());
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
@@ -64,12 +61,14 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
|
download(item:IItem,event:MouseEvent) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
|
const itemLink : IItemLinkType = {itemcode:item.code,pathsuffix:"download", validminutes:10}
|
||||||
this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {
|
console.log('download1', itemLink)
|
||||||
window.location.href = itemLinkUrl.url;
|
const foo = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {
|
||||||
|
console.log('download2', itemLinkUrl)
|
||||||
|
window.location.href =itemLinkUrl.url
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -637,8 +637,6 @@ export const selectGetExtent = createSelector(selectMapState, getExtent);
|
|||||||
export const selectGetViewExtent = createSelector(selectMapState, getViewExtent);
|
export const selectGetViewExtent = createSelector(selectMapState, getViewExtent);
|
||||||
export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers);
|
export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers);
|
||||||
export const selectGetBaseLayers = createSelector(selectMapState, getBaseLayers);
|
export const selectGetBaseLayers = createSelector(selectMapState, getBaseLayers);
|
||||||
export const selectGetBaseMaps = createSelector(selectGetBaseLayers, (layers) => layers.filter(layer => layer.item.data.category === "baseMap"));
|
|
||||||
export const selectGetArealMaps = createSelector(selectGetBaseLayers, (layers) => layers.filter(layer => layer.item.data.category === "aerialPhoto").sort((a, b) => a.item.dataDate <= b.item.dataDate ? 1 : -1));
|
|
||||||
export const selectGetProjection = createSelector(selectMapState, getProjection);
|
export const selectGetProjection = createSelector(selectMapState, getProjection);
|
||||||
export const selectGetSelectedBaseLayer = createSelector(selectMapState, getSelectedBaseLayer);
|
export const selectGetSelectedBaseLayer = createSelector(selectMapState, getSelectedBaseLayer);
|
||||||
export const selectGetSelectedOverlayLayer = createSelector(selectMapState, getSelectedOverlayLayer);
|
export const selectGetSelectedOverlayLayer = createSelector(selectMapState, getSelectedOverlayLayer);
|
||||||
|
@@ -26,7 +26,6 @@ export class Item implements IItem {
|
|||||||
public data?:any;
|
public data?:any;
|
||||||
public isEditable?:boolean;
|
public isEditable?:boolean;
|
||||||
public owner?: string;
|
public owner?: string;
|
||||||
public fullPath?: string;
|
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
}
|
}
|
||||||
|
@@ -53,19 +53,15 @@ export class AdminService {
|
|||||||
return this.httpClient.post<IItemTask>(`${this.ApiEndpoint()}/api/v1/admin/${item.code}/tasks`, task);
|
return this.httpClient.post<IItemTask>(`${this.ApiEndpoint()}/api/v1/admin/${item.code}/tasks`, task);
|
||||||
}
|
}
|
||||||
|
|
||||||
getFileStorageOverview(): Observable<any> {
|
getAnalyseFolderOverview(): Observable<any> {
|
||||||
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/filestorage/folderinfo/overview`);
|
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/overview`);
|
||||||
}
|
}
|
||||||
|
|
||||||
getFileStorageInfo(user: string): Observable<any> {
|
getAnalyseFolderInfo(user: string): Observable<any> {
|
||||||
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/filestorage/folderinfo/${user}`);
|
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/${user}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
getFileStorageLog(): Observable<any> {
|
getAnalyseFolderLog(): Observable<any> {
|
||||||
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/filestorage/folderinfo/log`);
|
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/admin/analysefolder/folderinfo/log`);
|
||||||
}
|
|
||||||
|
|
||||||
validateEmail(user: IUser) {
|
|
||||||
return this.httpClient.post(`${this.ApiEndpoint()}/api/v1/admin/user/${user.code}/validateemail`, user);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -79,8 +79,7 @@ export class ItemService {
|
|||||||
|
|
||||||
getItemList(itemType?: string, dataFilter?: any, level?: number, atItemLocationItemCode?: string,
|
getItemList(itemType?: string, dataFilter?: any, level?: number, atItemLocationItemCode?: string,
|
||||||
indexed?: boolean, validToday?: boolean,tags?:string,crs?:string, startDate?: Date, endDate?: Date,
|
indexed?: boolean, validToday?: boolean,tags?:string,crs?:string, startDate?: Date, endDate?: Date,
|
||||||
skip?: number, take?: number, sourceTask?: string, exactMatchStartOrEndDate?: boolean, owner?:string,
|
skip?: number, take?: number, sourceTask?: string, exactMatchStartOrEndDate?: boolean, owner?:string): Observable<IItem[]> {
|
||||||
includeFullpath?: boolean): Observable<IItem[]> {
|
|
||||||
let params = new HttpParams();
|
let params = new HttpParams();
|
||||||
if(itemType) params = params.append("it", itemType);
|
if(itemType) params = params.append("it", itemType);
|
||||||
if(dataFilter) params = params.append("df", JSON.stringify(dataFilter));
|
if(dataFilter) params = params.append("df", JSON.stringify(dataFilter));
|
||||||
@@ -97,7 +96,6 @@ export class ItemService {
|
|||||||
if(take) params = params.append("take", take);
|
if(take) params = params.append("take", take);
|
||||||
if(exactMatchStartOrEndDate !== undefined) params = params.append("exactMatchStartOrEndDate", exactMatchStartOrEndDate);
|
if(exactMatchStartOrEndDate !== undefined) params = params.append("exactMatchStartOrEndDate", exactMatchStartOrEndDate);
|
||||||
if(owner) params = params.append("owner", owner);
|
if(owner) params = params.append("owner", owner);
|
||||||
if(includeFullpath) params = params.append("includeFullpath",includeFullpath?"true":"false");
|
|
||||||
return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/`, { params: params });
|
return this.httpClient.get<IItem[]>(`${this.ApiEndpoint()}/api/v1/items/`, { params: params });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user