zhouyuexiang 1 year ago
parent
commit
1a4a9ca624

+ 14 - 0
tile-service/src/main/java/cn/com/taiji/tile/model/FeatureDetailInfo.java

@@ -0,0 +1,14 @@
+package cn.com.taiji.tile.model;
+
+import lombok.Data;
+
+import java.util.Map;
+
+/**
+ * @author zzyx 2024/2/7
+ */
+@Data
+public class FeatureDetailInfo {
+    private GeometryInfo geometry;
+    private Map<String,Object> properties;
+}

+ 1 - 2
tile-service/src/main/java/cn/com/taiji/tile/model/FeatureInfo.java

@@ -15,8 +15,7 @@ import java.util.Map;
 @ApiModel("点击要素信息")
 public class FeatureInfo {
     private String totalFeatures;
-    @ApiModelProperty("要素信息集合")
-    private List<Map<String,Object>> features;
+    private List<FeatureDetailInfo> features;
     @ApiModelProperty("时间戳")
     private String timeStamp;
     @ApiModelProperty("总数")

+ 17 - 0
tile-service/src/main/java/cn/com/taiji/tile/model/GeometryInfo.java

@@ -0,0 +1,17 @@
+package cn.com.taiji.tile.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.locationtech.jts.geom.Coordinate;
+
+/**
+ * @author zzyx 2024/2/7
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class GeometryInfo {
+    private Double[] coordinates;
+    private String point;
+}

+ 37 - 9
tile-service/src/main/java/cn/com/taiji/tile/service/impl/TileServiceImpl.java

@@ -4,7 +4,9 @@ import cn.com.taiji.common.domain.PageResult;
 import cn.com.taiji.common.model.*;
 import cn.com.taiji.cql.service.IECqlService;
 import cn.com.taiji.cql.service.ISqlService;
+import cn.com.taiji.tile.model.FeatureDetailInfo;
 import cn.com.taiji.tile.model.FeatureInfo;
+import cn.com.taiji.tile.model.GeometryInfo;
 import cn.com.taiji.tile.model.POI;
 import cn.com.taiji.tile.service.ITileService;
 import cn.com.taiji.tile.util.ShapeUtils;
@@ -17,6 +19,9 @@ import org.geotools.data.jdbc.datasource.DBCPDataSourceFactory;
 import org.geotools.data.mysql.MySQLFilterToSQL;
 import org.geotools.filter.text.ecql.ECQL;
 import org.geotools.jdbc.JDBCDataStoreFactory;
+import org.locationtech.jts.geom.Geometry;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKTReader;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -202,7 +207,7 @@ public class TileServiceImpl implements ITileService {
 
                         }
 
-                        layerDataRun = layerDataRun + " and " +actual;
+                        layerDataRun = layerDataRun + " where  " +actual;
 
                     }catch (Exception exception){
                         exception.printStackTrace();
@@ -244,18 +249,30 @@ public class TileServiceImpl implements ITileService {
     @Override
     public FeatureInfo getFeatureInfo(GeoRequestParam requestParam, List<LayerGroupDsView> layerGroupDsViewList, Map<String, List<LayerStyleView>> dataMaps) {
         FeatureInfo featureInfo = new FeatureInfo();
-        List<Map<String, Object>> features = new CopyOnWriteArrayList<>();
+        List<FeatureDetailInfo> list = new CopyOnWriteArrayList<>();
+        WKTReader wktReader = ShapeUtils.WKT_READER;
         layerGroupDsViewList.parallelStream().forEach(layerGroupDsView -> {
             Result result = getResult(requestParam, dataMaps, layerGroupDsView);
             if (result.pageResult != null && result.pageResult.getRecordCount() > 0) {
                 List<Map<String, Object>> cqlDataList = (List<Map<String, Object>>) result.pageResult.getDatas();
                 //3根据空间地理数据生成图层二进制数据
                 List<Map<String, Object>> maps = ShapeUtils.detectClick(requestParam.getGeoType(),requestParam.getBbox(), cqlDataList, layerGroupDsView.getBoxColumn(), result.layerStyleViewList, requestParam.getX(), requestParam.getY());
-                features.addAll(maps);
+//                features.addAll(maps);
+                maps.parallelStream().forEach(item->{
+                    FeatureDetailInfo featureDetailInfo = new FeatureDetailInfo();
+                    try {
+                        Geometry read = wktReader.read(item.get(layerGroupDsView.getBoxColumn()).toString());
+                        featureDetailInfo.setGeometry(new GeometryInfo(new Double[]{read.getCoordinate().x,read.getCoordinate().y},read.getGeometryType()));
+                    } catch (ParseException e) {
+                        throw new RuntimeException(e);
+                    }
+                    featureDetailInfo.setProperties(item);
+                    list.add(featureDetailInfo);
+                });
             }
         });
-        featureInfo.setFeatures(features);
-        featureInfo.setNumberReturned(features.size());
+        featureInfo.setFeatures(list);
+        featureInfo.setNumberReturned(list.size());
         featureInfo.setTimeStamp(DateUtil.format(new Date(),DateTimeFormatter.ISO_INSTANT));
         return featureInfo;
     }
@@ -263,16 +280,27 @@ public class TileServiceImpl implements ITileService {
     @Override
     public FeatureInfo getFeature(GeoRequestParam requestParam, List<LayerGroupDsView> layerGroupDsViewList, Map<String, List<LayerStyleView>> dataMaps) {
         FeatureInfo featureInfo = new FeatureInfo();
-        List<Map<String, Object>> features = new CopyOnWriteArrayList<>();
+        List<FeatureDetailInfo> list = new CopyOnWriteArrayList<>();
+        WKTReader wktReader = ShapeUtils.WKT_READER;
         layerGroupDsViewList.parallelStream().forEach(layerGroupDsView -> {
             Result result = getResult(requestParam, dataMaps, layerGroupDsView);
             if (result.pageResult != null && result.pageResult.getRecordCount() > 0) {
                 List<Map<String, Object>> cqlDataList = (List<Map<String, Object>>) result.pageResult.getDatas();
-                features.addAll(cqlDataList);
+                cqlDataList.parallelStream().forEach(item->{
+                    FeatureDetailInfo featureDetailInfo = new FeatureDetailInfo();
+                    try {
+                        Geometry read = wktReader.read(item.get(layerGroupDsView.getBoxColumn()).toString());
+                        featureDetailInfo.setGeometry(new GeometryInfo(new Double[]{read.getCoordinate().x,read.getCoordinate().y},read.getGeometryType()));
+                    } catch (ParseException e) {
+                        throw new RuntimeException(e);
+                    }
+                    featureDetailInfo.setProperties(item);
+                    list.add(featureDetailInfo);
+                });
             }
         });
-        featureInfo.setFeatures(features);
-        featureInfo.setNumberReturned(features.size());
+        featureInfo.setNumberReturned(list.size());
+        featureInfo.setFeatures(list);
         featureInfo.setTimeStamp(DateUtil.format(new Date(),DateTimeFormatter.ISO_INSTANT));
         return featureInfo;
     }

+ 2 - 2
tile-service/src/main/java/cn/com/taiji/tile/util/ShapeUtils.java

@@ -360,8 +360,8 @@ public class ShapeUtils {
             if (shapeStyle.getPointMarkerImage() != null) {
                 if(StringUtils.equals(geoType,"1")){
                     //如果类型为2图标要变大
-                    shapeStyle.setPointMarkerImageWidth(shapeStyle.getPointMarkerImageWidth()+4);
-                    shapeStyle.setPointMarkerImageHeight(shapeStyle.getPointMarkerImageHeight()+4);
+                    shapeStyle.setPointMarkerImageWidth(shapeStyle.getPointMarkerImageWidth()+10);
+                    shapeStyle.setPointMarkerImageHeight(shapeStyle.getPointMarkerImageHeight()+10);
                 }
                 shapeStyle.setPointMarkerImage(TileUtils.scaleWidthHeight(shapeStyle.getPointMarkerImage(), shapeStyle.getPointMarkerImageWidth(), shapeStyle.getPointMarkerImageHeight()));
             }

+ 3 - 9
tile-web/src/main/java/cn/com/taiji/web/controller/TileWebController.java

@@ -49,23 +49,17 @@ public class TileWebController {
     public void queryTile(HttpServletRequest request, HttpServletResponse response) {
         GeoRequestParam geoRequestParam = JSONObject.parseObject(JSONObject.toJSONString(getParameterMap(request)), GeoRequestParam.class);
         List<String> layerGroupList = new ArrayList<String>();
-        if (StringUtils.isBlank(geoRequestParam.getLayers())) {
-            throw new RuntimeException("请选择图层");
-        }
+//        if (StringUtils.isBlank(geoRequestParam.getLayers())) {
+//            throw new RuntimeException("请选择图层");
+//        }
         try {
             List<LayerGroupDsView> layerGroupDsViewList = geoDataSourceService.layerCodeGeoDataSource(geoRequestParam.getLayers(),geoRequestParam.getTypename());
-
             if (layerGroupDsViewList != null && layerGroupDsViewList.size() > 0) {
-
                 List<String> layerCodeList = new ArrayList<String>();
-
                 for (LayerGroupDsView layerGroupDsView : layerGroupDsViewList) {
-
                     layerCodeList.add(layerGroupDsView.getLayerCode());
                 }
-
                 Map<String, List<LayerStyleView>> dataMaps = geoDataSourceService.layerCodeShapeStyle(layerCodeList);
-
                 if (StringUtils.equals(geoRequestParam.getRequest(), "GetMap")) {
                     byte[] ret = tileService.tileData(geoRequestParam, layerGroupDsViewList, dataMaps);
                     responseWrite(response, "image/png", ret);

+ 8 - 4
tile-web/src/main/java/cn/com/taiji/web/service/impl/GeoDataSourceServiceImpl.java

@@ -53,12 +53,16 @@ public class GeoDataSourceServiceImpl implements IGeoDataSourceService {
         dsParams.put(JDBCDataStoreFactory.PORT.key, geoConfig.getDsPort());
         dsParams.put("tableName", "layer_group_ds_view");
         StringBuilder sql = new StringBuilder("(");
-        String layerCondition = String.format("(group_code = ('%s') or layer_code = ('%s'))", layer, layer);
-        sql.append(layerCondition);
-
+        if(org.apache.commons.lang3.StringUtils.isNotBlank(layer)){
+            String layerCondition = String.format("(group_code = ('%s') or layer_code = ('%s'))", layer, layer);
+            sql.append(layerCondition);
+        }
         if (org.apache.commons.lang3.StringUtils.isNotBlank(typeName)) {
             String[] types = typeName.split(",");
-            String typesCondition = "and layer_code IN (" + StringUtils.convertListToString(Arrays.asList(types)) + ")";
+            if(org.apache.commons.lang3.StringUtils.isNotBlank(layer)){
+                sql.append("and");
+            }
+            String typesCondition = " layer_code IN (" + StringUtils.convertListToString(Arrays.asList(types)) + ")";
             sql.append(typesCondition);
         }
         sql.append(")");