Geojson数据是矢量数据,主要是点、线、面数据集合
Geojson数据获取:DataV.GeoAtlas地理小工具系列
实现代码如下:
import {ref,toRaw} from 'vue';
import { Vector as VectorLayer } from 'ol/layer.js';
import { Vector as VectorSource } from 'ol/source.js';
import { Style, Fill, Stroke, Circle as CircleStyle } from 'ol/style';
import {Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, Geometry} from 'ol/geom.js';
import { transform, fromLonLat, toLonLat } from 'ol/proj.js'
import Feature from 'ol/Feature.js';
import GeoJSON from 'ol/format/GeoJSON.js';
import Select from 'ol/interaction/Select.js';
import Overlay from 'ol/Overlay';
import pointData from "../../../static/datas/point.json";// 本地点数据
import lineData from "../../../static/datas/line.json";// 本地线数据
import polygonData from "../../../static/datas/polygon.json";// 本地面数据
import multiPointData from "../../../static/datas/multiPoint.json";// 本地multipoint数据
import multiLineData from "../../../static/datas/multiLine.json";// 本地multiLine数据
import multiPolygonData from "../../../static/datas/multiPolygon.json";// 本地multiPolygon数据
import ccsData from "../../../static/datas/ccs.json";
// 数据源
const vectorSource = ref(null);
// 创建图层
const vectorLayer = ref(null);
// 添加离线geojson数据-推荐
const addBaseGeoJsonLayer = (map) =>{
removeGeoJsonLayer(map);
// 使用 GeoJSON 格式读取数据
const geojsonFormat = new GeoJSON();
const features = geojsonFormat.readFeatures(pointData, {
featureProjection: 'EPSG:3857' // 投影坐标系
});
// 创建一个矢量源并添加读取的特征
const geoJsonSource = new VectorSource({
features: features
});
// 创建一个矢量图层
geoJsonLayer.value = new VectorLayer({
name:"geojson图层",
source:geoJsonSource,
style: new Style({
// 使用 CircleStyle 创建一个圆形的点
image:new CircleStyle({
// 点样式
fill:new Fill({
//color:"red",// 颜色
color: 'rgba(255,0,0,0.4)',
}),
// 点周边样式
stroke:new Stroke({
color: '#3399CC',
width: 1.25,
}),
radius:7,// 半径
}),
}),
zIndex: 20,
});
map.addLayer(geoJsonLayer.value);
}
// 遍历添加
export const addBaseGeoJson = (map) =>{
// 删除图层
map.removeLayer(vectorLayer.value);
// 创建要素数据源
vectorSource.value = new VectorSource();
// 创建要素图层
vectorLayer.value = new VectorLayer();
// 遍历本地数据
pointData.features.forEach(function(element){
const feature = new Feature();
// 要素名称/类型
const featurName = element.type;
feature.setGeometryName(featurName);
// 要素属性信息
const properties = element.properties;
// 要素图层类型
const geomType = element.geometry.type;
console.log("geomType",geomType)
if("Point" == geomType){// 点数据
// 要素数据图形
const pointGeom = element.geometry.coordinates
// 转换坐标
//const transformedCoords = transform([pointGeom[0],pointGeom[1]],'EPSG:4326', 'EPSG:3857');
const transformedCoords = fromLonLat([pointGeom[0],pointGeom[1]]);
// 添加数据
const pointGeometry = new Point(transformedCoords);
feature.setGeometry(pointGeometry);
// 设置样式
feature.setStyle(
new Style({
// 使用 CircleStyle 创建一个圆形的点
image:new CircleStyle({
// 点样式
fill:new Fill({
//color:"red",// 颜色
color: 'rgba(255,0,0,0.4)',
}),