库尔勒 网站建设,本地电脑如何做网站服务器,网络服务遇到问题请稍后再试吧,wordpress两个网站同步目录 前言
一、原来的生成方案问题
1、无法自动读取数据的Bounds
2、专题图高宽比例不协调
二、专题图生成优化
1、直接读取矢量数据的Bounds
2、专题图成果抗锯齿
3、专题成果高宽比例自动调节
三、总结 前言 在当今数字化浪潮中#xff0c;地理信息系统#xff08;…目录 前言
一、原来的生成方案问题
1、无法自动读取数据的Bounds
2、专题图高宽比例不协调
二、专题图生成优化
1、直接读取矢量数据的Bounds
2、专题图成果抗锯齿
3、专题成果高宽比例自动调节
三、总结 前言 在当今数字化浪潮中地理信息系统GIS的应用场景日益丰富从城市规划到环境监测从交通运输到资源管理GIS 技术为各领域提供了强大的空间数据分析与可视化支持。而专题图作为 GIS 表达的重要形式其生成质量直接影响着信息传达的准确性和直观性。以下图为例要求绘制与湖南省相邻的其它市级行政区划的专题图 传统的 GIS 专题图制作往往面临着诸多挑战。一方面地图边界固定当面对不同尺度或范围的数据时要么出现数据超出边界的情况要么导致画面留白过多严重影响视觉效果与信息呈现完整性。另一方面高宽比例的把控难度较大不同数据集或应用场景下要确保地图在各种尺寸的屏幕和页面布局中保持协调的比例展示避免图形拉伸或压缩变形这需要耗费大量的时间和精力进行手动调整极大地降低了工作效率也难以满足批量生产与动态更新的需求。 GeoTools 作为一款功能强大的开源 GIS 工具库为解决上述问题提供了丰富的 API 和灵活的开发框架。利用 GeoTools开发者能够深入底层数据处理与图形渲染流程实现对专题图生成过程的精细化管控。通过自定义投影变换、数据裁剪算法以及图形布局策略可以轻松应对各种复杂场景让专题图自动适应不同边界并始终保持高宽等比例的精准呈现。 本文将深入探讨基于 GeoTools 实现 GIS 专题图自适应边界及高宽等比例生成的实践方法。从 GeoTools 的环境搭建与核心模块介绍入手详细讲解如何利用其数据访问、样式定义和渲染引擎等功能结合实际案例代码演示逐步剖析实现自动适应边界和等比例生成的关键技术要点与优化技巧。同时还会分享在实际项目应用中的经验教训以及如何根据业务需求进行扩展定制旨在为广大 GIS 开发者提供一份实用、高效的解决方案参考资料助力提升 GIS 专题图制作的自动化水平与质量使其能够更好地服务于各行业的空间信息分析与决策支持工作。
一、原来的生成方案问题 在之前的博客中曾经介绍过如何使用Geotools来生成shapefile的缩略图原文地址基于Java和GeoTools的Shapefile矢量数据缩略图生成实践虽然实现了基本的功能。可以使用Geotools来渲染SLD样式并且生成本地的缩略图。但是也还是存在一些点没有优化比如以下两点。第一是没有实现自动的从待生成的Shapefile数据中获取数据的Bounds边界而是使用Qgis软件来进行手动设置的模式。第二个是对于生成的专题图结果专题图的高度和宽度比例跟shapefile的原始尺寸没有很好的兼容从实际效果上来看就是比较不协调很生硬。下面将对这两点来进行深入说明。
1、无法自动读取数据的Bounds 为了让第一次看到博客的朋友也有一个简单的认识这里我将原来生成图片的关键方法贴出来公共大家参考
public static void createUSA() {long start System.currentTimeMillis();Shp2Image shp2img new Shp2Image();shp2img.setMap(new MapContent());String shpPath F:/xxx/maps/countries.shp;String sldPath F:/xxx/maps/countries1.1.0-2.sld;String imgPath D:/countries0228-美国.png;MapString, Object paras new HashMapString, Object();double[] bbox_usa new double[] { -145.40999, 9.93976, -65.062300,81.12722 };paras.put(bbox, bbox_usa);paras.put(width, 1020);paras.put(height, 800);shp2img.addShapeLayer(shpPath, sldPath);shp2img.getMapContent(paras, imgPath);System.out.println(生成完成共耗时 (System.currentTimeMillis() - start) ms);
} 在以上的代码中就包含了两个关键的信息。第一个就是bbox_usa,这表示漂亮国的Bbox值也就是Bounds边界信息。 关于Bounds可以使用Qgis或者Arcgis等软件进行获取以Qgis为例当我们打开一份shapefile矢量数据之后右键属性可以看到数据的Bounds值如下图所示 这里的范围值就是我们需要的目标值将上述值复制到代码中的bbox_usa数组中即可。如果是处理单张缩略图生成使用qgis等辅助软件来帮助提取固然没有问题如果需要批量作业这么大量的人工干预无疑降低了工作效率。
2、专题图高宽比例不协调 关于专题图的高度和宽度比例不协调的原因其实跟边界范围差不多但是又存在一定的差异即边界值使用qgis获取的值是非常固定的但是生成的专题图的高度和宽度是我们通过硬编码的方式指定的因此具体的比例与原始的数据无法实现对应从而导致将数据渲染到图片后整体效果是失真的即比例非常不协调比如在指定宽度和高度为1068*749的设置下湖南省的乡镇区划专题图效果如下 通过上图可以看到通过预设的高度和宽度不能很好的进行专题图渲染。这也是第二个需要解决的问题。
二、专题图生成优化 那么如何优化专题图的生成让专题图做的更加美观符合我们的业务需要呢主要的优化方向也是包含一下三点。第一个是为了提高效率需要使用Geotools来自动读取矢量文件的边界以此来达到自动计算范围的目的。第二个是为了在地图放大时也能保持一定的清晰度因此在生成PNG图片时需要抗锯齿以此满足图片的方法需求。第三是可以根据自动读取的边界范围自动进行高度和宽度的比例自适应调整。本节将主要介绍这三点优化内容。
1、直接读取矢量数据的Bounds 在GeoTools中要想实现自动读取Shapefile的地图边界数据可以通过以下两种形式获取第一个是通过Layer对象第二个是从mapContent对象的视图对象中获取。首先来介绍如何从Layer图层对象获取关键代码如下
Layer layer new FeatureLayer(featureSource, style);
this.map.addLayer(layer);
//这里这是范围
this.setEnvelope(layer.getBounds()); 第二种是可以通过mapContent对象来获取关键代码如下
renderer.setMapContent(map);
// 从MapContent中获取地图边界范围
ReferencedEnvelope bounds map.getViewport().getBounds(); 以上者两种方法都是可以的大家可以根据实际情况使用。
2、专题图成果抗锯齿 针对专题图生成后如果有图片放大的需求在放大的时候就会失真这时候就需要进行抗锯齿的设置。这要求在进行专题图的图片渲染输出时设置图片渲染的参数以此来进行图片的抗锯齿效果实现关键代码如下
/**
* 设置抗锯齿以及其他相关渲染提示。
* param g2d 绘制目标的 {link Graphics2D} 上下文。
*/
private static void setAntiAliasing(Graphics2D g2d,int width,int height) {g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));g2d.setColor(Color.WHITE);g2d.fillRect(0, 0, width,height);// 启用抗锯齿g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);g2d.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_GASP);g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
}
3、专题成果高宽比例自动调节 要想实现专题成果图的尺寸比例自动调节最关键的操作是需要知道本身数据的高宽比通过固定的高宽比来求解实际生成图片的高宽这样设置的效果应该是比较符合实际需要的专题图的。所以问题的关键就是自动计算高宽比而矢量文件的高宽我们可以通过bounds来获取。因此高宽比可以通过bounds的高度和宽度的计算得到。
// 输出图像大小例如宽度x高度
int width 1920; // 可根据需求调整
// 计算地理宽高比
double aspectRatio bounds.getWidth() / bounds.getHeight();
//根据比例计算新高度
int height (int) Math.round(width / aspectRatio); 上面代码中的1920只是一个示意实际情况可以设置成一个范围值固定了宽度后可以根据宽高比自动计算另一个参数在得到Height后再进行画布的渲染和出图。关键代码如下
// 创建一个缓冲区用于接收渲染的结果
BufferedImage image new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D gr image.createGraphics();
// 设置渲染提示以提高质量和减少锯齿
setAntiAliasing(gr,width,height); 最终可以得到一张比较符合我们业务需要的专题图如下图所示可以看到专题图的边界范围是自动获取、图片放大后锯齿感比较小经过计算高宽比之后的图片尺寸看起来也比较协调 三、总结 以上就是本文的主要内容本文将深入探讨基于 GeoTools 实现 GIS 专题图自适应边界及高宽等比例生成的实践方法。从 GeoTools 的环境搭建与核心模块介绍入手详细讲解如何利用其数据访问、样式定义和渲染引擎等功能结合实际案例代码演示逐步剖析实现自动适应边界和等比例生成的关键技术要点与优化技巧。同时还会分享在实际项目应用中的经验教训以及如何根据业务需求进行扩展定制旨在为广大 GIS 开发者提供一份实用、高效的解决方案参考资料助力提升 GIS 专题图制作的自动化水平与质量使其能够更好地服务于各行业的空间信息分析与决策支持工作。行文仓促定有不当之处恳请各位专家学者博友在评论区留下宝贵的意见万分感激。 文章转载自: http://www.morning.nllst.cn.gov.cn.nllst.cn http://www.morning.jfwrf.cn.gov.cn.jfwrf.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.xmwdt.cn.gov.cn.xmwdt.cn http://www.morning.bypfj.cn.gov.cn.bypfj.cn http://www.morning.rjnky.cn.gov.cn.rjnky.cn http://www.morning.yxbdl.cn.gov.cn.yxbdl.cn http://www.morning.jgnst.cn.gov.cn.jgnst.cn http://www.morning.xltwg.cn.gov.cn.xltwg.cn http://www.morning.rdpps.cn.gov.cn.rdpps.cn http://www.morning.cpwmj.cn.gov.cn.cpwmj.cn http://www.morning.gjlst.cn.gov.cn.gjlst.cn http://www.morning.byrlg.cn.gov.cn.byrlg.cn http://www.morning.ndyrb.com.gov.cn.ndyrb.com http://www.morning.mcwgn.cn.gov.cn.mcwgn.cn http://www.morning.thzwj.cn.gov.cn.thzwj.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.rbknf.cn.gov.cn.rbknf.cn http://www.morning.srcth.cn.gov.cn.srcth.cn http://www.morning.pbygt.cn.gov.cn.pbygt.cn http://www.morning.xyrw.cn.gov.cn.xyrw.cn http://www.morning.rnpt.cn.gov.cn.rnpt.cn http://www.morning.touziyou.cn.gov.cn.touziyou.cn http://www.morning.mphfn.cn.gov.cn.mphfn.cn http://www.morning.zrpys.cn.gov.cn.zrpys.cn http://www.morning.nfgbf.cn.gov.cn.nfgbf.cn http://www.morning.qgjgsds.com.cn.gov.cn.qgjgsds.com.cn http://www.morning.knlyl.cn.gov.cn.knlyl.cn http://www.morning.wgrm.cn.gov.cn.wgrm.cn http://www.morning.xqcbz.cn.gov.cn.xqcbz.cn http://www.morning.qkrgk.cn.gov.cn.qkrgk.cn http://www.morning.ktbjk.cn.gov.cn.ktbjk.cn http://www.morning.lpqgq.cn.gov.cn.lpqgq.cn http://www.morning.cflxx.cn.gov.cn.cflxx.cn http://www.morning.shawls.com.cn.gov.cn.shawls.com.cn http://www.morning.lsxabc.com.gov.cn.lsxabc.com http://www.morning.kpqjr.cn.gov.cn.kpqjr.cn http://www.morning.mrncd.cn.gov.cn.mrncd.cn http://www.morning.snjpj.cn.gov.cn.snjpj.cn http://www.morning.xtdtt.cn.gov.cn.xtdtt.cn http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn http://www.morning.yzygj.cn.gov.cn.yzygj.cn http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn http://www.morning.lsnbx.cn.gov.cn.lsnbx.cn http://www.morning.rbxsk.cn.gov.cn.rbxsk.cn http://www.morning.ruifund.com.gov.cn.ruifund.com http://www.morning.pkrtz.cn.gov.cn.pkrtz.cn http://www.morning.tqrxm.cn.gov.cn.tqrxm.cn http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.hrpjx.cn.gov.cn.hrpjx.cn http://www.morning.rpwck.cn.gov.cn.rpwck.cn http://www.morning.divocn.com.gov.cn.divocn.com http://www.morning.dzdtj.cn.gov.cn.dzdtj.cn http://www.morning.yhplt.cn.gov.cn.yhplt.cn http://www.morning.jrdbq.cn.gov.cn.jrdbq.cn http://www.morning.ywpwq.cn.gov.cn.ywpwq.cn http://www.morning.pjwfs.cn.gov.cn.pjwfs.cn http://www.morning.rgksz.cn.gov.cn.rgksz.cn http://www.morning.cbynh.cn.gov.cn.cbynh.cn http://www.morning.tsyny.cn.gov.cn.tsyny.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.txkrc.cn.gov.cn.txkrc.cn http://www.morning.rdxp.cn.gov.cn.rdxp.cn http://www.morning.zbjfq.cn.gov.cn.zbjfq.cn http://www.morning.youyouling.cn.gov.cn.youyouling.cn http://www.morning.sgqw.cn.gov.cn.sgqw.cn http://www.morning.xuejitest.com.gov.cn.xuejitest.com http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.hwpcm.cn.gov.cn.hwpcm.cn http://www.morning.rkck.cn.gov.cn.rkck.cn http://www.morning.yxgqr.cn.gov.cn.yxgqr.cn http://www.morning.srbfp.cn.gov.cn.srbfp.cn http://www.morning.wmdbn.cn.gov.cn.wmdbn.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn http://www.morning.wglhz.cn.gov.cn.wglhz.cn http://www.morning.jkcnq.cn.gov.cn.jkcnq.cn