第一步:

arcmap创建工程使用ArcGIS_SLD_Converter导出sld

第二步:编写代码实现,直接上代码

import java.awt.*;import java.awt.image.BufferedImage;import java.io.File;import java.nio.charset.Charset;import java.util.HashMap;import java.util.Map;import javax.imageio.ImageIO;import org.geotools.data.FeatureSource;
import org.geotools.data.shapefile.ShapefileDataStore;import org.geotools.data.simple.SimpleFeatureSource;import org.geotools.factory.CommonFactoryFinder;import org.geotools.geometry.jts.ReferencedEnvelope;import org.geotools.map.FeatureLayer;import org.geotools.map.Layer;import org.geotools.map.MapContent;import org.geotools.referencing.crs.DefaultGeographicCRS;import org.geotools.renderer.lite.StreamingRenderer;import org.geotools.styling.SLD;
import org.geotools.styling.SLDParser;import org.geotools.styling.Style;import org.geotools.styling.StyleFactory;import org.opengis.referencing.crs.CoordinateReferenceSystem;public class Shape2Image {private static MapContent map = new MapContent();/*** 添加shp文件* @param shpPath*/public void addShapeLayer(String shpPath, String sldPath){try{File file = new File(shpPath);ShapefileDataStore shpDataStore = null;shpDataStore = new ShapefileDataStore(file.toURL());//设置编码Charset charset = Charset.forName("GB18030");shpDataStore.setCharset(charset);String typeName = shpDataStore.getTypeNames()[0];SimpleFeatureSource featureSource = null;featureSource = shpDataStore.getFeatureSource (typeName);//SLD的方式File sldFile = new File(sldPath);StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory();SLDParser stylereader = new SLDParser(styleFactory, sldFile.toURI().toURL());Style[] stylearray = stylereader.readXML();Style style = stylearray[0];//默认的方式//            Style style = SLD.createSimpleStyle(featureSource.getSchema());
//
//            SLD.setPolyColour(style, Color.RED );Layer layer = new FeatureLayer(featureSource, style);map.addLayer(layer);}catch(Exception e){e.printStackTrace();}}/*** 添加shp文件* @param featureSource*/public void addShapeLayer(FeatureSource featureSource, String sldPath){try{//SLD的方式File sldFile = new File(sldPath);StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory();SLDParser stylereader = new SLDParser(styleFactory, sldFile.toURI().toURL());Style[] stylearray = stylereader.readXML();//Style style = stylearray[0];//默认的方式Style style = SLD.createSimpleStyle(featureSource.getSchema());SLD.setPolyColour(style, Color.RED );Layer layer = new FeatureLayer(featureSource, style);map.addLayer(layer);}catch(Exception e){e.printStackTrace();}}/*** 根据四至、长、宽获取地图内容,并生成图片* @param paras* @param imgPath*/public void getMapContent(Map paras, String imgPath){try{double[] bbox = (double[]) paras.get("bbox");double x1 = bbox[0], y1 = bbox[1],x2 = bbox[2], y2 = bbox[3];int width = (int) paras.get("width"),height=(int) paras.get("height");// 设置输出范围CoordinateReferenceSystem crs = DefaultGeographicCRS.WGS84;ReferencedEnvelope mapArea = new ReferencedEnvelope(x1, x2, y1, y2, crs);// 初始化渲染器StreamingRenderer sr = new StreamingRenderer();sr.setMapContent(map);// 初始化输出图像BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_ARGB);Graphics g = bi.getGraphics();((Graphics2D) g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);Rectangle rect = new Rectangle(0, 0, width, height);// 绘制地图sr.paint((Graphics2D) g, rect, mapArea);//将BufferedImage变量写入文件中。ImageIO.write(bi,"png",new File(imgPath));}catch(Exception e){e.printStackTrace();}}
}

注意:编码使用GB18030解决中文标注问题

第三步调用代码编写:

  @GetMapping("/exportMap")@ResponseBodypublic String exportMap(){long start = System.currentTimeMillis();Shape2Image shp2img = new Shape2Image();String shpPath = JeeThinkConfig.getRegionpath()+"sxj/"+"51.shp";String sldPath = JeeThinkConfig.getRegionpath()+"sxj/"+"51.sld";String shpPath1 = JeeThinkConfig.getRegionpath()+"sxj/"+"qx.shp";String sldPath1 = JeeThinkConfig.getRegionpath()+"sxj/"+"qx.sld";String shpPath5 = JeeThinkConfig.getRegionpath()+"sxj/"+"legendLabel.shp";String sldPath5 = JeeThinkConfig.getRegionpath()+"sxj/"+"legendLabel.sld";String sldPath2 = JeeThinkConfig.getRegionpath()+"sxj/"+"warnR.sld";String shpPath3 = JeeThinkConfig.getRegionpath()+"sxj/"+"title.shp";String sldPath3 = JeeThinkConfig.getRegionpath()+"sxj/"+"title.sld";String shpPath6 = JeeThinkConfig.getRegionpath()+"sxj/"+"subtitle.shp";String sldPath6 = JeeThinkConfig.getRegionpath()+"sxj/"+"subtitle.sld";String shpPath4 = JeeThinkConfig.getRegionpath()+"sxj/"+"LegendP.shp";String sldPath4 = JeeThinkConfig.getRegionpath()+"sxj/"+"LegendP.sld";String imgPath = JeeThinkConfig.getRegionpath()+"png/"+"warn3.png";String geots="";WarnGeoInfo warnGeoInfo=new WarnGeoInfo();warnGeoInfo.setFilename("G_202104020824024.json");List<WarnGeoInfo> list = warnGeoInfoService.selectWarnGeoInfoList(warnGeoInfo);if(list.size()>0){geots= list.get(0).getGeojson();}FileFormat.geojson2Shape(geots,"H:\\scdz\\sxj\\warn2.shp");Map paras = new HashMap();double[] bbox = new double[]{97.347607,25.513332,108.542384,36.119336};paras.put("bbox", bbox);paras.put("width", 1034);paras.put("height", 862);shp2img.addShapeLayer(shpPath3, sldPath3);shp2img.addShapeLayer(shpPath6, sldPath6);shp2img.addShapeLayer(shpPath4, sldPath4);//        shp2img.addShapeLayer(GeoJSONUtil.creatFeatureSourceByCollection(GeoJSONUtil.readGeoJsonByString(geots)), sldPath2);shp2img.addShapeLayer("H:\\scdz\\sxj\\warn2.shp", sldPath2);shp2img.addShapeLayer(shpPath, sldPath);shp2img.addShapeLayer(shpPath1, sldPath1);shp2img.addShapeLayer(shpPath5, sldPath5);shp2img.getMapContent(paras, imgPath);return "图片生成完成,共耗时"+(System.currentTimeMillis() - start)+"ms";}

第四步:查看导出效果图:

感谢支持技术分享,请扫码点赞支持:

技术合作交流qq:2401315930

geotools绘制地图导出图片相关推荐

  1. 地图导出(图片PDF)工具介绍

    最近网上网上看到有些使用打印地图的小伙伴,被地图打印折腾的挺艰难的.突然想起自己曾经为了项目中出图的需求做了个小工具.就把它整理了一下,发出来了! 工具下载链接:https://download.cs ...

  2. 把view或者div绘制 canvas ,导出图片功能实现完整源码附效果图(兼容H5和小程序)

    先看下效果图:(上面灰色块内的用div和CSS写出来的,然后绘制到canvas) 实现此功能需要使用到一个微信小程序的插件,插件官方文档地址: wxml-to-canvas | 微信开放文档 本博客代 ...

  3. openlayer地图导出指定范围图片文件

    在gis系统中我们经常遇到将指定区域的地图导出为图片文件,在openlayer官网提供了导出样例https://openlayers.org/en/latest/examples/export-map ...

  4. canvas节点无法导出图片_uniapp canvas绘制图片后无法canvasToTempFilePath导出

    后续补充:锅应该来自MIUI升级,因为我将之前打包的App安装后,依旧有这个问题(之前测试的时候是不存在的)... 但是但是,依旧请官方看看小米到底给你们挖了什么坑,解决此问题... 小米 webvi ...

  5. 【板栗糖GIS】arcmap—如何将地图导出为pdf或者图片

    arcmap-如何将地图导出为pdf或者图片 目录 1. 加载数据 2. 制作专题图 3. 文件-导出地图 4. 选择文件格式以及其他参数 1. 加载数据 2. 制作专题图 3. 文件-导出地图 4. ...

  6. 微信小程序canvas 2d 绘制图片与文字 导出图片

    wxml内容 如下 <canvas id="myCanvas" type="2d"style="width: {{ canvas.width } ...

  7. java地图导出——添加经纬线

    概述 前面的文章Node实现切片的拼接和地图的导出和Java实现地图的导出分别讲述可如何在node和java中实现切片的拼接以及地图的导出.本文,书接前文,实现java导出时经纬度的添加. 实现后效果 ...

  8. android canvas png 失真,【小程序】--------------处理canvas导出图片模糊问题-------------【劉】...

    一.业务需求: 使用canvas在前端生成海报,并在海报上添加上水印.最后导出图片并保存到本地. 二.业务逻辑实现: (1)创建canvas画布======>(2)在canvas上绘制海报=== ...

  9. leaflet 导出图片,打印图片(A4横版或竖版)

    第093个 点击查看专栏目录 本示例的目的是介绍如何在vue+leaflet中打印图片导出图片.一个简单的leaflet插件示例,添加了一个图标来打印或导出地图. 直接复制下面的 vue+leafle ...

  10. Origin绘图后导出图片的方法

    在发表论文的时候,期刊要求的图线一般是tif格式的图,而不是Origin格式的.我们用Origin绘制完成一张图后,需要将它导出成图片格式,以满足投稿要求.这一节来介绍一下如何利用Origin导出图片 ...

最新文章

  1. 左右HttpClient上传的方法来解决中国的乱码
  2. Redis 你该懂的点
  3. springboot redis 刷新时间_「SpringBoot实战」SpringCache + Redis实现数据缓存
  4. Linux NB的单行命令
  5. 继续教育统考计算机和英语难度怎么样,网络教育英语统考90分的难度怎么样
  6. 多布局怎么搭建_关键词SEO优化怎么做?具体包括哪些方面?
  7. 怎么样写一个 node.js模块以及NPM Package
  8. python全栈之巅_Python 迭代器、生成器详解 - Python全栈之巅
  9. android 动画间隔时间,Android使用View Animation实现动画加载界面
  10. android删除重复照片,android 删除重复文件
  11. ckplayer html5直播rtmp,实现简单网页rtmp直播:nginx+ckplayer+linux
  12. 数据库基础-update语句详解
  13. Modbus通信协议
  14. java 开发中相对路径的参照物是什么,参照路径的配置,以及相对路径前加不加(/)反斜杠区别
  15. Credential Harvester的脚本修改
  16. 多线程编写12306售票系统
  17. SVG格式图片的放大
  18. SLUB和SLAB的区别
  19. Weblogic常见错误以及解决办法
  20. 百度砸金22亿背后,要打造一个“万亿”市值的“新”YY直播?

热门文章

  1. 我的世界java 4k_我的世界:原版VS“4K光影”牺牲2块显卡,让你看看差距有多大!...
  2. SQLServer导入Excel格式数据
  3. 书单 | 这6本书,带你轻松学习自动化办公
  4. django学生宿舍管理系统
  5. AD18的PCB开槽方法
  6. 蓝桥杯题目 黑色星期五
  7. VMware ESXi6.0注入8060阵列卡驱动过程记录
  8. 彭国伦Fortran95学习笔记(一)第八章至第十六章
  9. [电子设计竞赛]两线制直流电源电压显示表 -2019年绍兴市电子设计大赛A题
  10. 2021全国大学生电子设计大赛题目汇总