gmap-ol
Version:
A set of helper classes for working with openLayers.
81 lines (74 loc) • 2.57 kB
JavaScript
/*
* @Author: xuhongling
* @Date: 2022-08-18 21:05:19
* @Last Modified by: xuhongling
* @Last Modified time: 2022-09-06 14:48:49
*/
import { METERS_PER_UNIT } from 'ol/proj/Units';
// 点击展示范围内重叠站点
function pickFeaturesByName(event, pickLayerType = 'Point') {
const olMap = event.map;
// 获取点击的地图坐标范围
const getExtentByBuffer = (coordinate) => {
const mapZoom = olMap.getView().getZoom();
const zoom = Math.ceil(mapZoom);
let buffer;
if (zoom < 6) {
buffer = 50000 - zoom * 2000;
} else if (zoom < 11) {
buffer = 12000 - zoom * 200;
} else if (zoom < 13) {
buffer = 2000 - (zoom - 10) * 100;
} else if (zoom < 15) {
buffer = 800 - (zoom - 10) * 100;
} else if (zoom > 17) {
buffer = 10;
} else {
buffer = 100;
}
buffer = buffer / METERS_PER_UNIT[olMap.getView().getProjection().getUnits()];
const extent = [coordinate[0] - buffer, coordinate[1] - buffer, coordinate[0] + buffer, coordinate[1] + buffer];
return extent;
};
// 获取点击的地图坐标范围
const coordinate = olMap.getCoordinateFromPixel(event.pixel);
const extent = getExtentByBuffer(coordinate);
// 获取图层
const loadLayers = () => {
const layers = olMap.getLayers();
const localTargetLayer = [];
layers.forEach((layer) => {
if (layer.getProperties().pickLayerName !== undefined) {
const isPointVectorLayer = layer.getProperties().pickLayerName.includes(pickLayerType);
if (isPointVectorLayer && judgeLayerVisible(layer)) {
localTargetLayer.push(layer);
}
}
});
return localTargetLayer;
};
// 判断图层信息
const judgeLayerVisible = (layer) => {
const min = layer.getMinZoom();
const max = layer.getMaxZoom();
const visible = layer.getVisible();
const mapZoom = olMap.getView().getZoom();
return visible && mapZoom > min && mapZoom <= max;
};
// 解析Features
const resultList = [];
const layers = loadLayers();
for (let i = 0; i < layers.length; i++) {
const layer = layers[i];
if (judgeLayerVisible(layer)) {
const features = layer.getSource().getFeaturesInExtent(extent);
for (let i = 0; i < features.length; i++) {
const feature = features[i];
const properties = feature.getProperties();
resultList.push(properties);
}
}
}
return resultList;
}
export default pickFeaturesByName;