From ed8c7a5effd0d423ce1118b680ecdca6fe732609 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期三, 02 七月 2025 16:43:13 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.11.205:9000/r/P2022036_Service --- src/main/java/com/lf/server/service/data/RasterService.java | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 101 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/lf/server/service/data/RasterService.java b/src/main/java/com/lf/server/service/data/RasterService.java index b5117d7..1870908 100644 --- a/src/main/java/com/lf/server/service/data/RasterService.java +++ b/src/main/java/com/lf/server/service/data/RasterService.java @@ -1,11 +1,18 @@ package com.lf.server.service.data; +import com.lf.server.entity.all.StaticData; import com.lf.server.helper.StringHelper; +import com.lf.server.helper.WebHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.gdal.gdal.Dataset; import org.gdal.gdal.gdal; import org.gdal.gdalconst.gdalconst; +import org.gdal.ogr.Geometry; +import org.gdal.ogr.ogr; +import org.gdal.osr.SpatialReference; +import org.osgeo.proj4j.*; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.io.File; @@ -17,7 +24,28 @@ */ @Service public class RasterService { + private SpatialReference sr4326; + + private SpatialReference sr4490; + + @Value("${sys.gdal_path}") + private String gdalPath; + private final static Log log = LogFactory.getLog(RasterService.class); + + /** + * 鍒濆鍖栫┖闂村弬鑰� + */ + public void initSr() { + if (null == sr4326) { + sr4326 = new SpatialReference(); + sr4326.ImportFromEPSG(StaticData.I4326); + } + if (null == sr4490) { + sr4490 = new SpatialReference(); + sr4490.ImportFromEPSG(StaticData.I4490); + } + } /** * 鑾峰彇鏍呮牸鏁版嵁鐨凟PSG缂栫爜 @@ -55,4 +83,77 @@ } } } + + /** + * 浣跨敤GDAL鑾峰彇EPSG缂栫爜 + */ + public Integer getEpsgByGdal(String file) { + try { + File f = new File(file); + if (!f.exists() || f.isDirectory()) { + return null; + } + + String cmd = String.format("%s\\gdalsrsinfo.exe \"%s\" -o epsg", gdalPath, file); + String rs = WebHelper.exec2(cmd); + if (StringHelper.isEmpty(rs)) { + return null; + } + + String[] strs = rs.split("\n"); + for (String str : strs) { + if (str.contains("EPSG:")) { + String epsg = str.replace("EPSG:", ""); + + return Integer.parseInt(epsg); + } + } + + return 0; + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return null; + } + } + + /** + * 鍧愭爣杞崲 + */ + public Object csTransform(double x, double y, int epsg) { + this.initSr(); + + SpatialReference srs = new SpatialReference(); + srs.ImportFromEPSG(epsg); + + Geometry point = new Geometry(ogr.wkbPoint); + point.AddPoint(x, y, 0); + point.AssignSpatialReference(srs); + + if (srs.GetName().contains(StaticData.CGCS2000)) { + point.TransformTo(sr4490); + } else { + point.TransformTo(sr4326); + } + point.SwapXY(); + + return new double[]{point.GetX(), point.GetY()}; + } + + /** + * 鍧愭爣杞崲-浣跨敤Proj4j搴� + */ + public String transformByProj4j(double x, double y, int epsg) { + CRSFactory crsFactory = new CRSFactory(); + CoordinateReferenceSystem fromCrs = crsFactory.createFromName("EPSG:" + epsg); + CoordinateReferenceSystem toCrs = crsFactory.createFromName("EPSG:4326"); + + CoordinateTransformFactory ctf = new CoordinateTransformFactory(); + CoordinateTransform transform = ctf.createTransform(fromCrs, toCrs); + + ProjCoordinate fromCoord = new ProjCoordinate(x, y); + ProjCoordinate toCoord = new ProjCoordinate(); + transform.transform(fromCoord, toCoord); + + return String.format("%f,%f", toCoord.x, toCoord.y); + } } -- Gitblit v1.9.3