From d37ea500e563c749652711716873021b772813f3 Mon Sep 17 00:00:00 2001 From: wyq Date: Mon, 29 Nov 2021 23:49:28 +0800 Subject: [PATCH] support both tiff and geotiff --- .../Maven__com_formdev_flatlaf_1_6_4.xml | 13 +++++++ ...aven__com_formdev_flatlaf_extras_1_6_4.xml | 13 +++++++ ...he_commons_commons_imaging_1_0_alpha2.xml} | 8 ++--- meteoinfo-chart/meteoinfo-chart.iml | 2 +- .../data/mapdata/geotiff/GeoTiff.java | 33 ++++++++++++++++-- meteoinfo-geo/meteoinfo-geo.iml | 2 +- .../meteoinfo/geo/mapdata/MapDataManage.java | 11 ++++-- .../org/meteoinfo/geo/mapview/MapView.java | 3 +- meteoinfo-image/meteoinfo-image.iml | 2 +- meteoinfo-image/pom.xml | 2 +- meteoinfo-lab/meteoinfo-lab.iml | 2 +- meteoinfo-lab/milconfig.xml | 20 ++++++----- .../pylib/mipylib/geolib/migeo$py.class | Bin 35571 -> 35569 bytes meteoinfo-lab/pylib/mipylib/geolib/migeo.py | 8 ++--- meteoinfo-map/config.xml | 2 +- meteoinfo-map/meteoinfo-map.iml | 2 +- 16 files changed, 93 insertions(+), 30 deletions(-) create mode 100644 .idea/libraries/Maven__com_formdev_flatlaf_1_6_4.xml create mode 100644 .idea/libraries/Maven__com_formdev_flatlaf_extras_1_6_4.xml rename .idea/libraries/{Maven__org_apache_commons_commons_imaging_1_0_alpha1.xml => Maven__org_apache_commons_commons_imaging_1_0_alpha2.xml} (67%) diff --git a/.idea/libraries/Maven__com_formdev_flatlaf_1_6_4.xml b/.idea/libraries/Maven__com_formdev_flatlaf_1_6_4.xml new file mode 100644 index 00000000..381a8079 --- /dev/null +++ b/.idea/libraries/Maven__com_formdev_flatlaf_1_6_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_formdev_flatlaf_extras_1_6_4.xml b/.idea/libraries/Maven__com_formdev_flatlaf_extras_1_6_4.xml new file mode 100644 index 00000000..2c6a573f --- /dev/null +++ b/.idea/libraries/Maven__com_formdev_flatlaf_extras_1_6_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_imaging_1_0_alpha1.xml b/.idea/libraries/Maven__org_apache_commons_commons_imaging_1_0_alpha2.xml similarity index 67% rename from .idea/libraries/Maven__org_apache_commons_commons_imaging_1_0_alpha1.xml rename to .idea/libraries/Maven__org_apache_commons_commons_imaging_1_0_alpha2.xml index 5aac6314..c61dc08d 100644 --- a/.idea/libraries/Maven__org_apache_commons_commons_imaging_1_0_alpha1.xml +++ b/.idea/libraries/Maven__org_apache_commons_commons_imaging_1_0_alpha2.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 24b69ee1..14c980c6 100644 --- a/meteoinfo-chart/meteoinfo-chart.iml +++ b/meteoinfo-chart/meteoinfo-chart.iml @@ -65,7 +65,7 @@ - + diff --git a/meteoinfo-data/src/main/java/org/meteoinfo/data/mapdata/geotiff/GeoTiff.java b/meteoinfo-data/src/main/java/org/meteoinfo/data/mapdata/geotiff/GeoTiff.java index a4d186c6..8dc96603 100644 --- a/meteoinfo-data/src/main/java/org/meteoinfo/data/mapdata/geotiff/GeoTiff.java +++ b/meteoinfo-data/src/main/java/org/meteoinfo/data/mapdata/geotiff/GeoTiff.java @@ -532,6 +532,28 @@ public class GeoTiff { } } + /** + * Check the tiff file is geotiff or not + * @param filename The tiff file name + * @return Is geotiff or not + */ + public static boolean isGeoTiff(String filename) { + try { + GeoTiff geoTiff = new GeoTiff(filename); + geoTiff.read(); + IFDEntry modelTransformationTag = geoTiff.findTag(Tag.ModelTransformationTag); + if (modelTransformationTag != null) { + return true; + } else { + IFDEntry modelTiePointTag = geoTiff.findTag(Tag.ModelTiepointTag); + return modelTiePointTag != null; + } + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + /** * Find tag * @@ -676,7 +698,14 @@ public class GeoTiff { int width = widthIFD.value[0]; int height = heightIFD.value[0]; GridArray gData = new GridArray(); - gData.setData(readArray()); + Array data = readArray(); + if (data.getRank() == 3) { + int[] dShape = data.getShape(); + int[] origin = new int[]{0, 0, 0}; + int[] shape = new int[]{dShape[0], dShape[1], 1}; + data = data.section(origin, shape); + } + gData.setData(data); //Grid data coordinate double[] X = new double[width]; @@ -714,7 +743,7 @@ public class GeoTiff { } return gData; - } catch (IOException ex) { + } catch (IOException | InvalidRangeException ex) { Logger.getLogger(GeoTiff.class.getName()).log(Level.SEVERE, null, ex); return null; } diff --git a/meteoinfo-geo/meteoinfo-geo.iml b/meteoinfo-geo/meteoinfo-geo.iml index 170a11f9..b4822e59 100644 --- a/meteoinfo-geo/meteoinfo-geo.iml +++ b/meteoinfo-geo/meteoinfo-geo.iml @@ -74,7 +74,7 @@ - + diff --git a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapdata/MapDataManage.java b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapdata/MapDataManage.java index e86f2df9..e5906326 100644 --- a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapdata/MapDataManage.java +++ b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapdata/MapDataManage.java @@ -13,6 +13,7 @@ */ package org.meteoinfo.geo.mapdata; +import org.apache.commons.imaging.ImageReadException; import org.meteoinfo.common.DataConvert; import org.meteoinfo.common.Extent; import org.meteoinfo.common.PointD; @@ -33,6 +34,7 @@ import org.meteoinfo.geometry.legend.LegendType; import org.meteoinfo.geometry.shape.Shape; import org.meteoinfo.geometry.shape.*; import org.meteoinfo.geometry.geoprocess.GeometryUtil; +import org.meteoinfo.image.ImageUtil; import org.meteoinfo.ndarray.Array; import org.meteoinfo.ndarray.DataType; import org.meteoinfo.projection.KnownCoordinateSystems; @@ -80,7 +82,10 @@ public class MapDataManage { mdt = MapDataType.IMAGE; break; case "tif": - mdt = MapDataType.GEO_TIFF; + if (GeoTiff.isGeoTiff(fileName)) + mdt = MapDataType.GEO_TIFF; + else + mdt = MapDataType.IMAGE; break; case "bil": case "bip": @@ -322,13 +327,13 @@ public class MapDataManage { * @return Image layer * @throws IOException */ - public static ImageLayer readImageFile(String aFile) throws IOException { + public static ImageLayer readImageFile(String aFile) throws IOException, ImageReadException { String oEx = aFile.substring(aFile.lastIndexOf(".")); String last = oEx.substring(oEx.length() - 1); String sEx = oEx.substring(0, oEx.length() - 2) + last; sEx = sEx + "w"; String wFile = aFile.replace(oEx, sEx); - BufferedImage aImage = ImageIO.read(new File(aFile)); + BufferedImage aImage = ImageUtil.imageLoad(aFile); ImageLayer aImageLayer = new ImageLayer(); aImageLayer.setFileName(aFile); aImageLayer.setWorldFileName(wFile); diff --git a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapview/MapView.java b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapview/MapView.java index 8656b2ba..414bfa64 100644 --- a/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapview/MapView.java +++ b/meteoinfo-geo/src/main/java/org/meteoinfo/geo/mapview/MapView.java @@ -18,6 +18,7 @@ import com.itextpdf.text.DocumentException; import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfTemplate; import com.itextpdf.text.pdf.PdfWriter; +import org.apache.commons.imaging.ImageReadException; import org.meteoinfo.common.*; import org.meteoinfo.common.util.GlobalUtil; import org.meteoinfo.geo.mapdata.MapDataManage; @@ -9719,7 +9720,7 @@ public class MapView extends JPanel implements IWebMapPanel { if (new File(aFile).exists()) { try { aLayer = MapDataManage.readImageFile(aFile); - } catch (IOException ex) { + } catch (IOException | ImageReadException ex) { Logger.getLogger(MapView.class.getName()).log(Level.SEVERE, null, ex); } try { diff --git a/meteoinfo-image/meteoinfo-image.iml b/meteoinfo-image/meteoinfo-image.iml index bf706de4..f4147108 100644 --- a/meteoinfo-image/meteoinfo-image.iml +++ b/meteoinfo-image/meteoinfo-image.iml @@ -68,6 +68,6 @@ - + \ No newline at end of file diff --git a/meteoinfo-image/pom.xml b/meteoinfo-image/pom.xml index 6229f65d..a2eb1226 100644 --- a/meteoinfo-image/pom.xml +++ b/meteoinfo-image/pom.xml @@ -25,7 +25,7 @@ org.apache.commons commons-imaging - 1.0-alpha1 + 1.0-alpha2 diff --git a/meteoinfo-lab/meteoinfo-lab.iml b/meteoinfo-lab/meteoinfo-lab.iml index 25c1d501..72f854f0 100644 --- a/meteoinfo-lab/meteoinfo-lab.iml +++ b/meteoinfo-lab/meteoinfo-lab.iml @@ -75,7 +75,7 @@ - + diff --git a/meteoinfo-lab/milconfig.xml b/meteoinfo-lab/milconfig.xml index bdd07a5b..b71e7ae4 100644 --- a/meteoinfo-lab/milconfig.xml +++ b/meteoinfo-lab/milconfig.xml @@ -1,32 +1,34 @@ - - - - + - - - + + + + + + - + + - + + diff --git a/meteoinfo-lab/pylib/mipylib/geolib/migeo$py.class b/meteoinfo-lab/pylib/mipylib/geolib/migeo$py.class index 08ce4555e506e0ea99db3a88a66902882e4ffcf4..767d6b20586b6dee9146bf63da4929d6513ee64c 100644 GIT binary patch delta 30 mcmex7mFeSDrVVHL7;jHL$0xb@C7+2lOOA%?gw2XpmjVFP`3$H4 delta 34 scmV+-0Nwxbl>+mX0 - + diff --git a/meteoinfo-map/meteoinfo-map.iml b/meteoinfo-map/meteoinfo-map.iml index 2a56386f..fcf123cd 100644 --- a/meteoinfo-map/meteoinfo-map.iml +++ b/meteoinfo-map/meteoinfo-map.iml @@ -66,7 +66,7 @@ - +