add feature selection
This commit is contained in:
@@ -87,6 +87,7 @@ export class MapComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
this.initCache();
|
||||||
this.initBaseLayer();
|
this.initBaseLayer();
|
||||||
this.initLayerGroup();
|
this.initLayerGroup();
|
||||||
this.initMap();
|
this.initMap();
|
||||||
@@ -146,7 +147,7 @@ export class MapComponent implements OnInit {
|
|||||||
|
|
||||||
// add event to get feature infos
|
// add event to get feature infos
|
||||||
this.map.on('pointermove', (evt) => {
|
this.map.on('pointermove', (evt) => {
|
||||||
if (evt.dragging) {
|
if (evt.dragging || this.featureCache['selectedFeature']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const pixel = this.map.getEventPixel(evt.originalEvent);
|
const pixel = this.map.getEventPixel(evt.originalEvent);
|
||||||
@@ -165,6 +166,46 @@ export class MapComponent implements OnInit {
|
|||||||
this.currentFeatureInfo = null;
|
this.currentFeatureInfo = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// handle feature selection
|
||||||
|
this.map.on('click', (evt) => {
|
||||||
|
const pixel = this.map.getEventPixel(evt.originalEvent);
|
||||||
|
const features = this.map.getFeaturesAtPixel(pixel);
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
// check which of these are better?
|
||||||
|
// Both seems to remove style after click was undo
|
||||||
|
|
||||||
|
if (features && features.length > 0) {
|
||||||
|
// deselect feature that was selected before
|
||||||
|
if (this.featureCache['selectedFeature']) {
|
||||||
|
this.featureCache['selectedFeature'].setStyle(this.styleCache['lastHighlightedStyle']);
|
||||||
|
this.styleCache['lastHighlightedStyle'] = null;
|
||||||
|
this.featureCache['selectedFeature'] = null;
|
||||||
|
} else {
|
||||||
|
this.displayFeatureInfo(features[0]);
|
||||||
|
this.featureCache['selectedFeature'] = features[0];
|
||||||
|
features[0].setStyle(this.styleCache['defaultSelected']);
|
||||||
|
}
|
||||||
|
} else if (this.featureCache['selectedFeature']) {
|
||||||
|
// use lastHighlightedStyle because the original style is saved there
|
||||||
|
this.featureCache['selectedFeature'].setStyle(this.styleCache['lastHighlightedStyle']);
|
||||||
|
this.styleCache['lastHighlightedStyle'] = null;
|
||||||
|
this.featureCache['selectedFeature'] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (this.featureCache['selectedFeature']) {
|
||||||
|
// // use lastHighlightedStyle because the original style is saved there
|
||||||
|
// this.featureCache['selectedFeature'].setStyle(this.styleCache['lastHighlightedStyle']);
|
||||||
|
// this.styleCache['lastHighlightedStyle'] = null;
|
||||||
|
// this.featureCache['selectedFeature'] = null;
|
||||||
|
// } else if (features && features.length > 0) {
|
||||||
|
// this.displayFeatureInfo(features[0]);
|
||||||
|
// this.featureCache['selectedFeature'] = features[0];
|
||||||
|
// features[0].setStyle(this.styleCache['defaultSelected']);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -182,19 +223,6 @@ export class MapComponent implements OnInit {
|
|||||||
* @param feature
|
* @param feature
|
||||||
*/
|
*/
|
||||||
private highlightFeature(feature: Feature) {
|
private highlightFeature(feature: Feature) {
|
||||||
// init case
|
|
||||||
if (!this.styleCache['defaultHighlight']) {
|
|
||||||
this.styleCache['defaultHighlight'] = new Style({
|
|
||||||
stroke: new Stroke({
|
|
||||||
color: 'rgb(245, 64, 41)',
|
|
||||||
width: 2
|
|
||||||
}),
|
|
||||||
fill: new Fill({
|
|
||||||
color: 'rgba(245, 64, 41, 0.1)',
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// reapply saved feature and style
|
// reapply saved feature and style
|
||||||
if (this.featureCache['lastHighlighted']) {
|
if (this.featureCache['lastHighlighted']) {
|
||||||
this.featureCache['lastHighlighted'].setStyle(this.styleCache['lastHighlightedStyle']);
|
this.featureCache['lastHighlighted'].setStyle(this.styleCache['lastHighlightedStyle']);
|
||||||
@@ -208,7 +236,6 @@ export class MapComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens a dialog to create a new custom layer
|
* Opens a dialog to create a new custom layer
|
||||||
*/
|
*/
|
||||||
@@ -284,4 +311,30 @@ export class MapComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
this.map.getView().fit(customLayer.getSource().getExtent(), options);
|
this.map.getView().fit(customLayer.getSource().getExtent(), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Support function that inits cache values
|
||||||
|
*/
|
||||||
|
private initCache() {
|
||||||
|
this.styleCache['defaultSelected'] = new Style({
|
||||||
|
stroke: new Stroke({
|
||||||
|
color: 'rgb(245, 64, 41)',
|
||||||
|
width: 3
|
||||||
|
}),
|
||||||
|
fill: new Fill({
|
||||||
|
color: 'rgba(245, 64, 41, 0.3)',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
this.styleCache['defaultHighlight'] = new Style({
|
||||||
|
stroke: new Stroke({
|
||||||
|
color: 'rgb(245, 64, 41)',
|
||||||
|
width: 2
|
||||||
|
}),
|
||||||
|
fill: new Fill({
|
||||||
|
color: 'rgba(245, 64, 41, 0.1)',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user