From 02122c82324a1b30e25f5087bb250bfc397c18ed Mon Sep 17 00:00:00 2001 From: wyq Date: Sun, 25 Apr 2021 09:45:49 +0800 Subject: [PATCH] add barnes and kriging interpolation methods in MeteoInfoMap --- ...g_bytedeco_javacpp_android_arm64_1_5_4.xml | 13 ++ ...org_bytedeco_javacpp_android_arm_1_5_4.xml | 13 ++ ...org_bytedeco_javacpp_android_x86_1_5_4.xml | 13 ++ ..._bytedeco_javacpp_android_x86_64_1_5_4.xml | 13 ++ ...__org_bytedeco_javacpp_ios_arm64_1_5_4.xml | 13 ++ ..._org_bytedeco_javacpp_ios_x86_64_1_5_4.xml | 13 ++ ...org_bytedeco_javacpp_linux_arm64_1_5_4.xml | 13 ++ ...org_bytedeco_javacpp_linux_armhf_1_5_4.xml | 13 ++ ...g_bytedeco_javacpp_linux_ppc64le_1_5_4.xml | 13 ++ ...__org_bytedeco_javacpp_linux_x86_1_5_4.xml | 13 ++ ...rg_bytedeco_javacpp_linux_x86_64_1_5_4.xml | 13 ++ ...g_bytedeco_javacpp_macosx_x86_64_1_5_4.xml | 13 ++ ...n__org_bytedeco_javacpp_platform_1_5_4.xml | 13 ++ ...org_bytedeco_javacpp_windows_x86_1_5_4.xml | 13 ++ ..._bytedeco_javacpp_windows_x86_64_1_5_4.xml | 13 ++ ...co_openblas_android_arm64_0_3_10_1_5_4.xml | 13 ++ ...deco_openblas_android_arm_0_3_10_1_5_4.xml | 13 ++ ...deco_openblas_android_x86_0_3_10_1_5_4.xml | 13 ++ ...o_openblas_android_x86_64_0_3_10_1_5_4.xml | 13 ++ ...tedeco_openblas_ios_arm64_0_3_10_1_5_4.xml | 13 ++ ...edeco_openblas_ios_x86_64_0_3_10_1_5_4.xml | 13 ++ ...deco_openblas_linux_arm64_0_3_10_1_5_4.xml | 13 ++ ...deco_openblas_linux_armhf_0_3_10_1_5_4.xml | 13 ++ ...co_openblas_linux_ppc64le_0_3_10_1_5_4.xml | 13 ++ ...tedeco_openblas_linux_x86_0_3_10_1_5_4.xml | 13 ++ ...eco_openblas_linux_x86_64_0_3_10_1_5_4.xml | 13 ++ ...co_openblas_macosx_x86_64_0_3_10_1_5_4.xml | 13 ++ ...ytedeco_openblas_platform_0_3_10_1_5_4.xml | 13 ++ ...deco_openblas_windows_x86_0_3_10_1_5_4.xml | 13 ++ ...o_openblas_windows_x86_64_0_3_10_1_5_4.xml | 13 ++ ...uegen_rt_natives_android_aarch64_2_3_2.xml | 13 -- ...egen_rt_natives_android_aarch64_2_3_22.xml | 13 ++ ...n_gluegen_rt_natives_linux_armv6_2_3_2.xml | 8 +- ...gluegen_rt_natives_linux_armv6hf_2_3_2.xml | 8 +- ...en_gluegen_rt_natives_linux_i586_2_3_2.xml | 8 +- ...egen_rt_natives_macosx_universal_2_3_2.xml | 8 +- ...gluegen_rt_natives_solaris_amd64_2_3_2.xml | 8 +- ..._gluegen_rt_natives_solaris_i586_2_3_2.xml | 8 +- ...gluegen_rt_natives_windows_amd64_2_3_2.xml | 8 +- ..._gluegen_rt_natives_windows_i586_2_3_2.xml | 8 +- ...n__org_jogamp_jogl_jogl_all_main_2_3_2.xml | 13 -- ...jogl_all_natives_android_aarch64_2_3_2.xml | 13 -- ...l_jogl_all_natives_android_armv6_2_3_2.xml | 13 -- ...ogl_jogl_all_natives_linux_amd64_2_3_2.xml | 13 -- ...ogl_jogl_all_natives_linux_armv6_2_3_2.xml | 13 -- ...l_jogl_all_natives_linux_armv6hf_2_3_2.xml | 13 -- ...jogl_jogl_all_natives_linux_i586_2_3_2.xml | 8 +- meteoinfo-chart/meteoinfo-chart.iml | 30 +++ .../java/org/meteoinfo/data/StationData.java | 46 +++- meteoinfo-geo/meteoinfo-geo.iml | 30 +++ .../geo/analysis/InterpolationMethods.java | 23 +- .../geo/analysis/InterpolationSetting.java | 21 +- .../org/meteoinfo/geo/util/GeoMathUtil.java | 28 ++- meteoinfo-image/meteoinfo-image.iml | 30 +++ meteoinfo-lab/meteoinfo-lab.iml | 30 +++ meteoinfo-lab/milconfig.xml | 12 +- meteoinfo-map/config.xml | 2 +- meteoinfo-map/meteoinfo-map.iml | 30 +++ .../meteoinfo/map/forms/FrmInterpolate.java | 57 +++-- .../org/meteoinfo/map/forms/FrmMeteoData.java | 4 +- meteoinfo-math/meteoinfo-math.iml | 30 +++ meteoinfo-math/pom.xml | 4 +- .../math/interpolate/InterpUtil.java | 211 ++++++++++++++++++ 63 files changed, 974 insertions(+), 180 deletions(-) create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_android_arm64_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_android_arm_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_android_x86_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_android_x86_64_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_ios_arm64_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_ios_x86_64_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_linux_arm64_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_linux_armhf_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_linux_ppc64le_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_linux_x86_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_linux_x86_64_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_macosx_x86_64_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_platform_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_windows_x86_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_javacpp_windows_x86_64_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_android_arm64_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_android_arm_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_android_x86_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_android_x86_64_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_ios_arm64_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_ios_x86_64_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_linux_arm64_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_linux_armhf_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_linux_ppc64le_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_linux_x86_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_linux_x86_64_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_macosx_x86_64_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_platform_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_windows_x86_0_3_10_1_5_4.xml create mode 100644 .idea/libraries/Maven__org_bytedeco_openblas_windows_x86_64_0_3_10_1_5_4.xml delete mode 100644 .idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_android_aarch64_2_3_2.xml create mode 100644 .idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_android_aarch64_2_3_22.xml delete mode 100644 .idea/libraries/Maven__org_jogamp_jogl_jogl_all_main_2_3_2.xml delete mode 100644 .idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_android_aarch64_2_3_2.xml delete mode 100644 .idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_android_armv6_2_3_2.xml delete mode 100644 .idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_amd64_2_3_2.xml delete mode 100644 .idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_armv6_2_3_2.xml delete mode 100644 .idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_armv6hf_2_3_2.xml diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_android_arm64_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_android_arm64_1_5_4.xml new file mode 100644 index 00000000..a8600b72 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_android_arm64_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_android_arm_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_android_arm_1_5_4.xml new file mode 100644 index 00000000..f09987ea --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_android_arm_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_android_x86_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_android_x86_1_5_4.xml new file mode 100644 index 00000000..c08a4743 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_android_x86_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_android_x86_64_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_android_x86_64_1_5_4.xml new file mode 100644 index 00000000..1f252a72 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_android_x86_64_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_ios_arm64_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_ios_arm64_1_5_4.xml new file mode 100644 index 00000000..73188b7f --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_ios_arm64_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_ios_x86_64_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_ios_x86_64_1_5_4.xml new file mode 100644 index 00000000..2cfd41e3 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_ios_x86_64_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_linux_arm64_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_arm64_1_5_4.xml new file mode 100644 index 00000000..46ba59e3 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_arm64_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_linux_armhf_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_armhf_1_5_4.xml new file mode 100644 index 00000000..dda43467 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_armhf_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_linux_ppc64le_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_ppc64le_1_5_4.xml new file mode 100644 index 00000000..e190ebd9 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_ppc64le_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_linux_x86_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_x86_1_5_4.xml new file mode 100644 index 00000000..226f7b61 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_x86_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_linux_x86_64_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_x86_64_1_5_4.xml new file mode 100644 index 00000000..88040eae --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_linux_x86_64_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_macosx_x86_64_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_macosx_x86_64_1_5_4.xml new file mode 100644 index 00000000..8b11ca20 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_macosx_x86_64_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_platform_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_platform_1_5_4.xml new file mode 100644 index 00000000..976c2a23 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_platform_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_windows_x86_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_windows_x86_1_5_4.xml new file mode 100644 index 00000000..fccb53b9 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_windows_x86_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_javacpp_windows_x86_64_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_javacpp_windows_x86_64_1_5_4.xml new file mode 100644 index 00000000..2192bff8 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_javacpp_windows_x86_64_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_android_arm64_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_android_arm64_0_3_10_1_5_4.xml new file mode 100644 index 00000000..6c3d1740 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_android_arm64_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_android_arm_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_android_arm_0_3_10_1_5_4.xml new file mode 100644 index 00000000..1616f47d --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_android_arm_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_android_x86_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_android_x86_0_3_10_1_5_4.xml new file mode 100644 index 00000000..082c85b1 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_android_x86_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_android_x86_64_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_android_x86_64_0_3_10_1_5_4.xml new file mode 100644 index 00000000..103a009d --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_android_x86_64_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_ios_arm64_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_ios_arm64_0_3_10_1_5_4.xml new file mode 100644 index 00000000..1700ca82 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_ios_arm64_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_ios_x86_64_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_ios_x86_64_0_3_10_1_5_4.xml new file mode 100644 index 00000000..20155e1e --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_ios_x86_64_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_linux_arm64_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_linux_arm64_0_3_10_1_5_4.xml new file mode 100644 index 00000000..cf78dc41 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_linux_arm64_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_linux_armhf_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_linux_armhf_0_3_10_1_5_4.xml new file mode 100644 index 00000000..4a0855ff --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_linux_armhf_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_linux_ppc64le_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_linux_ppc64le_0_3_10_1_5_4.xml new file mode 100644 index 00000000..5ada3096 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_linux_ppc64le_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_linux_x86_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_linux_x86_0_3_10_1_5_4.xml new file mode 100644 index 00000000..1ff05b71 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_linux_x86_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_linux_x86_64_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_linux_x86_64_0_3_10_1_5_4.xml new file mode 100644 index 00000000..8a1443a8 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_linux_x86_64_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_macosx_x86_64_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_macosx_x86_64_0_3_10_1_5_4.xml new file mode 100644 index 00000000..47561ef5 --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_macosx_x86_64_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_platform_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_platform_0_3_10_1_5_4.xml new file mode 100644 index 00000000..1dc69a6c --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_platform_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_windows_x86_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_windows_x86_0_3_10_1_5_4.xml new file mode 100644 index 00000000..dd9f8a0d --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_windows_x86_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_bytedeco_openblas_windows_x86_64_0_3_10_1_5_4.xml b/.idea/libraries/Maven__org_bytedeco_openblas_windows_x86_64_0_3_10_1_5_4.xml new file mode 100644 index 00000000..57332f8a --- /dev/null +++ b/.idea/libraries/Maven__org_bytedeco_openblas_windows_x86_64_0_3_10_1_5_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_android_aarch64_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_android_aarch64_2_3_2.xml deleted file mode 100644 index f52f7cb0..00000000 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_android_aarch64_2_3_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_android_aarch64_2_3_22.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_android_aarch64_2_3_22.xml new file mode 100644 index 00000000..fab63b4d --- /dev/null +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_android_aarch64_2_3_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_armv6_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_armv6_2_3_2.xml index 4b2da184..82952a9f 100644 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_armv6_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_armv6_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_armv6hf_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_armv6hf_2_3_2.xml index 0ba2759f..74b81e01 100644 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_armv6hf_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_armv6hf_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_i586_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_i586_2_3_2.xml index bdb757e9..1bfc5803 100644 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_i586_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_linux_i586_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_macosx_universal_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_macosx_universal_2_3_2.xml index 7701de20..13c82880 100644 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_macosx_universal_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_macosx_universal_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_solaris_amd64_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_solaris_amd64_2_3_2.xml index 7c31cbb6..5ab7e4fb 100644 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_solaris_amd64_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_solaris_amd64_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_solaris_i586_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_solaris_i586_2_3_2.xml index 10af6a31..de99cba4 100644 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_solaris_i586_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_solaris_i586_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_windows_amd64_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_windows_amd64_2_3_2.xml index 5683eca1..7251cd66 100644 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_windows_amd64_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_windows_amd64_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_windows_i586_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_windows_i586_2_3_2.xml index 32110e16..07dd4680 100644 --- a/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_windows_i586_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_gluegen_gluegen_rt_natives_windows_i586_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_main_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_main_2_3_2.xml deleted file mode 100644 index 27bcffdb..00000000 --- a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_main_2_3_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_android_aarch64_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_android_aarch64_2_3_2.xml deleted file mode 100644 index f4990173..00000000 --- a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_android_aarch64_2_3_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_android_armv6_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_android_armv6_2_3_2.xml deleted file mode 100644 index 41a6255a..00000000 --- a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_android_armv6_2_3_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_amd64_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_amd64_2_3_2.xml deleted file mode 100644 index e23327a7..00000000 --- a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_amd64_2_3_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_armv6_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_armv6_2_3_2.xml deleted file mode 100644 index 8cdd9b04..00000000 --- a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_armv6_2_3_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_armv6hf_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_armv6hf_2_3_2.xml deleted file mode 100644 index c0e19aa4..00000000 --- a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_armv6hf_2_3_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_i586_2_3_2.xml b/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_i586_2_3_2.xml index 6b2b3d45..e1201bc2 100644 --- a/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_i586_2_3_2.xml +++ b/.idea/libraries/Maven__org_jogamp_jogl_jogl_all_natives_linux_i586_2_3_2.xml @@ -1,13 +1,13 @@ - + - + - + - + \ No newline at end of file diff --git a/meteoinfo-chart/meteoinfo-chart.iml b/meteoinfo-chart/meteoinfo-chart.iml index 3be5a184..cc5741ed 100644 --- a/meteoinfo-chart/meteoinfo-chart.iml +++ b/meteoinfo-chart/meteoinfo-chart.iml @@ -29,8 +29,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meteoinfo-data/src/main/java/org/meteoinfo/data/StationData.java b/meteoinfo-data/src/main/java/org/meteoinfo/data/StationData.java index 4f9c360d..1a8a6875 100644 --- a/meteoinfo-data/src/main/java/org/meteoinfo/data/StationData.java +++ b/meteoinfo-data/src/main/java/org/meteoinfo/data/StationData.java @@ -182,6 +182,20 @@ import org.meteoinfo.projection.Reproject; return y; } + /** + * Get station data array + * + * @return Station data array + */ + public double[] getStData() { + double[] y = new double[getStNum()]; + for (int i = 0; i < getStNum(); i++) { + y[i] = data[i][2]; + } + + return y; + } + /** * Set data array * @@ -1009,7 +1023,7 @@ import org.meteoinfo.projection.Reproject; // /** - * Filte station data by radius and extent + * Filter station data by radius and extent * * @param radius Radius * @param aExtent Data extent @@ -1044,6 +1058,36 @@ import org.meteoinfo.projection.Reproject; this.setData(discretedData); stations = nstations; } + + /** + * Delete missing values + */ + public void delMissingValue() { + double[][] discreteData; + List disDataList = new ArrayList(); + List nStations = new ArrayList(); + int i; + for (i = 0; i < this.getStNum(); i++) { + if (MIMath.doubleEquals(data[i][2], missingValue)) { + continue; + } else { + disDataList.add(new double[]{data[i][0], data[i][1], data[i][2]}); + nStations.add(this.stations.get(i)); + } + } + + discreteData = new double[disDataList.size()][3]; + i = 0; + for (double[] disData : disDataList) { + discreteData[i][0] = disData[0]; + discreteData[i][1] = disData[1]; + discreteData[i][2] = disData[2]; + i += 1; + } + + this.setData(discreteData); + stations = nStations; + } // // diff --git a/meteoinfo-geo/meteoinfo-geo.iml b/meteoinfo-geo/meteoinfo-geo.iml index 3529b24c..9e4d9e25 100644 --- a/meteoinfo-geo/meteoinfo-geo.iml +++ b/meteoinfo-geo/meteoinfo-geo.iml @@ -37,8 +37,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/analysis/InterpolationMethods.java b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/analysis/InterpolationMethods.java index ea02593b..81163b82 100644 --- a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/analysis/InterpolationMethods.java +++ b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/analysis/InterpolationMethods.java @@ -18,22 +18,11 @@ package org.meteoinfo.geo.analysis; * @author yaqiang */ public enum InterpolationMethods { - /// - /// IDW radius - /// - - IDW_Radius, - /// - /// IDV neighbors - /// - IDW_Neighbors, - /// - /// Cressman analysis - /// - Cressman, - /// - /// Assign point to grid - /// - AssignPointToGrid, + IDW_RADIUS, + IDW_NEIGHBORS, + CRESSMAN, + BARNES, + KRIGING, + ASSIGN_POINT_GRID, } diff --git a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/analysis/InterpolationSetting.java b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/analysis/InterpolationSetting.java index 81daa150..45a11c87 100644 --- a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/analysis/InterpolationSetting.java +++ b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/analysis/InterpolationSetting.java @@ -30,7 +30,8 @@ public class InterpolationSetting { private int _minPointNum; private double _radius; private double _missingValue = -9999.0; - private List _radList; //For cressman analysis + private List _radList; //For cressman and barnes analysis + private double beta = 1.5; //For kriging interpolation // // @@ -40,7 +41,7 @@ public class InterpolationSetting { public InterpolationSetting() { _gridDataPara.xNum = 50; _gridDataPara.yNum = 50; - _gridInterMethod = InterpolationMethods.IDW_Radius; + _gridInterMethod = InterpolationMethods.IDW_RADIUS; _minPointNum = 1; _radius = 1; _radList = new ArrayList<>(); @@ -222,6 +223,22 @@ public class InterpolationSetting { public void setRadiusList(List value) { _radList = value; } + + /** + * Get beta value + * @return Beta value + */ + public double getBeta() { + return this.beta; + } + + /** + * Set beta value + * @param value Beta value + */ + public void setBeta(double value) { + this.beta = value; + } // // diff --git a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/util/GeoMathUtil.java b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/util/GeoMathUtil.java index 0635d985..403adeea 100644 --- a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/util/GeoMathUtil.java +++ b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/util/GeoMathUtil.java @@ -10,6 +10,8 @@ import org.meteoinfo.geo.analysis.GeoComputation; import org.meteoinfo.geometry.shape.PolygonShape; import org.meteoinfo.geometry.shape.ShapeTypes; import org.meteoinfo.geo.analysis.InterpolationSetting; +import org.meteoinfo.math.interpolate.InterpUtil; +import smile.interpolation.KrigingInterpolation2D; import java.util.ArrayList; import java.util.List; @@ -240,21 +242,39 @@ public class GeoMathUtil { X = values.get(0); Y = values.get(1); switch (interSet.getInterpolationMethod()) { - case IDW_Radius: + case IDW_RADIUS: stationData.filterData_Radius(interSet.getRadius(), interSet.getGridDataSetting().dataExtent); aGridData = interpolate_Radius(stationData.data, X, Y, interSet.getMinPointNum(), interSet.getRadius(), stationData.missingValue); break; - case IDW_Neighbors: + case IDW_NEIGHBORS: stationData.filterData_Radius(interSet.getRadius(), interSet.getGridDataSetting().dataExtent); aGridData = interpolate_Neighbor(stationData.data, X, Y, interSet.getMinPointNum(), stationData.missingValue); break; - case Cressman: + case CRESSMAN: stationData.filterData_Radius(0, interSet.getGridDataSetting().dataExtent); aGridData = interpolate_Cressman(stationData.data, X, Y, interSet.getRadiusList(), stationData.missingValue); break; - case AssignPointToGrid: + case BARNES: + stationData.filterData_Radius(0, interSet.getGridDataSetting().dataExtent); + double[][] gData = InterpUtil.barnes(stationData.getX(), stationData.getY(), stationData.getStData(), + X, Y, interSet.getRadiusList(), 1., 1.); + aGridData = new GridData(); + aGridData.xArray = X; + aGridData.yArray = Y; + aGridData.data = gData; + break; + case KRIGING: + stationData.filterData_Radius(0, interSet.getGridDataSetting().dataExtent); + gData = InterpUtil.kriging(stationData.getX(), stationData.getY(), stationData.getStData(), + X, Y, interSet.getBeta()); + aGridData = new GridData(); + aGridData.xArray = X; + aGridData.yArray = Y; + aGridData.data = gData; + break; + case ASSIGN_POINT_GRID: stationData.filterData_Radius(0, interSet.getGridDataSetting().dataExtent); aGridData = interpolate_Assign(stationData.data, X, Y, stationData.missingValue); break; diff --git a/meteoinfo-image/meteoinfo-image.iml b/meteoinfo-image/meteoinfo-image.iml index 24cae594..de6810ba 100644 --- a/meteoinfo-image/meteoinfo-image.iml +++ b/meteoinfo-image/meteoinfo-image.iml @@ -37,8 +37,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meteoinfo-lab/meteoinfo-lab.iml b/meteoinfo-lab/meteoinfo-lab.iml index e7f05d06..43ccc55f 100644 --- a/meteoinfo-lab/meteoinfo-lab.iml +++ b/meteoinfo-lab/meteoinfo-lab.iml @@ -39,8 +39,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meteoinfo-lab/milconfig.xml b/meteoinfo-lab/milconfig.xml index f5158976..9dddd7d3 100644 --- a/meteoinfo-lab/milconfig.xml +++ b/meteoinfo-lab/milconfig.xml @@ -1,6 +1,6 @@ - + @@ -8,7 +8,6 @@ - @@ -16,19 +15,18 @@ + - - + - - + @@ -36,5 +34,5 @@
- + diff --git a/meteoinfo-map/config.xml b/meteoinfo-map/config.xml index 262eed6f..456a652f 100644 --- a/meteoinfo-map/config.xml +++ b/meteoinfo-map/config.xml @@ -1,6 +1,6 @@ - + diff --git a/meteoinfo-map/meteoinfo-map.iml b/meteoinfo-map/meteoinfo-map.iml index 124a0da5..940cb837 100644 --- a/meteoinfo-map/meteoinfo-map.iml +++ b/meteoinfo-map/meteoinfo-map.iml @@ -30,8 +30,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/meteoinfo-map/src/main/java/org/meteoinfo/map/forms/FrmInterpolate.java b/meteoinfo-map/src/main/java/org/meteoinfo/map/forms/FrmInterpolate.java index d3792ceb..1dbc712d 100644 --- a/meteoinfo-map/src/main/java/org/meteoinfo/map/forms/FrmInterpolate.java +++ b/meteoinfo-map/src/main/java/org/meteoinfo/map/forms/FrmInterpolate.java @@ -359,19 +359,26 @@ public class FrmInterpolate extends javax.swing.JDialog { InterpolationMethods method = InterpolationMethods.valueOf(this.jComboBox_Methods.getSelectedItem().toString()); switch (method) { - case IDW_Radius: + case IDW_RADIUS: this.jTextField_Radius.setEnabled(true); this.jTextField_MinNum.setEnabled(true); + this.jTextField_MinNum.setText(String.valueOf(this._interpSetting.getMinPointNum())); + this.jLabel_MinNum.setText("MinNum:"); this.jTextField_Radius.setText(String.valueOf(this._interpSetting.getRadius())); break; - case IDW_Neighbors: + case IDW_NEIGHBORS: this.jTextField_Radius.setEnabled(false); this.jTextField_MinNum.setEnabled(true); + this.jTextField_MinNum.setText(String.valueOf(this._interpSetting.getMinPointNum())); + this.jLabel_MinNum.setText("MinNum:"); this.jTextField_Radius.setText(String.valueOf(this._interpSetting.getRadius())); break; - case Cressman: + case CRESSMAN: + case BARNES: this.jTextField_Radius.setEnabled(true); - this.jTextField_MinNum.setEnabled(false); + this.jTextField_MinNum.setEnabled(false); + this.jTextField_MinNum.setText(String.valueOf(this._interpSetting.getMinPointNum())); + this.jLabel_MinNum.setText("MinNum:"); String radStr = ""; for (int i = 0; i < this._interpSetting.getRadiusList().size(); i++) { radStr = radStr + String.valueOf(this._interpSetting.getRadiusList().get(i)) + ";"; @@ -380,6 +387,12 @@ public class FrmInterpolate extends javax.swing.JDialog { radStr = radStr.substring(0, radStr.length() - 1); this.jTextField_Radius.setText(radStr); break; + case KRIGING: + this.jTextField_Radius.setEnabled(false); + this.jTextField_MinNum.setEnabled(true); + this.jLabel_MinNum.setText("Beta:"); + this.jTextField_MinNum.setText(String.valueOf(this._interpSetting.getBeta())); + break; } }//GEN-LAST:event_jComboBox_MethodsActionPerformed @@ -410,13 +423,16 @@ public class FrmInterpolate extends javax.swing.JDialog { setXYSize(); this.jComboBox_Methods.removeAllItems(); - this.jComboBox_Methods.addItem(InterpolationMethods.IDW_Radius.toString()); - this.jComboBox_Methods.addItem(InterpolationMethods.IDW_Neighbors.toString()); - this.jComboBox_Methods.addItem(InterpolationMethods.Cressman.toString()); - this.jComboBox_Methods.addItem(InterpolationMethods.AssignPointToGrid.toString()); - this.jComboBox_Methods.setSelectedItem(this._interpSetting.getInterpolationMethod().toString()); + this.jComboBox_Methods.addItem(InterpolationMethods.IDW_RADIUS); + this.jComboBox_Methods.addItem(InterpolationMethods.IDW_NEIGHBORS); + this.jComboBox_Methods.addItem(InterpolationMethods.CRESSMAN); + this.jComboBox_Methods.addItem(InterpolationMethods.BARNES); + this.jComboBox_Methods.addItem(InterpolationMethods.KRIGING); + this.jComboBox_Methods.addItem(InterpolationMethods.ASSIGN_POINT_GRID); + this.jComboBox_Methods.setSelectedItem(this._interpSetting.getInterpolationMethod()); switch (this._interpSetting.getInterpolationMethod()) { - case Cressman: + case CRESSMAN: + case BARNES: String radStr = ""; for (int i = 0; i < this._interpSetting.getRadiusList().size(); i++) { radStr = radStr + String.valueOf(this._interpSetting.getRadiusList().get(i)) + ";"; @@ -428,14 +444,17 @@ public class FrmInterpolate extends javax.swing.JDialog { this.jTextField_MissingValue.setText(String.valueOf(this._interpSetting.getMissingValue())); this.jTextField_MissingValue.setEnabled(false); break; - case IDW_Neighbors: - case IDW_Radius: + case IDW_NEIGHBORS: + case IDW_RADIUS: this.jTextField_Radius.setText(((Double) this._interpSetting.getRadius()).toString()); this.jTextField_MinNum.setText(String.valueOf(this._interpSetting.getMinPointNum())); this.jTextField_MissingValue.setText(String.valueOf(this._interpSetting.getMissingValue())); this.jTextField_MissingValue.setEnabled(false); break; - case AssignPointToGrid: + case KRIGING: + this.jTextField_MinNum.setText(String.valueOf(this._interpSetting.getBeta())); + break; + case ASSIGN_POINT_GRID: break; } @@ -458,9 +477,10 @@ public class FrmInterpolate extends javax.swing.JDialog { InterpolationSetting interpSetting = new InterpolationSetting(); interpSetting.setGridDataSetting(aGDP); - interpSetting.setInterpolationMethod(InterpolationMethods.valueOf(this.jComboBox_Methods.getSelectedItem().toString())); + interpSetting.setInterpolationMethod((InterpolationMethods) this.jComboBox_Methods.getSelectedItem()); switch (interpSetting.getInterpolationMethod()) { - case Cressman: + case CRESSMAN: + case BARNES: if (!this.jTextField_Radius.getText().isEmpty()) { String[] radStrs = this.jTextField_Radius.getText().split(";"); List radList = new ArrayList(); @@ -474,11 +494,14 @@ public class FrmInterpolate extends javax.swing.JDialog { interpSetting.setMinPointNum(Integer.parseInt(this.jTextField_MinNum.getText())); break; - case IDW_Neighbors: - case IDW_Radius: + case IDW_NEIGHBORS: + case IDW_RADIUS: interpSetting.setRadius(Double.parseDouble(this.jTextField_Radius.getText())); interpSetting.setMinPointNum(Integer.parseInt(this.jTextField_MinNum.getText())); break; + case KRIGING: + interpSetting.setBeta(Double.parseDouble(this.jTextField_MinNum.getText())); + break; } return interpSetting; diff --git a/meteoinfo-map/src/main/java/org/meteoinfo/map/forms/FrmMeteoData.java b/meteoinfo-map/src/main/java/org/meteoinfo/map/forms/FrmMeteoData.java index e4bec2f0..c3aac9d5 100644 --- a/meteoinfo-map/src/main/java/org/meteoinfo/map/forms/FrmMeteoData.java +++ b/meteoinfo-map/src/main/java/org/meteoinfo/map/forms/FrmMeteoData.java @@ -2576,7 +2576,7 @@ public class FrmMeteoData extends javax.swing.JDialog { - aGDP.dataExtent.minX) / aGDP.xNum * 2)); _useSameGridInterSet = true; if (_meteoDataInfo.isSWATHData()) { - _interpolationSetting.setInterpolationMethod(InterpolationMethods.AssignPointToGrid); + _interpolationSetting.setInterpolationMethod(InterpolationMethods.ASSIGN_POINT_GRID); aGDP.xNum = 1000; aGDP.yNum = 1000; } @@ -2897,7 +2897,7 @@ public class FrmMeteoData extends javax.swing.JDialog { //String LNameS = this.jComboBox_Level.getSelectedItem().toString() + "_" + this.jComboBox_Time.getSelectedItem().toString(); String LNameM = this.jComboBox_Variable.getSelectedItem().toString() + "_"; String LName = LNameM; - if (_interpolationSetting.getInterpolationMethod() == InterpolationMethods.IDW_Neighbors) { + if (_interpolationSetting.getInterpolationMethod() == InterpolationMethods.IDW_NEIGHBORS) { hasNoData = false; } boolean ifAddLayer = true; diff --git a/meteoinfo-math/meteoinfo-math.iml b/meteoinfo-math/meteoinfo-math.iml index 359f79d2..c7fbfac9 100644 --- a/meteoinfo-math/meteoinfo-math.iml +++ b/meteoinfo-math/meteoinfo-math.iml @@ -36,7 +36,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/meteoinfo-math/pom.xml b/meteoinfo-math/pom.xml index 8e45d630..30269ca3 100644 --- a/meteoinfo-math/pom.xml +++ b/meteoinfo-math/pom.xml @@ -49,12 +49,12 @@ org.bytedeco - javacpp + javacpp-platform 1.5.4 org.bytedeco - openblas + openblas-platform 0.3.10-1.5.4 diff --git a/meteoinfo-math/src/main/java/org/meteoinfo/math/interpolate/InterpUtil.java b/meteoinfo-math/src/main/java/org/meteoinfo/math/interpolate/InterpUtil.java index 8f9fedcf..97c2e5de 100644 --- a/meteoinfo-math/src/main/java/org/meteoinfo/math/interpolate/InterpUtil.java +++ b/meteoinfo-math/src/main/java/org/meteoinfo/math/interpolate/InterpUtil.java @@ -625,6 +625,190 @@ public class InterpUtil { return r; } + /** + * Barnes analysis + * + * @param x_s scatter X array + * @param y_s scatter Y array + * @param v_s scatter value array + * @param X x array + * @param Y y array + * @param radList radii list + * @param kappa A falloff parameter that controls the width of the Gaussian + * function + * @param gamma The smoothing parameter, is constrained to be between 0.2 + * and 1.0 + * @return result grid data + */ + public static double[][] barnes(double[] x_s, double[] y_s, double[] v_s, double[] X, double[] Y, + List radList, double kappa, double gamma) { + int xNum = X.length; + int yNum = Y.length; + int pNum = x_s.length; + double[][] r = new double[yNum][xNum]; + int irad = radList.size(); + int i, j; + + //Loop through each stn report and convert stn lat/lon to grid coordinates + double xMin = X[0]; + double xMax; + double yMin = Y[0]; + double yMax; + double xDelt = X[1] - X[0]; + double yDelt = Y[1] - Y[0]; + double x, y; + double sum, wSum, w; + double[][] stationData = new double[pNum][5]; + for (i = 0; i < pNum; i++) { + x = x_s[i]; + y = y_s[i]; + stationData[i][0] = x; + stationData[i][1] = y; + stationData[i][2] = v_s[i]; + stationData[i][3] = (x - xMin) / xDelt; + stationData[i][4] = (y - yMin) / yDelt; + } + + //Construct K-D tree + KDTree.Euclidean kdTree = new KDTree.Euclidean<>(2); + for (i = 0; i < pNum; i++) { + if (!Double.isNaN(stationData[i][2])) + kdTree.addPoint(new double[]{stationData[i][0], stationData[i][1]}, stationData[i]); + } + + double HITOP = -999900000000000000000.0; + double HIBOT = 999900000000000000000.0; + double[][] TOP = new double[yNum][xNum]; + double[][] BOT = new double[yNum][xNum]; + for (i = 0; i < yNum; i++) { + for (j = 0; j < xNum; j++) { + TOP[i][j] = HITOP; + BOT[i][j] = HIBOT; + } + } + + //Initial grid values are average of station reports within the first radius + double val, sx, sy, sxi, syi; + double rad; + int stNum; + if (radList.size() > 0) { + rad = radList.get(0).doubleValue(); + } else { + rad = 4; + } + for (i = 0; i < yNum; i++) { + y = Y[i]; + for (j = 0; j < xNum; j++) { + x = X[j]; + stNum = 0; + sum = 0; + wSum = 0; + ArrayList neighbours = kdTree.ballSearch(new double[]{x, y}, rad * rad); + for (double[] station : neighbours) { + val = station[2]; + sx = station[0]; + sy = station[1]; + double dis = Math.pow(sx - x, 2) + Math.pow(sy - y, 2); + w = Math.exp(-dis / (4 * kappa)); + wSum += w; + sum += w * val; + stNum += 1; + if (TOP[i][j] < val) { + TOP[i][j] = val; + } + if (BOT[i][j] > val) { + BOT[i][j] = val; + } + } + if (stNum == 0) { + r[i][j] = Double.NaN; + } else { + r[i][j] = sum / stNum; + } + } + } + + //Perform the objective analysis + for (int p = 0; p < irad; p++) { + rad = radList.get(p).doubleValue(); + for (i = 0; i < yNum; i++) { + y = Y[i]; + for (j = 0; j < xNum; j++) { + if (Double.isNaN(r[i][j])) { + continue; + } + + x = X[j]; + sum = 0; + wSum = 0; + ArrayList neighbours = kdTree.ballSearch(new double[]{x, y}, rad * rad); + for (double[] station : neighbours) { + val = station[2]; + sx = station[0]; + sy = station[1]; + sxi = station[3]; + syi = station[4]; + + if (sxi < 0 || sxi >= xNum - 1 || syi < 0 || syi >= yNum - 1) { + continue; + } + + double dis = Math.pow(sx - x, 2) + Math.pow(sy - y, 2); + int i1 = (int) syi; + int j1 = (int) sxi; + int i2 = i1 + 1; + int j2 = j1 + 1; + double a = r[i1][j1]; + double b = r[i1][j2]; + double c = r[i2][j1]; + double d = r[i2][j2]; + List dList = new ArrayList<>(); + if (!Double.isNaN(a)) { + dList.add(a); + } + if (!Double.isNaN(b)) { + dList.add(b); + } + if (!Double.isNaN(c)) { + dList.add(c); + } + if (Double.isNaN(d)) { + dList.add(d); + } + + double calVal; + if (dList.isEmpty()) { + continue; + } else if (dList.size() == 1) { + calVal = dList.get(0); + } else if (dList.size() <= 3) { + double aSum = 0; + for (double dd : dList) { + aSum += dd; + } + calVal = aSum / dList.size(); + } else { + double x1val = a + (c - a) * (syi - i1); + double x2val = b + (d - b) * (syi - i1); + calVal = x1val + (x2val - x1val) * (sxi - j1); + } + double eVal = val - calVal; + w = Math.exp(-dis / (4 * kappa * gamma)); + sum += eVal * w; + wSum += w; + } + if (wSum >= 0.000001) { + double aData = r[i][j] + sum / wSum; + r[i][j] = Math.max(BOT[i][j], Math.min(TOP[i][j], aData)); + } + } + } + } + + //Return + return r; + } + /** * Barnes analysis * @@ -766,6 +950,33 @@ public class InterpUtil { return r; } + /** + * Kriging interpolation + * + * @param x_s scatter X array + * @param y_s scatter Y array + * @param v_s scatter value array + * @param X x array + * @param Y y array + * @param beta Beta value + * @return result grid data + */ + public static double[][] kriging(double[] x_s, double[] y_s, double[] v_s, double[] X, double[] Y, + double beta) { + KrigingInterpolation2D krigingInterpolation2D = new KrigingInterpolation2D(x_s, + y_s, v_s, beta); + int ny = Y.length; + int nx = X.length; + double[][] gData = new double[ny][nx]; + for (int i = 0; i < ny; i++) { + for (int j = 0; j < nx; j++) { + gData[i][j] = krigingInterpolation2D.interpolate(X[j], Y[i]); + } + } + + return gData; + } + /** * Interpolate with inside method - The grid cell value is the sum value * of the inside points or fill value if no inside point.