• openlayers4 入门开发系列之风场图篇


    前言

    openlayers4 官网的 api 文档介绍地址 openlayers4 api,里面详细的介绍 openlayers4 各个类的介绍,还有就是在线例子:openlayers4 官网在线例子,这个也是学习 openlayers4 的好素材。

    openlayers4 入门开发系列的地图服务基于 Geoserver 发布的,关于 Geoserver 方面操作的博客,可以参考以下几篇文章:

    本篇的重点内容是利用 openlayers4 实现风场图功能,效果图如下:

    实现思路

    • 界面设计
    //风场图
    "<div style='height:25px;background:#30A4D5;margin-top:10px; 98%;margin-left: 3px;float: left;'>" +
    "<span style='margin-left:5px;font-size: 13px;color:white;'>风场图</span>" +
    "</div>" +
    '<div id="windLayer" style="padding:5px;float: left;">' +
    '<input type="checkbox" name="windlayer" style=" 15px;height: 15px;vertical-align: middle;margin: auto;"/>' +
    '<label style="font-weight: normal;vertical-align: middle;margin: auto;">风场图</label>' +
    '</div>'
    • 点击事件
    //风场图
    $("#windLayer input").bind("click", function () {
    if (this.checked) {
    var layer = bmap.getMapConfig().getShareLayer("GISSERVER_Wind");
    bxmap.olWindLayer.Init(bmap);
    if(layer){
    layer.setVisible(true);
    }
    //图例面板显示
    $("#map_tl").css("display","block");
    $("#map_tl>img").attr('src', getRootPath() +"js/main/olWindLayer/windLegend.jpg");
    $("#map_tl>img").css("width","auto");
    $("#map_tl>img").css("height","300px");
    }
    else {
    var layer = bmap.getMapConfig().getShareLayer("GISSERVER_Wind");
    bxmap.olWindLayer.clearWind();
    if(layer){
    layer.setVisible(false);
    }
    //图例面板隐藏
    $("#map_tl").hide();
    }
    })
    • 初始化代码
    var bxmap = bxmap || {};
    bxmap.olWindLayer = {
    map:null,
    wind:null,
    Init:function(bmap){
    this.map = bmap.getMap();
    this.map.getView().setCenter([13501836.676, 2751733.018]);
    this.map.getView().setZoom(3);
    //加载风场数据
    var wind, data;
    axios.get(getRootPath() +"js/main/olWindLayer/gfs.json").then(function (res) {
    if (res.data) {
    data = res.data
    wind = bxmap.olWindLayer.wind = new WindLayer(data, {
    projection: 'EPSG:3857',
    ratio: 1
    })
    wind.appendTo(bxmap.olWindLayer.map)
    }
    });
    },
    clearWind:function(){
    if(bxmap.olWindLayer.wind)
    bxmap.olWindLayer.wind.clearWind();
    }
     
    }
    • 核心代码
    /*!
    * author: FDD <smileFDD@gmail.com>
    * wind-layer v0.0.4
    * build-time: 2018-2-6 17:34
    * LICENSE: MIT
    * (c) 2017-2018 https://sakitam-fdd.github.io/wind-layer
    */
    (function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('openlayers')) :
    typeof define === 'function' && define.amd ? define(['openlayers'], factory) :
    (global.WindLayer = factory(global.ol));
    }(this, (function (ol) { 'use strict';
     
    ol = ol && ol.hasOwnProperty('default') ? ol['default'] : ol;
     
    var Windy = function Windy(params) {
    var VELOCITY_SCALE = 0.005 * (Math.pow(window.devicePixelRatio, 1 / 3) || 1);
    var MIN_TEMPERATURE_K = 261.15;
    var MAX_TEMPERATURE_K = 317.15;
    var MAX_PARTICLE_AGE = 90;
    var PARTICLE_LINE_WIDTH = 1;
    var PARTICLE_MULTIPLIER = 1 / 200;
    var PARTICLE_REDUCTION = Math.pow(window.devicePixelRatio, 1 / 3) || 1.6;
    var FRAME_RATE = 15,
    FRAME_TIME = 1000 / FRAME_RATE;
     
    var NULL_WIND_VECTOR = [NaN, NaN, null];
     
    var builder;
    var grid;
    var date;
    var λ0, φ0, Δλ, Δφ, ni, nj;
     
    var bilinearInterpolateVector = function bilinearInterpolateVector(x, y, g00, g10, g01, g11) {
    var rx = 1 - x;
    var ry = 1 - y;
    var a = rx * ry,
    b = x * ry,
    c = rx * y,
    d = x * y;
    var u = g00[0] * a + g10[0] * b + g01[0] * c + g11[0] * d;
    var v = g00[1] * a + g10[1] * b + g01[1] * c + g11[1] * d;
    var tmp = g00[2] * a + g10[2] * b + g01[2] * c + g11[2] * d;
    return [u, v, tmp];
    };
    ……

    更多的详情见GIS之家小专栏

    对本专栏感兴趣的话,可以关注一波

  • 相关阅读:
    树莓派4B踩坑指南
    树莓派4B踩坑指南
    树莓派4B踩坑指南
    从java反射到注解再到动态代理,一锅端!
    Lc_551学生出勤记录I
    aop日志测试类
    转载-使用@Async异步注解导致该Bean在循环依赖时启动报BeanCurrentlyInCreationException异常的根本原因分析,以及提供解决方案【享学Spring】
    linux 启动和停止脚本
    mysql 2003
    项目启动连不上mysql, Communications link failure
  • 原文地址:https://www.cnblogs.com/giserhome/p/10294661.html
Copyright © 2020-2023  润新知