From c07a4aa6ecabddb15e0e4ca2a8c3524bf05d3e7a Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期六, 14 九月 2024 10:56:47 +0800
Subject: [PATCH] 1

---
 src/main/java/com/se/simu/helper/ShpHelper.java |   71 ++++++++++++++++++++++-------------
 1 files changed, 45 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/se/simu/helper/ShpHelper.java b/src/main/java/com/se/simu/helper/ShpHelper.java
index 61ee8c0..f6b1587 100644
--- a/src/main/java/com/se/simu/helper/ShpHelper.java
+++ b/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;
+        }
+    }
 }

--
Gitblit v1.9.3