MeteoInfo-Java 解析和映射教程(III)
最编程
2024-05-06 09:15:02
...
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 解析和映射教程(III)
-
MeteoInfo-Java 解析和映射教程(二)
-
十八世纪的解析几何和微分几何(III)
-
Apache 支持 shtml 和 include 文件解析设置教程
-
vmware-17 虚拟机安装教程和版本密钥(保姆级,含图解,无需注册账号) - III.
-
树莓派打造自家私人云盘实战教程(第二部分):Docker+NextCloud+Nginx 教你一步步建站并上手" - 利用 Docker 架设简易高效的环境部署指南 - Docker 在树莓派上的安装入门,一看就会 - 参考链接:树莓派Docker安装指南 - 探索免费私有云盘方案:NextCloud 与 OwnCloud 同源平台解析 无需文件加密功能的话,NextCloud 是我们的首选。它与 SeaFile 相比,更加符合需求。 对于照片和视频备份同步,Daemon Sync 显示出了出色的表现,安装过程简单易懂,不妨一试身手。 现在,让我们一起步入正文,动手实践搭建属于自己的私人云盘吧!
-
Pyecharts实战教程:折线图和柱状图示例深度解析
-
CSS行高和垂直对齐深度解析:line-height与vertical-align的图文教程
-
使用Ognl表达式的基础教程:语法解析与数据root和ContextMap的获取方法
-
使用Ognl表达式的基础教程:语法解析与数据root和ContextMap的获取方法