zoukankan      html  css  js  c++  java
  • MeteoInfo-Java解析与绘图教程(三)

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

    上文我们说到简单绘制色斑图(卫星云图),但那种效果可定不符合要求,一般来说,客户需要的是在地图上色斑图的叠加,或者是将图片导出分别是这两种效果

    当然还有一种是将边界上的数据去除掉,例如下图,这种是数据生成色斑图,不适用卫星,所以卫星云图不会裁剪数据,留到下节说明

    首先说第一种,在前端geoserver上叠加图层的实现方式

            MeteoDataInfo meteo = new MeteoDataInfo();
            meteo.openAWXData("D:\Download\ANI_VIS_R04_20210812_0800_FY2G.AWX");
            GridData grid = meteo.getGridData();
            //色阶文件
            String colorPath = "D:\apache-tomcat-8.0.50\alt色阶\AWX.pal";
            //绘制图层
            RasterLayer layer = DrawMeteoData.createRasterLayer(grid, "",colorPath);
            //创建视图
            MapView view = new MapView();
            //叠加图层
            view.addLayer(layer);
            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()+"/2.png");

    这里我们需要注意的是区域边界是如何得出的,区域边界就是最大最小经纬度,而控制最大最小经纬度的度数就是数据,数据的本质就是二维数组,x与y就是经纬度,x和y对应的就是当前点的数值

    下面就是第二种图片生成方式

            MeteoDataInfo meteo = new MeteoDataInfo();
            meteo.openAWXData("D:\Download\ANI_VIS_R04_20210812_0800_FY2G.AWX");
            GridData grid = meteo.getGridData();
            //色阶文件
            String colorPath = "D:\apache-tomcat-8.0.50\alt色阶\AWX.pal";
            //绘制图层
            RasterLayer layer = DrawMeteoData.createRasterLayer(grid, "",colorPath);
    
            //读取地图
            VectorLayer xzmap = MapDataManage.readMapFile_ShapeFile("C:\Users\Administrator\Documents\WXWork\1688854031041609\Cache\File\2021-08\中国_省界.shp");
    
            //描述地图边界线
            PolygonBreak pb = (PolygonBreak) xzmap.getLegendScheme().getLegendBreak(0);
            //是否设置填充
            pb.setDrawFill(false);
            //设置轮廓大小
    //        pb.setOutlineSize(2f);
            //设置轮廓颜色
            pb.setOutlineColor(Color.white);
            //创建视图
            MapView view = new MapView();
            //叠加图层
            view.addLayer(layer);
            view.addLayer(xzmap);
            //创建地图页面设置类
            MapLayout layout  = new MapLayout();
            //去除图形边框
            layout.getActiveMapFrame().setDrawNeatLine(false);
            //区域边界
            Extent extent = xzmap.getExtent();
            //设置矩形的宽和高
            Rectangle bounds = new Rectangle(800, (int) (800 * 1D / extent.getWidth() * extent.getHeight()));
            //设置地图边框
            layout.setPageBounds(new Rectangle(0, 0, bounds.width+100, bounds.height+100));
            //设置页面边框
            layout.getActiveMapFrame().setLayoutBounds(new Rectangle(50, 50, bounds.width, bounds.height));
            //设置缩放程度
            view.zoomToExtent(extent);
            //设置所有图层范围
            view.setExtent(extent);
            layout.getActiveMapFrame().setMapView(view);
            layout.getActiveMapFrame().setDrawGridLine(true);
    
            layout.exportToPicture(PathUtil.getDeskPath()+"/2.png");

    请注意,我将轮廓大小去除了,因为这个设置本质上是加粗样式,用了有些粗,所以一般都是使用默认配置

    layout.getActiveMapFrame()这个方法就是获取活动布局图,是控制大部分样式的api,如果修改样式就是可以调用其中的api

    下节讲解第三种图片生成方式

  • 相关阅读:
    音乐商店
    sort函数
    优先队列
    畅通工程 并查集,最小生成树,最短路径
    线段树(segment tree )
    bfs
    完全背包
    【Matlab】向图像域添加噪声/高斯/均匀/伽马/指数/椒盐
    【手帐】Bullet Journal教程
    【Matlab】取整函数:fix/round/floor/ceil
  • 原文地址:https://www.cnblogs.com/zdsgjh/p/15175966.html
Copyright © 2011-2022 走看看