From ae3ca6829a5bae6088b6f6a005377f11fee03df8 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期一, 31 十月 2022 17:17:37 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/entity/ctrl/MarkJsonEntity.java | 54 ++++++++++ src/main/java/com/lf/server/controller/show/MarkController.java | 41 ++++++++ src/main/java/com/lf/server/helper/WebHelper.java | 18 +++ src/main/java/com/lf/server/service/show/MarkService.java | 61 ++++++++++++ src/main/java/com/lf/server/entity/ctrl/IdNameEntity.java | 6 + src/main/java/com/lf/server/helper/GdalHelper.java | 100 +++++++++++++++---- data/db_fn.sql | 13 - src/main/java/com/lf/server/entity/ctrl/FileInfoEntity.java | 6 + 8 files changed, 266 insertions(+), 33 deletions(-) diff --git a/data/db_fn.sql b/data/db_fn.sql index 985f573..9857e0a 100644 --- a/data/db_fn.sql +++ b/data/db_fn.sql @@ -236,12 +236,9 @@ and optime group by to_char(optime, 'yyyy-mm-dd') order by to_char(optime, 'yyyy-mm-dd') asc; ----------------------------------------------------------------------------------------------------- select a.*,coalesce(a.native,'') from lf.sys_user a; -select * from lf.sys_menu order by id; - -select * from lf.sys_blacklist where type = 1; -select * from lf.sys_operate where modular1 is null or modular2 is null; -select count(*) from bd.dlg_agnp; -select count(*) from bd.dlg_25w_aanp; +select ST_PointFromText('POINT(95.80461853400004 34.13862467200005)'); +select ST_LineFromText('LINESTRING(04.98985101830993 37.43840773692756,104.99318913447104 37.43883729720358)', 4326); +select ST_PolygonFromText('POLYGON((104.9907822932683 37.43532941961706,104.99088987736599 37.43532941961706,104.9908670336867 37.4349030213574,104.99078327712658 37.4349030213574,104.9907822932683 37.43532941961706))',4326); -- 114ms锛�180/3248 select count(1) from bd.dlg_agnp a where ST_Intersects(geom, @@ -252,9 +249,7 @@ and ST_Intersects(geom, ST_PolygonFromText('POLYGON ((115.94927385452 32.3754479115071 0,121.989371092554 32.2766788010181 0,121.850621222894 29.6874200067864 0,115.9727267226 29.7835368627922 0,115.94927385452 32.3754479115071 0))', 4326)) -select id,uname "name" from lf.sys_user where uname like '%瀹�%' order by uname limit 10; -select id,name from lf.sys_dep where name like '%鍙�%' order by order_num limit 10; - +select st_astext(geom) from bd.dlg_25w_hfcl limit 10; diff --git a/src/main/java/com/lf/server/controller/show/MarkController.java b/src/main/java/com/lf/server/controller/show/MarkController.java index f9ec04b..2ff0d1f 100644 --- a/src/main/java/com/lf/server/controller/show/MarkController.java +++ b/src/main/java/com/lf/server/controller/show/MarkController.java @@ -2,9 +2,12 @@ import com.lf.server.aspect.SysLog; import com.lf.server.controller.all.BaseController; +import com.lf.server.entity.all.HttpStatus; import com.lf.server.entity.all.ResponseMsg; +import com.lf.server.entity.ctrl.MarkJsonEntity; import com.lf.server.entity.show.MarkEntity; import com.lf.server.entity.sys.UserEntity; +import com.lf.server.helper.WebHelper; import com.lf.server.service.show.MarkService; import com.lf.server.service.sys.TokenService; import io.swagger.annotations.Api; @@ -15,6 +18,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; /** @@ -202,4 +206,41 @@ return fail(ex.getMessage(), -1); } } + + @SysLog() + @ApiOperation(value = "涓婁紶ShapeFile鏂囦欢") + @ResponseBody + @PostMapping(value = "/uploadShp", produces = "application/json; charset=UTF-8") + public ResponseMsg<List<MarkJsonEntity>> uploadShp(HttpServletRequest req, HttpServletResponse res) { + try { + List<MarkJsonEntity> list = null; + + return success(list); + } catch (Exception ex) { + return fail(ex.getMessage(), null); + } + } + + @SysLog() + @ApiOperation(value = "涓嬭浇ShapeFile鏂囦欢") + @ApiImplicitParams({ + @ApiImplicitParam(name = "list", value = "鏍囩粯JSON瀹炰綋绫婚泦鍚�", dataType = "MarkJsonEntity", paramType = "body") + }) + @ResponseBody + @PostMapping(value = "/downloadShp", produces = "application/json; charset=UTF-8") + public void downloadShp(@RequestBody List<MarkJsonEntity> list, HttpServletRequest req, HttpServletResponse res) { + try { + UserEntity ue = tokenService.getCurrentUser(req); + if (ue == null) { + WebHelper.write2Page(res, WebHelper.getErrJson(HttpStatus.UNAUTHORIZED, "鐢ㄦ埛鏈櫥褰�")); + } + if (list == null || list.isEmpty()) { + WebHelper.write2Page(res, WebHelper.getErrJson(HttpStatus.BAD_REQUEST, "鎵句笉鍒版爣缁樺疄浣�")); + } + + markService.downloadShp(ue, list, req, res); + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + } + } } diff --git a/src/main/java/com/lf/server/entity/ctrl/FileInfoEntity.java b/src/main/java/com/lf/server/entity/ctrl/FileInfoEntity.java index c0bf1cb..99cd5c2 100644 --- a/src/main/java/com/lf/server/entity/ctrl/FileInfoEntity.java +++ b/src/main/java/com/lf/server/entity/ctrl/FileInfoEntity.java @@ -1,10 +1,14 @@ package com.lf.server.entity.ctrl; +import java.io.Serializable; + /** * 鏂囦欢淇℃伅 * @author WWW */ -public class FileInfoEntity { +public class FileInfoEntity implements Serializable { + private static final long serialVersionUID = -674723262772248619L; + private String fileName; private Long size; diff --git a/src/main/java/com/lf/server/entity/ctrl/IdNameEntity.java b/src/main/java/com/lf/server/entity/ctrl/IdNameEntity.java index 0ce7f11..1c1ac0e 100644 --- a/src/main/java/com/lf/server/entity/ctrl/IdNameEntity.java +++ b/src/main/java/com/lf/server/entity/ctrl/IdNameEntity.java @@ -1,10 +1,14 @@ package com.lf.server.entity.ctrl; +import java.io.Serializable; + /** * ID-鍚嶇О瀹炰綋绫� * @author WWW */ -public class IdNameEntity { +public class IdNameEntity implements Serializable { + private static final long serialVersionUID = -8485687857643406110L; + private Integer id; private String name; diff --git a/src/main/java/com/lf/server/entity/ctrl/MarkJsonEntity.java b/src/main/java/com/lf/server/entity/ctrl/MarkJsonEntity.java new file mode 100644 index 0000000..1f65218 --- /dev/null +++ b/src/main/java/com/lf/server/entity/ctrl/MarkJsonEntity.java @@ -0,0 +1,54 @@ +package com.lf.server.entity.ctrl; + +import java.io.Serializable; + +/** + * 鏍囩粯JSON瀹炰綋绫� + * @author WWW + */ +public class MarkJsonEntity implements Serializable { + private static final long serialVersionUID = 7776629022021914001L; + + private Integer id; + + private String name; + + private String wkt; + + private String props; + + public MarkJsonEntity() { + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getWkt() { + return wkt; + } + + public void setWkt(String wkt) { + this.wkt = wkt; + } + + public String getProps() { + return props; + } + + public void setProps(String props) { + this.props = props; + } +} diff --git a/src/main/java/com/lf/server/helper/GdalHelper.java b/src/main/java/com/lf/server/helper/GdalHelper.java index 1d0f0df..5d64ca8 100644 --- a/src/main/java/com/lf/server/helper/GdalHelper.java +++ b/src/main/java/com/lf/server/helper/GdalHelper.java @@ -1,5 +1,6 @@ package com.lf.server.helper; +import com.lf.server.entity.ctrl.MarkJsonEntity; import com.lf.server.entity.ctrl.ShpRecordEntity; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -11,6 +12,7 @@ import org.gdal.ogr.*; import org.gdal.osr.SpatialReference; +import java.io.File; import java.sql.Time; import java.sql.Timestamp; import java.time.LocalDate; @@ -72,8 +74,81 @@ return new ShpRecordEntity(wkt, csid); } catch (Exception ex) { - ex.printStackTrace(); + log.error(ex.getMessage(), ex); return null; + } + } + + /** + * 鍒涘缓ShapeFile鏂囦欢 + * + * @param list 鏍囩粯JSON瀹炰綋绫婚泦鍚� + * @param path 璺緞 + * @param type 绫诲瀷锛歅OINT,LINESTRING,POLYGON + * @return ShapeFile鏂囦欢鍚� + */ + public static String createShp(List<MarkJsonEntity> list, String path, String type) { + try { + org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile"); + if (driver == null) { + return null; + } + + String filePath = path + File.separator + type.toLowerCase() + ".shp"; + //DataSource ds = driver.Open(filePath, 0); + DataSource ds = driver.CreateDataSource(filePath, null); + + SpatialReference sr = new SpatialReference(); + sr.ImportFromEPSG(4326); + + int geoType = getGeometryType(type); + Layer layer = ds.CreateLayer(type.toLowerCase(), sr, geoType); + + FieldDefn fdName = new FieldDefn("name", ogr.OFTString); + fdName.SetWidth(50); + layer.CreateField(fdName, 0); + + FieldDefn fdProps = new FieldDefn("props", ogr.OFTString); + fdProps.SetWidth(1024); + // layer.DeleteField(layer.FindFieldIndex("name", 1)); + layer.CreateField(fdProps, 1); + + FeatureDefn featureDefn = layer.GetLayerDefn(); + for (MarkJsonEntity mje : list) { + Geometry geo = Geometry.CreateFromWkt(mje.getWkt()); + + Feature f = new Feature(featureDefn); + f.SetField(0, mje.getName()); + f.SetField(1, mje.getProps()); + f.SetGeometry(geo); + + layer.CreateFeature(f); + } + + layer.delete(); + ds.delete(); + driver.delete(); + + return filePath; + } catch (Exception ex) { + log.error(ex.getMessage(), ex); + return null; + } + } + + /** + * 鑾峰彇鍥惧舰绫诲瀷 + */ + private static int getGeometryType(String type) { + switch (type) { + case "POINT": + return 1; + case "LINESTRING": + return 2; + case "POLYGON": + return 3; + default: + return -1; } } @@ -111,29 +186,9 @@ gdal.GDALDestroyDriverManager(); } - private static void writeShp(String filePath) { - try { - org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile"); - if (driver == null) { - System.out.println(" ESRI shapefile椹卞姩涓嶅彲鐢紒\n"); - System.out.println("fail"); - } - - // Open()鐨勭浜屼釜鍙傛暟榛樿涓�0锛屾槸浠ュ彧璇绘柟寮忔墦寮�鏂囦欢锛�1鏄鍐欐柟寮忔墦寮� - DataSource dSource = driver.Open(filePath, 0); - - Layer layer = dSource.GetLayerByIndex(0); - FieldDefn fieldDefn = new FieldDefn("name", ogr.OFTString); - fieldDefn.SetWidth(50); - layer.CreateField(fieldDefn, 1); - layer.DeleteField(layer.FindFieldIndex("name", 1)); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - /** * 璇诲彇shp鏂囦欢 + * * @param filePath */ public static void readShp(String filePath) { @@ -257,6 +312,7 @@ /** * 璇诲彇gdb鏂囦欢 + * * @param filePath */ public static void readGdb(String filePath) { diff --git a/src/main/java/com/lf/server/helper/WebHelper.java b/src/main/java/com/lf/server/helper/WebHelper.java index 3ab27d1..4014998 100644 --- a/src/main/java/com/lf/server/helper/WebHelper.java +++ b/src/main/java/com/lf/server/helper/WebHelper.java @@ -1,5 +1,8 @@ package com.lf.server.helper; +import com.alibaba.fastjson.JSON; +import com.lf.server.entity.all.HttpStatus; +import com.lf.server.entity.all.ResponseMsg; import com.lf.server.entity.all.SettingData; import com.lf.server.entity.all.StaticData; import org.springframework.web.context.request.RequestContextHolder; @@ -14,6 +17,7 @@ import java.io.PrintWriter; import java.sql.Timestamp; import java.util.Calendar; +import java.util.Random; import java.util.UUID; /** @@ -261,4 +265,18 @@ return false; } + + /** + * 鑾峰彇閿欒JSON + */ + public static String getErrJson(HttpStatus status, String msg) { + return JSON.toJSONString(new ResponseMsg<String>(status, msg)); + } + + /** + * 鑾峰彇闅忔満鏁存暟 + */ + public static int getRandomInt(int min, int max) { + return new Random().nextInt(max) % (max - min + 1) + min; + } } diff --git a/src/main/java/com/lf/server/service/show/MarkService.java b/src/main/java/com/lf/server/service/show/MarkService.java index 59e2e77..d54f484 100644 --- a/src/main/java/com/lf/server/service/show/MarkService.java +++ b/src/main/java/com/lf/server/service/show/MarkService.java @@ -1,12 +1,26 @@ package com.lf.server.service.show; +import com.lf.server.entity.ctrl.MarkJsonEntity; import com.lf.server.entity.show.MarkEntity; +import com.lf.server.entity.sys.UserEntity; +import com.lf.server.helper.GdalHelper; +import com.lf.server.helper.PathHelper; import com.lf.server.helper.StringHelper; +import com.lf.server.helper.WebHelper; import com.lf.server.mapper.show.MarkMapper; +import com.lf.server.service.data.UploaderService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestBody; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.util.ArrayList; import java.util.List; +import java.util.Random; /** * 鏍囩粯 @@ -16,6 +30,9 @@ public class MarkService implements MarkMapper { @Autowired MarkMapper markMapper; + + @Autowired + PathHelper pathHelper; @Override public Integer selectCount(Integer uid) { @@ -66,4 +83,48 @@ public Integer updates(List<MarkEntity> list) { return markMapper.updates(list); } + + public void downloadShp(UserEntity ue, List<MarkJsonEntity> list, HttpServletRequest req, HttpServletResponse res) { + String path = getShpDir(ue); + + List<MarkJsonEntity> points = getMarkByType(list, "POINT"); + if (points.size() > 0) { + String pointFile = GdalHelper.createShp(points, path, "POINT"); + } + List<MarkJsonEntity> lines = getMarkByType(list, "LINESTRING"); + if (lines.size() > 0) { + String lineFile = GdalHelper.createShp(lines, path, "LINESTRING"); + } + List<MarkJsonEntity> polygons = getMarkByType(list, "POLYGON"); + if (polygons.size() > 0) { + String polygonFile = GdalHelper.createShp(polygons, path, "POLYGON"); + } + + // + } + + private String getShpDir(UserEntity ue) { + String path = pathHelper.getTempPath(ue.getId()) + File.separator + WebHelper.getRandomInt(100000, 1000000); + + File file = new File(path); + if (!file.exists() && !file.isDirectory()) { + file.mkdirs(); + } + + return path; + } + + private List<MarkJsonEntity> getMarkByType(List<MarkJsonEntity> list, String type) { + List<MarkJsonEntity> rs = new ArrayList<MarkJsonEntity>(); + for (MarkJsonEntity mark : list) { + if (StringHelper.isEmpty(mark.getWkt())) { + continue; + } + if (mark.getWkt().indexOf(type) > -1) { + rs.add(mark); + } + } + + return rs; + } } -- Gitblit v1.9.3