From fe50dd9614060ad8639a3567b0197fe55842afbd Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期一, 28 八月 2023 16:25:34 +0800 Subject: [PATCH] 修改坐标转换功能 --- src/main/java/com/moon/server/service/data/RasterService.java | 64 +++++++++++++++---------------- 1 files changed, 31 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/moon/server/service/data/RasterService.java b/src/main/java/com/moon/server/service/data/RasterService.java index b82a7a1..e16e9ff 100644 --- a/src/main/java/com/moon/server/service/data/RasterService.java +++ b/src/main/java/com/moon/server/service/data/RasterService.java @@ -58,22 +58,20 @@ } ds = gdal.Open(file, gdalconst.GA_ReadOnly); - if (null == ds || ds.getRasterCount() == 0) { + if (null == ds || ds.getRasterCount() == 0 || null == ds.GetSpatialRef()) { return; } SpatialReference sr = ds.GetSpatialRef(); - if (sr != null) { - // 鍧愭爣绯荤粺 - mf.setCoorSys(sr.GetName()); - if (StaticData.MOON200.equals(mf.getCoorSys())) { - // EPSG缂栫爜 - mf.setEpsg("ESRI:" + StaticData.I104903); - } else { - String code = sr.GetAuthorityCode(null); - // EPSG缂栫爜 - mf.setEpsg(StringHelper.isEmpty(code) ? null : "EPSG:" + code); - } + // 鍧愭爣绯荤粺 + mf.setCoorSys(sr.GetName()); + if (StaticData.MOON200.equals(mf.getCoorSys())) { + // EPSG缂栫爜 + mf.setEpsg("ESRI:" + StaticData.I104903); + } else { + // EPSG缂栫爜锛歅ROJCS銆丟EOGCS銆丟EOGCS|UNIT 鎴� NULL + String code = sr.GetAuthorityCode(null); + mf.setEpsg(StringHelper.isEmpty(code) ? null : "EPSG:" + code); } // 琛屽垪鏁� @@ -90,11 +88,11 @@ mf.sethDatum(null); // 鍒嗚鲸鐜� - double[] transform = new double[6]; - ds.GetGeoTransform(transform); - mf.setResolution(String.format("%f,%f", transform[1], transform[5])); + double[] tr = new double[6]; + ds.GetGeoTransform(tr); + mf.setResolution(String.format("%f,%f", tr[1], tr[5])); - if (!StaticData.EPSGS.contains(mf.getEpsg())) { + if (tr[StaticData.I0] == 0.0 && tr[StaticData.I1] == 1.0 && tr[StaticData.I2] == 0.0 && tr[StaticData.I3] == 0.0 && tr[StaticData.I4] == 0.0 && tr[StaticData.I5] == 1.0) { return; } Geometry minPoint = getMinPoint(ds); @@ -164,58 +162,58 @@ double[] transform = new double[6]; ds.GetGeoTransform(transform); - String epsg = ds.GetSpatialRef().GetAuthorityCode(null); double xMin = transform[0]; double yMin = transform[3] - ds.getRasterYSize() * transform[1]; Geometry point = new Geometry(ogr.wkbPoint); point.AddPoint(xMin, yMin, 0); - return transform(ds, point, epsg); + return transform(ds, point); } /** * 鑾峰彇Dataset鐨勬渶澶х偣 */ private Geometry getMaxPoint(Dataset ds) { + /** + * transform[0] 宸︿笂瑙抶鍧愭爣 + * transform[1] 涓滆タ鏂瑰悜鍒嗚鲸鐜� + * transform[2] 鏃嬭浆瑙掑害, 0琛ㄧず鍥惧儚 "鍖楁柟鏈濅笂" + * + * transform[3] 宸︿笂瑙抷鍧愭爣 + * transform[4] 鏃嬭浆瑙掑害, 0琛ㄧず鍥惧儚 "鍖楁柟鏈濅笂" + * transform[5] 鍗楀寳鏂瑰悜鍒嗚鲸鐜� + */ double[] transform = new double[6]; ds.GetGeoTransform(transform); - String epsg = ds.GetSpatialRef().GetAuthorityCode(null); double xMax = transform[0] + (ds.getRasterXSize() * transform[1]); double yMax = transform[3]; Geometry point = new Geometry(ogr.wkbPoint); point.AddPoint(xMax, yMax, 0); - return transform(ds, point, epsg); + return transform(ds, point); } /** * 鍧愭爣杞崲 */ - private Geometry transform(Dataset ds, Geometry point, String epsg) { + private Geometry transform(Dataset ds, Geometry point) { this.initSpatialReference(); - if (StringHelper.isEmpty(epsg)) { - point.AssignSpatialReference(sr104903); - return point; - } - if (String.valueOf(StaticData.I4326).equals(epsg)) { - point.AssignSpatialReference(sr4326); - return point; - } - if (String.valueOf(StaticData.I4490).equals(epsg)) { - point.AssignSpatialReference(sr4490); + point.AssignSpatialReference(ds.GetSpatialRef()); + if (ds.GetSpatialRef().IsGeographic() > 0) { return point; } - point.AssignSpatialReference(ds.GetSpatialRef()); - if (ds.GetSpatialRef().GetName().contains(StaticData.CGCS2000)) { + String srsName = ds.GetSpatialRef().GetName(); + if (srsName.contains(StaticData.CGCS2000)) { point.TransformTo(sr4490); } else { point.TransformTo(sr4326); } + point.SwapXY(); return point; } -- Gitblit v1.9.3