等值分析+四至内散点+请求后台服务(前端ol3展示部分)

该文描述了在OpenLayers中如何初始化、销毁图层,以及动态生成散点并设置图层样式的过程。同时,文章提到了通过Ajax请求后台数据,并进行等值分析的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

瞎折腾。蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦蹦无聊

1:ol图层添加

    /**
     * 初始化添加绘制图层信息
     */
    Ios.prototype.addVectorLayer = function(){
        console.info("图层个数--1--addVectorLayer--"+prop.map.getLayers().getLength());
        prop.isoLayer = new ol.layer.Vector({
            className:prop.className,
            source: new ol.source.Vector(),
            zIndex:prop.that.getMaxZindex(),
            style: prop.that.getIosStyle()
        });
        prop.map.addLayer(prop.isoLayer);
        console.info("图层个数--2--addVectorLayer--"+prop.map.getLayers().getLength());
    }
    /**
     * 循环所有图层获取最大的ZIndex
     */
    Ios.prototype.getMaxZindex = function(){
      var layers = prop.map.getLayers();
      var zindex = 0;
      layers.forEach(function(item,i){
        if(item.getZIndex() > zindex){
          zindex = item.getZindex;
        }
      });
      if(zindex == 0)
        console.warn("error  zindex = 0");
      return zindex++;
    }
    /**
     * 销毁图层
     */
    Ios.prototype.destroy = function(){
        prop.map.removeLayer(prop.isoLayer);
    }

2:四至内散点计算

        if("line,area".indexOf(opt.type) == -1){
            console.info("类型只能是line/area");
            opt.type = "area";
        }
        prop.iosType = opt.type;//根据类型获取展示方式
        //请求生成等值分析
        var box = "113.751709,36.9683570,114.622817,37.3623799";
        var boxArr = box.split(",");
        var values= "";
        for(var i = 0 ; i < prop.colors.length ; i++){
            values += prop.colors[i].value;
            if(i < prop.colors.length-1){
                values += ",";
            }
        }
        // 添加散点数据图层
        if(!prop.pVector){
            prop.pVector = new ol.layer.Vector({
                source: new ol.source.Vector(),
                zIndex:prop.that.getMaxZindex()
            });
            prop.map.addLayer(prop.pVector);
        }else{
            prop.pVector.getSource().clear();
        }
        //生成随机数
        var x = "";
        var y="";
        var vz="";
        var size = 300;
        var rx = 0;
        var ry = 0;
        var rv = 0;
        for(var i = 0 ; i < size ; i++ ){
            rx = parseFloat(boxArr[0]) + Math.random() * (parseFloat(boxArr[2]) - parseFloat(boxArr[0]));
            ry = parseFloat(boxArr[1]) + Math.random() * (parseFloat(boxArr[3]) - parseFloat(boxArr[1]));
            rv = parseInt(Math.random()*10)*10 + parseInt(Math.random()*10);
            //添加散点到图层
            prop.pVector.getSource().addFeature(new ol.Feature({ geometry: new ol.geom.Point([rx, ry]),zv:rv}));
            x += rx;
            y += ry;
            vz+= rv;
            if(i != size - 1){
                x +=  ","
                y += ","
                vz += ","
            }
        }

3:请求后台获取数据

        var clip = "sld/hbs_xt.shp"; // .shp就是读取文件 qg.shp 全国  数据就是后台会分成多边形数据 x,y,x,y  hbs_xt.shp 河北邢台
        $.ajax({
            type:"POST",
            url:"/gis-server/GeoControl/ios",
            contentType:"application/json", //发送信息至服务器时内容编码类型。
            dataType:"json", // 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息来智能判断,比如XML MIME类型就被识别为XML。
            data:JSON.stringify({type:2,lons:x,lats:y,vzs:vz,value:values,box:box,clip:clip,cclip:"0"}),// cclip 是否裁剪 0不 1是
            success:function(result){
                if(result.state != 1){
                    alert(result.info);
                    return;
                }
                prop.isoLayer.getSource().clear();
                if(result.obj){
                    var features = (new ol.format.GeoJSON()).readFeatures(result.obj);
                    prop.isoLayer.getSource().addFeatures(features);
                }else{
                    alert("图形数据获取失败");
                }
            }
        });

4:图层样式配置

    /**
     * 根据类型获取到当前图层的样式
     * line 等值线
     * area 等值面
     */
    Ios.prototype.getIosStyle = function(){
        return function (feature, resolution) {
            var zv = feature.get("zv");
            var color = "0.3,0,0,0";//没有配置颜色就是 白色透明度0.3
            var colors = prop.colors;
            for(var i = 0 ; i < colors.length-1 ; i++){
                if(zv>= colors[i].value && zv <= colors[i+1].value){
                    color = colors[i].color;
                }
            }
            if(prop.iosType == "line"){
                return new ol.style.Style({
                    stroke: new ol.style.Stroke({
                        color: "rgba(" + color + ")",
                        width: 3
                    }),
                });
            }else{
                return new ol.style.Style({
                    fill: new ol.style.Fill({
                        color: "rgba(" + color + ")"
                    })
                });
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值