From a6f37256ba16e1df8bb1193fec41bbaecd4ec835 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期六, 14 九月 2024 13:55:27 +0800 Subject: [PATCH] 1 --- src/main/java/com/se/simu/helper/ShpHelper.java | 71 +++++++++++++++++++++++++++++------ 1 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/se/simu/helper/ShpHelper.java b/src/main/java/com/se/simu/helper/ShpHelper.java index 61b70ef..f2312d8 100644 --- a/src/main/java/com/se/simu/helper/ShpHelper.java +++ b/src/main/java/com/se/simu/helper/ShpHelper.java @@ -2,11 +2,14 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; import com.se.simu.domain.SeField; import com.se.simu.domain.SeLayer; import lombok.extern.slf4j.Slf4j; import org.gdal.ogr.*; +import java.sql.Timestamp; +import java.time.LocalDateTime; import java.util.List; /** @@ -38,8 +41,12 @@ FeatureDefn featureDefn = layer.GetLayerDefn(); 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(); + JSONObject data = seLayer.getData().getJSONObject(i).getJSONObject("properties"); + setFeatureData(f, seLayer.getFields(), data); + + JSONObject geom = seLayer.getData().getJSONObject(i).getJSONObject("geometry"); + Geometry g = createGeometry(seLayer, geom); + f.SetGeometry(g); layer.CreateFeature(f); } @@ -53,34 +60,74 @@ } } - private static void setFeatureData(Feature f, List<SeField> fields, JSONArray arr) { + private static void setFeatureData(Feature f, List<SeField> fields, JSONObject data) { for (int i = 0, c = fields.size(); i < c; i++) { SeField seField = fields.get(i); switch (seField.getType()) { case "int": - + f.SetField(i, data.getInt(seField.getName())); break; case "long": - + f.SetField(i, data.getLong(seField.getName())); break; case "double": - + f.SetField(i, data.getDouble(seField.getName())); break; case "datetime": - + long date = data.getLong(seField.getName()); + Timestamp time = new Timestamp(date); + setTimestamp(f, i, time); break; default: - + f.SetField(i, data.getStr(seField.getName())); break; } } - } - private static Geometry createGeometry() { - Geometry g = null; - // + private static void setTimestamp(Feature f, int i, Timestamp time) { + if (null == time) return; + LocalDateTime local = time.toLocalDateTime(); + f.SetField(i, local.getYear(), local.getMonthValue(), local.getDayOfMonth(), local.getHour(), local.getMinute(), local.getSecond(), 8); + } + + /** + * 鍒涘缓Geometry瀵硅薄 + */ + private static Geometry createGeometry(SeLayer seLayer, JSONObject geom) { + String type = geom.getStr("type"); + JSONArray cs = geom.getJSONArray("coordinates"); + + Geometry g = null; + switch (type) { + case "Point": + g = new Geometry(ogr.wkbPoint); + g.AddPoint_2D(cs.getDouble(0), cs.getDouble(1)); + break; + case "MultiLineString": + //g = new Geometry(ogr.wkbMultiLineString); + Geometry line = new Geometry(ogr.wkbLineString); + //g.AddGeometry(line); + cs = cs.getJSONArray(0).getJSONArray(0); + for (int i = 0, c = cs.size(); i < c; i++) { + JSONArray arr = cs.getJSONArray(i); + line.AddPoint_2D(arr.getDouble(0), arr.getDouble(1)); + } + g = line; + break; + case "MultiPolygon": + //g = new Geometry(ogr.wkbMultiPolygon); + Geometry ring = new Geometry(ogr.wkbLinearRing); + //g.AddGeometry(line); + cs = cs.getJSONArray(0).getJSONArray(0); + for (int i = 0, c = cs.size(); i < c; i++) { + JSONArray arr = cs.getJSONArray(i); + ring.AddPoint_2D(arr.getDouble(0), arr.getDouble(1)); + } + g = ring; + break; + } return g; } -- Gitblit v1.9.3