src/main/java/com/se/simu/domain/SeLayer.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/domain/SeLayer.java
@@ -15,15 +15,15 @@ private String name; private Integer dataType; private List<SeField> fields; private JSONArray data; private String queryType; private String shpName; private SeDb db; private JSONArray data; public SeLayer() { this.data = new JSONArray(); @@ -33,30 +33,16 @@ this(); this.id = id; this.name = name; this.data = new JSONArray(); } public SeLayer(String id, String name, String shpName, Integer dataType, List<SeField> fields) { public SeLayer(String id, String name, String queryType, List<SeField> fields, String shpName, SeDb db) { this(); this.id = id; this.name = name; this.shpName = shpName; this.dataType = dataType; this.queryType = queryType; this.fields = fields; this.queryType = getQueryType(dataType); } public String getQueryType(Integer dataType) { switch (dataType) { case 2: case 4: return "point"; case 1: case 3: return "polyline"; default: return "polygon"; } this.shpName = shpName; this.db = db; } public void addData(JSONArray arr) { @@ -77,14 +63,6 @@ public void setName(String name) { this.name = name; } public Integer getDataType() { return dataType; } public void setDataType(Integer dataType) { this.dataType = dataType; } public List<SeField> getFields() { @@ -118,4 +96,12 @@ public void setShpName(String shpName) { this.shpName = shpName; } public SeDb getDb() { return db; } public void setDb(SeDb db) { this.db = db; } } src/main/java/com/se/simu/helper/ShpHelper.java
@@ -1,5 +1,6 @@ package com.se.simu.helper; import cn.hutool.core.io.FileUtil; import com.se.simu.domain.SeLayer; import lombok.extern.slf4j.Slf4j; import org.gdal.ogr.*; @@ -21,28 +22,20 @@ @Slf4j @SuppressWarnings("ALL") public class ShpHelper { public static boolean createShp(String path, SeLayer seLayer) { public static boolean createShp(String filePath, 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; // } driver = ogr.GetDriverByName("ESRI shapefile"); if (null == driver) return false; dataSource = driver.CreateDataSource(filePath, null); if (null == dataSource) return false; int geoType = getGeometryType(seLayer.getQueryType()); layer = dataSource.CreateLayer(FileUtil.getName(filePath), null, geoType); if (null == layer) return false; // // List<Field> fields = new ArrayList<>(); // GdbHelper.getFields(MarkJsonEntity.class, fields, StaticData.MARK_EXCLUDE_FIELDS); @@ -68,17 +61,23 @@ } } public static void ss(){ } /** * 获取图形类型 */ private static int getGeometryType(String type) { switch (type) { case "POINT": case "point": return ogr.wkbPoint; case "LINESTRING": case "polyline": return ogr.wkbLineString; case "POLYGON": return ogr.wkbPolygon; case "polygon": // return ogr.wkbPolygon return ogr.wkbMultiPolygon; default: return ogr.wkbUnknown; } src/main/java/com/se/simu/service/SedbService.java
@@ -9,6 +9,7 @@ import com.se.simu.domain.SeLayer; import com.se.simu.helper.RsaHelper; import com.se.simu.helper.ShpHelper; import com.se.simu.helper.StringHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -72,7 +73,7 @@ SeDb db = getSeDb(token); db.setBbox(bbox); List<SeLayer> layers = getLayers(token, db.getDbid()); List<SeLayer> layers = getLayers(token, db); queryData(token, db, layers); createShps(inPath + "\\20240913", layers); @@ -122,8 +123,8 @@ return list.stream().filter(db -> dbName.equals(db.getName())).findFirst().orElse(null); } public List<SeLayer> getLayers(String token, String dbid) { String uri = String.format("%sgeo-service/entitydb/map/config?dbid=%s&token=%s", host, dbid, token); public List<SeLayer> getLayers(String token, SeDb db) { String uri = String.format("%sgeo-service/entitydb/map/config?dbid=%s&token=%s", host, db.getDbid(), token); JSONObject obj = restTemplate.getForObject(uri, JSONObject.class); JSONObject data = obj.getJSONObject("data"); @@ -136,18 +137,32 @@ String name = jb.getStr("name"); if (layerNames.contains(name)) { String id = jb.getStr("id"); Integer dataType = jb.getInt("_data_type"); String queryType = getQueryType(jb); List<SeField> fields = JSONUtil.toList(jb.getJSONArray("fields"), SeField.class); fields = fields.stream().filter(f -> !sysFields.contains(f.getName())).collect(Collectors.toList()); String shpName = shpNames.get(layerNames.indexOf(name)); layers.add(new SeLayer(id, name, shpName, dataType, fields)); layers.add(new SeLayer(id, name, queryType, fields, shpName, db)); } } return layers; } private String getQueryType(JSONObject jb) { String qt = jb.getStr("pointlod"); if (!StringHelper.isEmpty(qt)) { return "point"; } qt = jb.getStr("polylinelod"); if (!StringHelper.isEmpty(qt)) { return "polyline"; } return "polygon"; } public void queryData(String token, SeDb db, List<SeLayer> layers) throws Exception { for (SeLayer layer : layers) { int count = getCount(token, db, layer);