From 3417cf014a65765e02696c1d121ce58b2b4a8aed Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期二, 08 四月 2025 15:55:36 +0800 Subject: [PATCH] 修改pom.xml --- src/main/java/com/se/simu/helper/GdalHelper.java | 109 ++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 69 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/se/simu/helper/GdalHelper.java b/src/main/java/com/se/simu/helper/GdalHelper.java index e988d0e..3ea0ba9 100644 --- a/src/main/java/com/se/simu/helper/GdalHelper.java +++ b/src/main/java/com/se/simu/helper/GdalHelper.java @@ -6,17 +6,12 @@ import org.gdal.gdal.gdal; import org.gdal.gdalconst.gdalconst; import org.gdal.ogr.*; +import org.gdal.osr.CoordinateTransformation; import org.gdal.osr.SpatialReference; import org.gdal.osr.osr; import java.io.File; -/** - * GDAL甯姪绫� - * - * @author WWW - * @date 2024-09-12 - */ @Slf4j @SuppressWarnings("ALL") public class GdalHelper { @@ -51,29 +46,20 @@ } } - // 鏀寔涓枃璺緞 gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES"); - // 灞炴�ц〃鏀寔涓枃锛欳P936 gdal.SetConfigOption("SHAPE_ENCODING", ""); gdal.SetConfigOption("PGEO_DRIVER_TEMPLATE", "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s"); gdal.SetConfigOption("MDB_DRIVER_TEMPLATE", "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s"); - // 娉ㄥ唽鎵�鏈夌殑椹卞姩 gdal.AllRegister(); ogr.RegisterAll(); initSr(); } - /** - * 鍒濆鍖栧潗鏍囩郴 - * <p> - * https://blog.csdn.net/CallmeAdo/article/details/127558139 - */ public static void initSr() { try { SR4326 = new SpatialReference(); SR4326.ImportFromEPSG(I4326); - // 瀵逛簬lat/long椤哄簭鐨勫湴鐞咰RS锛屾暟鎹粛鐒舵槸long/lat椤哄簭鐨� SR4326.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER); SR4490 = new SpatialReference(); @@ -84,9 +70,14 @@ } } - /** - * 鍒涘缓閲戝瓧濉� - */ + public static SpatialReference createSpatialReference(int epsg) { + SpatialReference sr = new SpatialReference(); + sr.ImportFromEPSG(epsg); + sr.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER); + + return sr; + } + public static void createPyramid(String file) { Dataset ds = null; try { @@ -100,7 +91,6 @@ return; } - // 鍒涘缓閲戝瓧濉� Band band = ds.GetRasterBand(1); if (0 == band.GetOverviewCount()) { ds.BuildOverviews("nearest", new int[]{2, 4, 6, 8, 16}, null); @@ -114,9 +104,6 @@ } } - /** - * 閿�姣佽祫婧� - */ public static void delete(Layer layer, DataSource dataSource, Driver driver) { try { if (null != layer) { @@ -141,8 +128,7 @@ } } - public static Geometry getMinPoint(Dataset ds) - { + public static Geometry getMinPoint(Dataset ds) { double[] transform = new double[6]; ds.GetGeoTransform(transform); @@ -155,17 +141,7 @@ return Transform(ds, point); } - public static Geometry getMaxPoint(Dataset ds) - { - /* - * transform[0] 宸︿笂瑙抶鍧愭爣 - * transform[1] 涓滆タ鏂瑰悜鍒嗚鲸鐜� - * transform[2] 鏃嬭浆瑙掑害, 0琛ㄧず鍥惧儚 "鍖楁柟鏈濅笂" - * - * transform[3] 宸︿笂瑙抷鍧愭爣 - * transform[4] 鏃嬭浆瑙掑害, 0琛ㄧず鍥惧儚 "鍖楁柟鏈濅笂" - * transform[5] 鍗楀寳鏂瑰悜鍒嗚鲸鐜� - */ + public static Geometry getMaxPoint(Dataset ds) { double[] transform = new double[6]; ds.GetGeoTransform(transform); @@ -178,11 +154,9 @@ return Transform(ds, point); } - public static Geometry Transform(Dataset ds, Geometry point) - { + public static Geometry Transform(Dataset ds, Geometry point) { point.AssignSpatialReference(ds.GetSpatialRef()); - if (ds.GetSpatialRef().IsGeographic() > 0) - { + if (ds.GetSpatialRef().IsGeographic() > 0) { return point; } @@ -195,8 +169,63 @@ //{ point.TransformTo(SR4326); //} - point.SwapXY(); + //point.SwapXY(); return point; } + + public static Geometry toWgs84(SpatialReference sr, double x, double y) { + Geometry point = new Geometry(ogr.wkbPoint); + point.AssignSpatialReference(sr); + point.AddPoint(x, y); + + point.TransformTo(GdalHelper.SR4326); + //point.SwapXY(); + + return point; + } + + public static int toWgs84(SpatialReference sr, Geometry g) { + CoordinateTransformation ct = new CoordinateTransformation(sr, GdalHelper.SR4326); + if (sr.IsProjected() != 1) { + sr.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER); + } + + return g.TransformTo(GdalHelper.SR4326); + } + + public static double[] fromWgs84(SpatialReference sr, double x, double y) { + CoordinateTransformation ct = new CoordinateTransformation(GdalHelper.SR4326, sr); + if (sr.IsProjected() != 1) { + sr.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER); + } + + return ct.TransformPoint(x, y); + } + + public static int fromWgs84(SpatialReference sr, Geometry g) { + CoordinateTransformation ct = new CoordinateTransformation(GdalHelper.SR4326, sr); + if (sr.IsProjected() != 1) { + sr.SetAxisMappingStrategy(osr.OAMS_TRADITIONAL_GIS_ORDER); + } + + return g.TransformTo(sr); + } + + public static Geometry createPolygon(SpatialReference sr, Double minx, Double miny, Double maxx, Double maxy) { + Geometry ring = new Geometry(ogr.wkbLinearRing); + ring.AddPoint_2D(minx, maxy); + ring.AddPoint_2D(maxx, maxy); + ring.AddPoint_2D(maxx, miny); + ring.AddPoint_2D(minx, miny); + ring.AddPoint_2D(minx, maxy); + + Geometry poly = new Geometry(ogr.wkbPolygon); + poly.AddGeometry(ring); + if (null != sr) { + poly.AssignSpatialReference(sr); + } + + return poly; + } } -- Gitblit v1.9.3