Demo基本运行环境参考GeoTools官方demo搭建https://docs.geotools.org/
参考官方文档Raster示例搭建环境
https://docs.geotools.org/stable/userguide/tutorial/raster/image.html
3.核心功能实现代码如下
package com.gmcloud.meteor.client.demo06;
import com.gmcloud.meteor.client.demo26.Demo26;
import com.gmcloud.meteor.client.util.ConvertUtil;
import com.gmcloud.meteor.client.util.StyleUtil;
import org.geotools.coverage.grid.GridCoverage2D;
import org.geotools.coverage.grid.GridCoverageFactory;
import org.geotools.coverage.grid.io.AbstractGridFormat;
import org.geotools.coverage.grid.io.GridCoverage2DReader;
import org.geotools.coverage.grid.io.GridFormatFinder;
import org.geotools.gce.geotiff.GeoTiffFormat;
import org.geotools.geometry.Envelope2D;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.map.GridCoverageLayer;
import org.geotools.map.Layer;
import org.geotools.map.MapContent;
import org.geotools.styling.Style;
import org.geotools.swing.JMapFrame;
import org.geotools.util.factory.Hints;
import org.opengis.geometry.BoundingBox;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import java.io.File;
import java.io.IOException;
import java.util.Objects;
/**
* 图片数据可视化
*
*/
public class Demo06 {
public static void main(String[] args) throws XPathExpressionException, IOException, ParserConfigurationException {
MapContent map = new MapContent();
map.setTitle("Demo06");
// 获取图片对象
GridCoverage2DReader reader = getGridCoverage2DReader();
BoundingBox boundingBox = new ReferencedEnvelope(61.0000, 136.9600, 6.0400, 54.0000, ConvertUtil.defaultCrs());
GridCoverage2D gridCoverage2D = convert2GridCoverage2D(reader, boundingBox);
// 加载图层,加载样式
// 创建一个灰度样式
// Style rasterStyle = createGreyscaleStyle(1);
// RGB 样式
Style rasterRgbStyle = StyleUtil.createRGBStyle(reader);
Layer layer = new GridCoverageLayer(gridCoverage2D, rasterRgbStyle, "测试06");
map.addLayer(layer);
// 加载显示 map
JMapFrame.showMap(map);
}
/**
* 获取 GridCoverage2DReader 对象
*
* @return {@link GridCoverage2DReader }
*/
private static GridCoverage2DReader getGridCoverage2DReader() {
String imageUrl = Objects.requireNonNull(Demo06.class.getResource("/images/wxt.png")).getPath();
File file = new File(imageUrl);
AbstractGridFormat format = GridFormatFinder.findFormat(file);
Hints hints = new Hints();
if (format instanceof GeoTiffFormat) {
hints = new Hints(Hints.FORCE_LONGITUDE_FIRST_AXIS_ORDER, Boolean.TRUE);
}
return format.getReader(file, hints);
}
/**
* 转换为栅格数据
*
* @param reader gridCoverage2DReader
* @return {@link GridCoverage2D }
* @throws IOException ioexception
*/
private static GridCoverage2D convert2GridCoverage2D(GridCoverage2DReader reader, BoundingBox boundingBox) throws IOException {
GridCoverage2D coverage = reader.read(null);
Envelope2D envelope2D = null;
if (coverage == null) {
throw new RuntimeException("导入图片信息错误");
}
envelope2D = coverage.getEnvelope2D();
envelope2D.setCoordinateReferenceSystem(boundingBox.getCoordinateReferenceSystem());
envelope2D.setBounds(boundingBox);
CharSequence str = "测试06";
GridCoverageFactory gridCoverageFactory = new GridCoverageFactory();
return gridCoverageFactory.create(str, coverage.getRenderedImage(), envelope2D);
}
}