1
13693261870
2024-09-14 c07a4aa6ecabddb15e0e4ca2a8c3524bf05d3e7a
src/main/java/com/se/simu/helper/ShpHelper.java
@@ -1,17 +1,13 @@
package com.se.simu.helper;
import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONArray;
import com.se.simu.domain.SeField;
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帮助类
@@ -34,23 +30,19 @@
            if (null == dataSource) return false;
            int geoType = getGeometryType(seLayer.getQueryType());
            layer = dataSource.CreateLayer(FileUtil.getName(filePath), null, geoType);
            layer = dataSource.CreateLayer(FileUtil.getName(filePath), seLayer.getDb().getSpatialReference(), geoType);
            if (null == layer) return false;
//
//            List<Field> fields = new ArrayList<>();
//            GdbHelper.getFields(MarkJsonEntity.class, fields, StaticData.MARK_EXCLUDE_FIELDS);
//            GdbHelper.addLayerField(layer, fields);
            createLayerFields(layer, seLayer.getFields());
            FeatureDefn featureDefn = layer.GetLayerDefn();
            //for (MarkJsonEntity t : list) {
            //    Feature f = new Feature(featureDefn);
            //    GdbHelper.setFeatureData(f, fields, t);
            for (int i = 0, c = seLayer.getData().size(); i < c; i++) {
                Feature f = new Feature(featureDefn);
                setFeatureData(f, seLayer.getFields(), seLayer.getData().getJSONArray(i));
                Geometry g = createGeometry();
            //    Geometry geo = Geometry.CreateFromWkt(t.getWkt());
            //    f.SetGeometry(geo);
            //
            //    layer.CreateFeature(f);
            //}
                layer.CreateFeature(f);
            }
            return true;
        } catch (Exception ex) {
@@ -61,25 +53,52 @@
        }
    }
    public static void ss(){
    private static void setFeatureData(Feature f, List<SeField> fields, JSONArray arr) {
        //
    }
    /**
     * 获取图形类型
     */
    private static Geometry createGeometry() {
        Geometry g = null;
        //
        return g;
    }
    private static int getGeometryType(String type) {
        switch (type) {
            case "point":
                return ogr.wkbPoint;
            case "polyline":
                return ogr.wkbLineString;
                return ogr.wkbMultiLineString;
            case "polygon":
                // return ogr.wkbPolygon
                return ogr.wkbMultiPolygon;
            default:
                return ogr.wkbUnknown;
        }
    }
    private static void createLayerFields(Layer layer, List<SeField> fields) {
        for (int i = 0, c = fields.size(); i < c; i++) {
            SeField f = fields.get(i);
            FieldDefn fd = new FieldDefn(f.getName(), getFieldType(f));
            layer.CreateField(fd, i);
        }
    }
    private static Integer getFieldType(SeField f) {
        switch (f.getType()) {
            case "int":
                return ogr.OFTInteger;
            case "long":
                return ogr.OFTInteger64;
            case "double":
                return ogr.OFTReal;
            case "datetime":
                return ogr.OFTDateTime;
            default:
                return ogr.OFTString;
        }
    }
}