GeoTools读取png,jpg 自定义经纬度地图展示实现

  1. Demo基本运行环境参考GeoTools官方demo搭建https://docs.geotools.org/

  1. 参考官方文档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);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值