|
|
@@ -11,27 +11,31 @@ import {HsEventBusService, HsMapService} from 'hslayers-ng';
|
|
|
@Injectable({providedIn: 'root'})
|
|
|
export class FieldService {
|
|
|
SELECTABLE_LAYERS = ['LPIS (WFS)'] as const;
|
|
|
- fieldSelects: Subject<{feature: Feature<Geometry>}> = new Subject();
|
|
|
- selectedField;
|
|
|
+ fieldSelects: Subject<{features: Feature<Geometry>[]}> = new Subject();
|
|
|
+ selectedFields;
|
|
|
|
|
|
constructor(
|
|
|
private hsEventBus: HsEventBusService,
|
|
|
private hsMapService: HsMapService
|
|
|
) {
|
|
|
this.hsEventBus.vectorQueryFeatureSelection.subscribe((data) => {
|
|
|
- if (
|
|
|
- !this.isValidGeometry(data.feature) ||
|
|
|
- !this.isValidLayer(data.feature)
|
|
|
- ) {
|
|
|
+ const features = data.selector
|
|
|
+ .getFeatures()
|
|
|
+ .getArray()
|
|
|
+ .filter((feature) => this.isValidGeometry(feature))
|
|
|
+ .filter((feature) => this.isValidLayer(feature));
|
|
|
+ if (features.length === 0) {
|
|
|
return;
|
|
|
}
|
|
|
- this.selectedField = data.feature.getGeometry() as Polygon;
|
|
|
- this.fieldSelects.next({feature: data.feature});
|
|
|
+ this.selectedFields = features.map(
|
|
|
+ (feature) => feature.getGeometry() as Polygon
|
|
|
+ );
|
|
|
+ this.fieldSelects.next({features: features});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
noFieldSelected(): boolean {
|
|
|
- return this.selectedField === undefined;
|
|
|
+ return this.selectedFields === undefined;
|
|
|
}
|
|
|
|
|
|
getCentroidOfField(field: Geometry) {
|
|
|
@@ -46,26 +50,16 @@ export class FieldService {
|
|
|
}
|
|
|
|
|
|
getSelectedFieldCentroid() {
|
|
|
- return this.getCentroidOfField(this.selectedField);
|
|
|
+ return this.getCentroidOfField(this.selectedFields[0]);
|
|
|
}
|
|
|
|
|
|
getSelectedFieldGeoJSON() {
|
|
|
return {
|
|
|
type: 'FeatureCollection',
|
|
|
name: 'Selected field',
|
|
|
- features: [
|
|
|
- {
|
|
|
- type: 'Feature',
|
|
|
- properties: {},
|
|
|
- geometry: {
|
|
|
- type: 'Polygon',
|
|
|
- coordinates: this.selectedField
|
|
|
- .clone()
|
|
|
- .transform('EPSG:5514', 'EPSG:4326')
|
|
|
- .getCoordinates(),
|
|
|
- },
|
|
|
- },
|
|
|
- ],
|
|
|
+ features: this.selectedFields.map((feature) =>
|
|
|
+ this.getGeoJSONFromFeature(feature)
|
|
|
+ ),
|
|
|
};
|
|
|
}
|
|
|
|
|
|
@@ -87,4 +81,18 @@ export class FieldService {
|
|
|
const layer = this.hsMapService.getLayerForFeature(feature);
|
|
|
return this.SELECTABLE_LAYERS.includes(layer.get('title'));
|
|
|
}
|
|
|
+
|
|
|
+ private getGeoJSONFromFeature(feature) {
|
|
|
+ return {
|
|
|
+ type: 'Feature',
|
|
|
+ properties: {},
|
|
|
+ geometry: {
|
|
|
+ type: 'Polygon',
|
|
|
+ coordinates: feature
|
|
|
+ .clone()
|
|
|
+ .transform('EPSG:5514', 'EPSG:4326')
|
|
|
+ .getCoordinates(),
|
|
|
+ },
|
|
|
+ };
|
|
|
+ }
|
|
|
}
|