美文网首页开源
OpenLayers官方教程-使用Canvas 2D渲染陨石

OpenLayers官方教程-使用Canvas 2D渲染陨石

作者: 面向全麦面包编程 | 来源:发表于2020-03-19 17:44 被阅读0次

在OpenLayers 6中,可以对不同图层使用不同的渲染方式,Canvas 2D 或是WebGL

  • 数据文件的格式是CSV,我将其转换成了JSON(有现成的在线网站进行转换),以便直接导入。
  • 当你打开页面时,你会发现卡顿很厉害,JavaScript VM高达120MB+,同时处理这么多点已经力不从心了~~

直接贴出主要代码,与官方略有不同,没有使用Ajax,同时也对数据进行了转换

import meteoritesjson from './data/meteoritesjson';

import 'ol/ol.css';
import {
    fromLonLat
} from 'ol/proj';
import {
    Map,
    View
} from 'ol';
import {
    Vector as VectorLayer,
    Tile as TileLayer
} from 'ol/layer';
import {
    Vector as VectorSource,
    Stamen
} from 'ol/source';
import Feature from 'ol/Feature';
import Point from 'ol/geom/Point';

const source = new VectorSource({
    wrapX: false
});
//数据文件
const csv = meteoritesjson;
//feature集合
const features = [];

for (let i = 0; i < csv.length; i++) {
    const coords = fromLonLat([parseFloat(csv[i].longitude), parseFloat(csv[i].latitude)]);
    if (isNaN(coords[0]) || isNaN(coords[1])) {
        //跳过bad data
        continue;
    }
    features.push(new Feature({
        mass: parseFloat(csv[i].mass) || 0,
        year: parseInt(csv[i].id) || 0,
        geometry: new Point(coords)
    }));
}
source.addFeatures(features);

const map = new Map({
    target: 'map',
    layers: [
        new TileLayer({
            source: new Stamen({
                layer: 'toner'
            })
        }),
        new VectorLayer({
            source: source
        })
    ],
    view: new View({
        center: [0, 0],
        zoom: 2
    })
});

相关文章

网友评论

    本文标题:OpenLayers官方教程-使用Canvas 2D渲染陨石

    本文链接:https://www.haomeiwen.com/subject/gpwlyhtx.html