1
13693261870
2024-09-14 3e0b038b5c61aa26a5be2fffada678e9dad58aa2
1
已修改3个文件
114 ■■■■ 文件已修改
src/main/java/com/se/simu/domain/SeLayer.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/helper/ShpHelper.java 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/service/SedbService.java 25 ●●●● 补丁 | 查看 | 原始文档 | 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);