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

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

MeteoInfo-Java解析与绘图教程(三)的更多相关文章

  1. MeteoInfo-Java解析与绘图教程(一)

    MeteoInfo-Java解析与绘图教程(一) 已经进入开发行业很多年了,这两年一直从事气象开发行业,为此对气象绘图有了新的见解 像色斑图与卫星图一直都有python去绘制,在偶然的情况下,我接触到 ...

  2. MeteoInfo-Java解析与绘图教程(七)_图层添加站点名称或区域名称

    MeteoInfo-Java解析与绘图教程(七)_图层添加站点名称或区域名称 在上文说了用自动站的数据经过插值绘制色斑图,这种一般是在geoserver上叠加图片呈现,但遇到后端导出图片,我们又想添加 ...

  3. MeteoInfo-Java解析与绘图教程(八)_java解析卫星FY-4A一级产品文件(HDF举例)

    MeteoInfo-Java解析与绘图教程(八)_java解析卫星一级产品文件(HDF举例) 最近解析卫星数据遇到了一级产品,它的解析方式与之前文章说的有些不同,特此补充一下 卫星的一级产品,里面是没 ...

  4. MeteoInfo-Java解析与绘图教程(四)

    MeteoInfo-Java解析与绘图教程(四) 上文我们说到,将地图叠加在色斑图上,但大部分都是卫星绘图,现在开始讲解micaps数据绘图,同样也是更多自定义配置 首先我们解析micaps数据,将之 ...

  5. MeteoInfo-Java解析与绘图教程(五)

    MeteoInfo-Java解析与绘图教程(五) 最近太忙了,终于有时间继续写了,上文说到了基本上的绘图方法,但缺少色阶呈现,一般图叠加着地图上,后端不需要管色阶,但也要注意web页面色阶和我们的生成 ...

  6. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

  7. Java 解析 XML

    Java 解析 XML 标签: Java基础 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内存中分配一个树形结构,把XML的标签,属性和文本等元素都封装成树的节点对象 优点 ...

  8. Fastify 系列教程三 (验证、序列化和生命周期)

    Fastify 系列教程: Fastify 系列教程一 (路由和日志) Fastify 系列教程二 (中间件.钩子函数和装饰器) Fastify 系列教程三 (验证.序列化和生命周期) 验证 Fast ...

  9. XML基础+Java解析XML +几种解析方式的性能比较

    XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数 ...

随机推荐

  1. CG-CTF Our 16bit wars

    一题纯看汇编的题 INT 21H, ah为0A时,是输入字符串到缓冲区DS:DX,DX+1地址存放着字符串长度 说明了长度为35 这里加密是右移3位异或左移5位, 告诉了我们加密后的字符串是什么,写个 ...

  2. Leetcode No.1 Two Sum(c++哈希表实现)

    1. 题目 1.1 英文题目 Given an array of integers nums and an integer target, return indices of the two numb ...

  3. 高质量代码优化!谈谈重构项目中if-else代码的几点建议

    switch if - else只适合在3层之内使用 当条件判断较多时,可以首先考虑使用switch interface 当判断条件还可能动态增加时,可以考虑将switch进一步优化,引入接口inte ...

  4. 史上最强Tableau Server 安装教程

    前言 本文介绍的是单节点部署Tableau Server. 安装前 1.Tableau Server 的单节点安装的最低硬件推荐配置: 处理器: 64 位 必须支持 SSE4.2 和 POPCNT 指 ...

  5. 【BZOJ 4771】七彩树

    一直TLE的原因竟然是数组开太大了导致\(memset\)清空耗时超限,亏我还调了1天啊(T^T) 题目大意 给定一颗树,每个节点都有一个颜色,要求多次询问某个节点\(x\)的子树中深度不超过\(d\ ...

  6. python使用笔记22--mock接口开发

    1.mock接口开发 mock是模拟一个接口的意思 为了不阻止测试,开发一个接口,返回你想要的数据,模拟各种场景 需要安装第三方模块flask,flask是web轻量级开发框架 1.1 flask p ...

  7. PYTHON startswith (endswith类似)

    Python startswith()方法Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False.如果参数 beg 和 end ...

  8. [刘阳Java]_SpringMVC文件上传第1季_第10讲

    今天来介绍一个关于SpringMVC框架的文件上传功能.首先我个人感觉SpringMVC框架的文件上传还是要比Struts2框架要好用一些,灵活性更强.因为SpringMVC框架的文件上传有几种不同的 ...

  9. JPcap入门

    1,参照入门:安装第一个代码:https://blog.csdn.net/qq_37638061/article/details/80710143 2,数据解析,不可用但有启发意义:https://b ...

  10. C语言变量为何先定义后使用

    C语言中,对变量的使用,首先要先定义.说明其数据类型.原因可能如下: 1不同类型的变量,其编码表示方式可能不同. 2不同类型的变量,其占有的空间大小不同.不事先说明无法在内存中开辟空间.