美文网首页
JAVA 通过wContour和geotools实现等值面分析、

JAVA 通过wContour和geotools实现等值面分析、

作者: 行走江湖的小A | 来源:发表于2022-10-03 15:31 被阅读0次

做气象相关专题数据显示时,根据气象数据显示图层。需要用java来分析数据生成等值面图片,数据入库后发布矢量服务

在这里总结分享一下。

实现思路主要是 wContour分析等值数据,geotools用于转换分析结果和边界裁切,使用GDAL ogr2ogr入库,入库后使用geoserver发布矢量数据服务,针对等距二维数组数据可以做简单的抽稀。

数据库:postgresql+postgis

分析部分参考了java实现NC数据等值线等值面可视化

用到的第三方包:wContour(点击下载),geotools (SpringBoot通过maven引入)

结果效果:

广东省雷达效果图

主要步骤:

1.读取专题数据,构造对应二维数组数据,如需输出效果图片(提供等值对应颜色)

2.进行等值面分析,裁切(如果原数据为等距二维数组,不进行IDW插值计算,可对原数据进行简单抽稀,提供分析效率)

3.添加样式 透明度,颜色级别

4.输出效果图片

5.输出geoJson

6.读取geojson数据入库

7.GeoServer发布PostGis数据

直接上代码

一.原数据为等距网格数据,不需要IDW插值格网点

二.等值面分析,做网格计算,并IDW插值计算

三.Polygon转FeatureCollection

四.geotools创建FeatureCollection

五.结果裁切

六.添加样式 透明度,颜色级别,featureCollection等值面图层

七.根据四至坐标、长、宽像素获取地图内容,并生成图片

八.输出保存GeoJson

九.执行Ogr2Ogr命令GeoJson数据入库

ogr2ogr -f 'PostgreSQL' PG:'host=192.168.1.65 port=5413 user=postgres password=***** dbname=db_test schemas=public' \

  /Users/***/Downloads/geojson.json \

    -nlt CONVERT_TO_LINEAR \

  -dim XY \

  -overwrite -progress --config OGR_ORGANIZE_POLYGONS ONLY_CCW  --config SHAPE_ENCODING 'UTF-8' -nlt PROMOTE_TO_MULTI -nln vector_temp (这里是入库的表名)

在这里,我补充一下抽稀的方法,由于是个小demo,只做了简单的抽取

测试代码,以气象温度举例子

气象温度对应颜色

import java.util.LinkedHashMap;

import java.util.Map;

/**

* 气象温度颜色对应枚举

*

* @author hxd

*/

public enum TempColorEnum {

    T_5(5, "#81a8ff"),

    T_10(10, "#81a8ff"),

    T_15(15, "#81fbff"),

    T_17(17, "#81ffbc"),

    T_19(19, "#99ff81"),

    TC_21(21, "#d1ff81"),

    TC_23(23, "#fffa7a"),

    TC_25(25, "#fff000"),

    TC_30(30, "#ffde00"),

    TC_35(35, "#ffa318"),

    TC_37(37, "#ff6600"),

    TC_39(39, "#ff0000")

    ;

    TempColorEnum(double value, String color) {

        this.value = value;

        this.color = color;

    }

    /**

    * 开氏度=摄氏度+273.15

    */

    private double value;

    /**

    * 温度对应颜色

    */

    private String color;

    public double getValue() {

        return value;

    }

    public String getColor() {

        return color;

    }

    /**

    * 摄氏度数组

    *

    * @return

    */

    public static double[] getValueArray() {

        int length = TempColorEnum.values().length;

        double[] tempArray = new double[length];

        int i = 0;

        for (TempColorEnum anEnum : TempColorEnum.values()) {

            tempArray[i++] = anEnum.value;

        }

        return tempArray;

    }

    /**

    * 温度对应颜色Map

    *

    * @return

    */

    public static Map<Double, String> getValueColorMap() {

        Map<Double, String> map = new LinkedHashMap<>();

        for (TempColorEnum anEnum : TempColorEnum.values()) {

            map.put(anEnum.value, anEnum.getColor());

        }

        return map;

    }

测试类

裁切后保存的图片效果

总结:从数据到图片效果,发布服务是一个比较长线的流程,针对这个过程后期会提供从源头到可配置化的气象专题方案。由于数据保密无法提供测试数据,以上是一个小demo,有不足之处请多多指教

相关文章

网友评论

      本文标题:JAVA 通过wContour和geotools实现等值面分析、

      本文链接:https://www.haomeiwen.com/subject/nylyartx.html