zoukankan      html  css  js  c++  java
  • MeteoInfoJava解析与绘图教程(六)

    MeteoInfo-Java解析与绘图教程(六)

    这一节主要说的是我们取到自动站的数据,如何通过插值,转化成格点数据,并绘制图层

            //从数据库查询cimiss数据
            List<Map<String,Object>> list = DBUtil.getMapList("SELECT * FROM mete_stationpar_data_2021 WHERE DataTime = '2021-01-01 12:00:00' AND TEM IS NOT NULL");
            //创建站点格点
            StationData stationData = new StationData();
            //循环数据将值塞入格点中
            for (Map<String, Object> item : list) {
                System.out.println(item);
                stationData.addData(String.valueOf(item.get("Station_Name")),
                        Double.parseDouble(item.get("Lon").toString()),
                        Double.parseDouble(item.get("Lat").toString()),
                        Double.parseDouble(item.get("TEM").toString()));
            }
            //读取地图图层
            VectorLayer altMap = MapDataManage.readMapFile_ShapeFile("C:\\Users\\Administrator\\Downloads\\阿勒泰地区\\阿勒泰地区.shp");
            //创建网格设置参数
            GridDataSetting gridDataSetting = new GridDataSetting();
            //设定数据区域
            gridDataSetting.dataExtent = altMap.getExtent();
            //设定格点数
            gridDataSetting.xNum = list.size();
            gridDataSetting.yNum = list.size();
            //创建插值设置
            InterpolationSetting interpolationSetting = new InterpolationSetting();
            //设定格点配置
            interpolationSetting.setGridDataSetting(gridDataSetting);
            //设定插值方法
            interpolationSetting.setInterpolationMethod(InterpolationMethods.IDW_Radius);
            //设定搜索半径
            interpolationSetting.setRadius(10);
            //设置最小点数
            interpolationSetting.setMinPointNum(1);
            //插值到格点
            GridData gridData = stationData.interpolateData(interpolationSetting);
            LegendScheme als = LgsUtil.readFromLgs("D:\\apache-tomcat-8.0.50\\alt色阶\\color\\ECMWF_HR\\TMP.lgs");
            //绘制图层
            VectorLayer layer = DrawMeteoData.createShadedLayer(gridData,als,"","",true);
            //创建视图
            MapView view = new MapView();
            PolygonBreak pb = (PolygonBreak) altMap.getLegendScheme().getLegendBreak(0);
            pb.setDrawFill(false);
            pb.setOutlineColor(Color.GRAY);
            layer = layer.clip(altMap);
            //叠加图层
            view.addLayer(layer);
            view.addLayer(altMap);
    
    
            /**
             * 通用方法,可以抽成工具类
             */
            MapLayout layout  = new MapLayout();
            //去除图形边框
            layout.getActiveMapFrame().setDrawNeatLine(false);
            //区域边界
            Extent extent = view.getExtent();
            //设置矩形的宽和高
            Rectangle bounds = new Rectangle(800, (int) (800 * 1D / extent.getWidth() * extent.getHeight()));
            //设置地图边框
            layout.setPageBounds(new Rectangle(0, 0, bounds.width, bounds.height));
            //设置页面边框
            layout.getActiveMapFrame().setLayoutBounds(new Rectangle(0, 0, bounds.width, bounds.height));
            layout.getActiveMapFrame().setMapView(view);
            layout.exportToPicture(PathUtil.getDeskPath()+"/1.png");
    

    对于该方法主要有几个重点需要关注:

      1.GridDataSetting 它是对矩阵做了布局设置

      2.InterpolationSetting 它是对插值做了设置,InterpolationMethods就包含了几种插值法,但感觉效果最好的是IDW_Radius,而我们绘制的时候最舒服的方法还是克里金插值,如果可以的话,可以根据原理自己封装一个

    图片展示:

     

    简单的绘制基本上都结束了,我也在不停的研究,有新东西我会公布出来,如果大家也有想法可以私聊我来交流一下,让我们对气象开发更加简单舒服 

  • 相关阅读:
    DFS——hdu4068
    java 浮点数定点输出
    中国剩余定理——zoj 3538
    Solr4:设计数据结构,就是配置schema.xml
    Solr4:索引的复制
    Solr4:创建索引时的一些建议
    Java:取得当前日期一周之前/之后的日期,或者是一月之前/之后的日期
    Solr4:利用Filter实现两组关键词组合查询
    MyBatis3入门一(简单查询、插入)
    MyBatis3入门二(增加、删除、修改、查询,自增长字段)
  • 原文地址:https://www.cnblogs.com/zdsgjh/p/15571067.html
Copyright © 2011-2022 走看看