leaflet使用turfjs插件,基于格点数据绘制等值线效果

Posted JackGIS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leaflet使用turfjs插件,基于格点数据绘制等值线效果相关的知识,希望对你有一定的参考价值。

Turf.js官网地址:http://turfjs.org/

案例1:

本案例,是根据模型生成的格点数据(格点是101*101的),生成等值线,并在地图上绘制出等值线的过程。

createFlexGeojson:function(arr)
      
        if (this.flexpartlayer)
        
          if (map.hasLayer(this.flexpartlayer))
          
            map.removeLayer(this.flexpartlayer);
          
        
        //如果没有扩散数据,则直接退出
        if(arr==null||arr.length<=0)
        
          return ;
        
        //1、获取模拟区域网格中心点数组pointArr
        let pointArr=[];
        for(let i=0;i<this.rows;i++)
        
          for(let j=0;j<this.cols;j++)
          
            //if(arr[i][j]==0) continue;0值不能去掉,去掉之后等值线绘制会有bug。等值线的绘制,必须在网格数据基础上才行
            let obj=
              "type": "Feature",
              "properties": "value": 0,
              "geometry": 
                "type": "Point",
                "coordinates": null
            
            obj.properties="value": arr[i][j];//网格中心点数值
            obj.geometry.coordinates=this.getGridCenterCoordinates(i,j);//网格中心点坐标
            pointArr.push(obj);
          
        
        //console.log(pointArr);

        //2、将中心点数组pointArr,组装成featureCollection
        var grid_points = turf.featureCollection(pointArr);
        //console.log(grid_points);

        //3、等值线绘制参数配置
        var isobands_options = 
          zProperty: "value",
          commonProperties: 
            "fill-opacity": 0.8
          ,
          breaksProperties: [
            fill: "#009900",
            fill: "#66C200",
            fill: "#99D600",
            fill: "#CCEB00",
            fill: "#FFCC00",
            fill: "#FF9900",
            fill: "#FF5000",
            fill: "#FF0000"
          ]
        ;
        //4、进行等值线绘制
        var isobands = turf.isobands(
          grid_points,
          //颜色是8个,数据值数组就要9个,比如:[0.1,10,100,1000,10000,100000,1000000,10000000,100000000]
          this.indexArr[this.indexId].turfIntervalArr,
          isobands_options
        );
        //console.log(isobands);

        //5、把turf的FeatureCollection转换成leaflet的feature数组
        let geoArr=isobands.features;
        //console.log(geoArr);

        //6、geoArr在map上绘制
        this.flexpartlayer = L.geoJson(geoArr, style: this.getFlexStyle);
        map.addLayer(this.flexpartlayer);
      ,
      //获取模拟区域每个网格的中心点坐标
      getGridCenterCoordinates:function(i,j)
        let min_lat=this.imageBounds[0][0];
        let min_lon=this.imageBounds[0][1];

        let var_lat=this.factoryArr[this.factorySelectedXh].stepLat;
        let var_lon=this.factoryArr[this.factorySelectedXh].stepLon;

        let minx=min_lon+var_lon*j;
        let miny=min_lat+var_lat*i;
        let maxx=min_lon+var_lon*(j+1);
        let maxy=min_lat+var_lat*(i+1);

        return [(minx+maxx)/2,(miny+maxy)/2];//geojson的格式就是[lon,lat]
      ,
      getFlexStyle:function(feature)
      
        //let alpha=feature.properties.value===0?0:0.8;

        return 
          weight: 1,
          opacity: 0,
          color: \'#fff\',
          fillOpacity: 0.8,
          fillColor: feature.properties.fill
      ,

 

 

如果是根据离散的点来生成差值图,则先需要将离散点进行差值,生成差值后的格点数据。然后参考上面实例绘制等值线效果。

可能会用到下面代码:

// 创建等值线区域
var pointGrid = turf.pointGrid(extent, cellWidth, units: \'miles\' );
//基于格点绘制等值区域,并为区域配置颜色
var lines = turf.isolines(pointGrid, breaks, zProperty: \'temperature\' );

//插值生成格点数据
turf.interpolate()
///基于格点绘制等值区域
turf.isobands()
//利用边界裁剪区域
turf.intersect()      

以上是关于leaflet使用turfjs插件,基于格点数据绘制等值线效果的主要内容,如果未能解决你的问题,请参考以下文章

在反应传单上使用Leaflet插件

Leaflet绘制热力图

Leaflet绘制热力图

leaflet 结合 d3.js 实现 geojson 数据地形剖面分析(附源码下载)

Leaflet-locatecontrol 插件:ios 应用程序在运动和方向弹出权限上崩溃

如何使用 Leaflet 的 Geosearch 插件获取常规表单字段以自动完成地理搜索?