src/main/java/com/se/simu/controller/TaskController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/helper/GdalHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/helper/ShpHelper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/se/simu/service/SedbService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/se/simu/controller/TaskController.java
@@ -28,7 +28,7 @@ @PostMapping(value = "/createTask", produces = "application/json; charset=UTF-8") public R<Object> createTask() { try { String rs = sedbService.test(); Object rs = sedbService.test(); return success(rs); } catch (Exception ex) { src/main/java/com/se/simu/helper/GdalHelper.java
@@ -5,6 +5,9 @@ import org.gdal.gdal.Dataset; import org.gdal.gdal.gdal; import org.gdal.gdalconst.gdalconst; import org.gdal.ogr.DataSource; import org.gdal.ogr.Driver; import org.gdal.ogr.Layer; import org.gdal.ogr.ogr; import org.gdal.osr.SpatialReference; import org.gdal.osr.osr; @@ -66,7 +69,7 @@ /** * åå§ååæ ç³» * * <p> * https://blog.csdn.net/CallmeAdo/article/details/127558139 */ public static void initSr() { @@ -113,4 +116,31 @@ } } } /** * éæ¯èµæº */ public static void delete(Layer layer, DataSource dataSource, Driver driver) { try { if (null != layer) { layer.delete(); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } try { if (null != dataSource) { dataSource.delete(); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } try { if (null != driver) { driver.delete(); } } catch (Exception ex) { log.error(ex.getMessage(), ex); } } } src/main/java/com/se/simu/helper/ShpHelper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,86 @@ package com.se.simu.helper; import com.se.simu.domain.SeLayer; import lombok.extern.slf4j.Slf4j; import org.gdal.ogr.*; import org.gdal.osr.SpatialReference; import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * ShapeFile帮å©ç±» * * @author WWW * @date 2024-09-13 */ @Slf4j @SuppressWarnings("ALL") public class ShpHelper { public static boolean createShp(String path, SeLayer seLayer) { Driver driver = null; DataSource dataSource = null; Layer layer = null; try { // driver = ogr.GetDriverByName("ESRI shapefile"); // if (null == driver) { // return null; // } // // String filePath = path + File.separator + type.toLowerCase() + ".shp"; // // DataSource ds = driver.Open(filePath, 0) // dataSource = driver.CreateDataSource(filePath, null); // if (null == dataSource) { // return null; // } // // int geoType = getGeometryType(type); // layer = dataSource.CreateLayer(type.toLowerCase(), GeoHelper.sr104903, geoType); // if (null == layer) { // return null; // } // // List<Field> fields = new ArrayList<>(); // GdbHelper.getFields(MarkJsonEntity.class, fields, StaticData.MARK_EXCLUDE_FIELDS); // GdbHelper.addLayerField(layer, fields); FeatureDefn featureDefn = layer.GetLayerDefn(); //for (MarkJsonEntity t : list) { // Feature f = new Feature(featureDefn); // GdbHelper.setFeatureData(f, fields, t); // Geometry geo = Geometry.CreateFromWkt(t.getWkt()); // f.SetGeometry(geo); // // layer.CreateFeature(f); //} return true; } catch (Exception ex) { log.error(ex.getMessage(), ex); return false; } finally { GdalHelper.delete(layer, dataSource, driver); } } /** * è·åå¾å½¢ç±»å */ private static int getGeometryType(String type) { switch (type) { case "POINT": return ogr.wkbPoint; case "LINESTRING": return ogr.wkbLineString; case "POLYGON": return ogr.wkbPolygon; default: return ogr.wkbUnknown; } } } src/main/java/com/se/simu/service/SedbService.java
@@ -1,5 +1,6 @@ package com.se.simu.service; import cn.hutool.core.io.FileUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -7,6 +8,7 @@ import com.se.simu.domain.SeField; import com.se.simu.domain.SeLayer; import com.se.simu.helper.RsaHelper; import com.se.simu.helper.ShpHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -15,6 +17,7 @@ import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.io.File; import java.util.*; import java.util.stream.Collectors; @@ -28,6 +31,9 @@ @Service @SuppressWarnings("ALL") public class SedbService { @Value("${sys.path.in}") String inPath; @Value("${sedb.host}") String host; @@ -54,11 +60,11 @@ String password; @Resource RestTemplate restTemplate; public String test() throws Exception { public boolean test() throws Exception { // 469538.6536261877,4416744.922022615,469853.14714664617,4417049.378602433 String bbox = "116.64388473935195,39.884315914604464,116.64754729082588,39.887069143903496"; String token = getToken(); @@ -69,7 +75,9 @@ List<SeLayer> layers = getLayers(token, db.getDbid()); queryData(token, db, layers); return db.getDbid(); createShps(inPath + "\\20240913", layers); return true; } public String getToken() throws Exception { @@ -155,7 +163,7 @@ } } public int getCount(String token, SeDb db, SeLayer layer) { private int getCount(String token, SeDb db, SeLayer layer) { Map<String, Object> map = new HashMap<>(6); map.put("token", token); map.put("dbid", db.getDbid()); @@ -170,7 +178,7 @@ return obj.getInt("data"); } public JSONArray query(String token, SeDb db, SeLayer layer, int start, int count) { private JSONArray query(String token, SeDb db, SeLayer layer, int start, int count) { Map<String, Object> map = new HashMap<>(9); map.put("token", token); map.put("start", start); @@ -189,4 +197,19 @@ return data.getJSONArray("features"); } public void createShps(String basePath, List<SeLayer> layers) throws Exception { File f = new File(basePath); if (f.exists() && f.isDirectory()) { FileUtil.del(f); } f.mkdirs(); for (SeLayer layer : layers) { String path = String.format("%s\\%s.shp", basePath, layer.getShpName()); if (!ShpHelper.createShp(path, layer)) { throw new Exception(layer.getName() + "ï¼å建ShapeFileæä»¶å¤±è´¥ï¼"); } } } }