Browse Source

查询getFeature数据

zhouyuexiang 1 year ago
parent
commit
baca7ba4d2

+ 1 - 0
tile-service/src/main/java/cn/com/taiji/tile/service/ITileService.java

@@ -15,4 +15,5 @@ public interface ITileService {
     byte[] tileData(GeoRequestParam requestParam, List<LayerGroupDsView> layerGroupDsViewList, Map<String,List<LayerStyleView>> dataMaps);
     FeatureInfo getFeatureInfo(GeoRequestParam geoRequestParam, List<LayerGroupDsView> layerGroupDsViewList, Map<String, List<LayerStyleView>> dataMaps);
 
+    List<Map<String, Object>> getFeature(GeoRequestParam geoRequestParam, List<LayerGroupDsView> layerGroupDsViewList, Map<String, List<LayerStyleView>> dataMaps);
 }

+ 15 - 0
tile-service/src/main/java/cn/com/taiji/tile/service/impl/TileServiceImpl.java

@@ -256,6 +256,21 @@ public class TileServiceImpl implements ITileService {
         return featureInfo;
     }
 
+    @Override
+    public List<Map<String, Object>> getFeature(GeoRequestParam requestParam, List<LayerGroupDsView> layerGroupDsViewList, Map<String, List<LayerStyleView>> dataMaps) {
+        List<Map<String, Object>> list = new CopyOnWriteArrayList<>();
+        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();
+                list.addAll(cqlDataList);
+            } else {
+//                log.info("根据查询过滤规则条件:" + filterCqlStr.toString() + "和图层代码:" + requestParam.getLayers() + " 没有找到图层对应的数据源的空间地理数据");
+            }
+        });
+        return list;
+    }
+
     public static double[] parseBbox(String bboxString) {
         String[] bboxValuesStr = bboxString.split(",");
         if (bboxValuesStr.length != 4) {

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

@@ -8,7 +8,9 @@ import org.apache.commons.lang3.StringUtils;
 import org.locationtech.jts.geom.Coordinate;
 import org.locationtech.jts.geom.Geometry;
 import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKBReader;
 import org.locationtech.jts.io.WKTReader;
+import org.locationtech.jts.io.WKTWriter;
 import org.springframework.beans.BeanUtils;
 
 import javax.imageio.ImageIO;
@@ -309,6 +311,7 @@ public class ShapeUtils {
 
     private static void drawShape(ShapeStyle shapeStyle, Map<String, Object> poi, double[] bbox, Graphics2D graphics, String shapeKey) {
 //        Geometry shape = GeoUtils.getGeoUtils().createGeometry(poi.get(shapeKey));
+
         Geometry shape;
         try {
             shape = WKT_READER.read(poi.get(shapeKey).toString());
@@ -320,6 +323,16 @@ public class ShapeUtils {
         }
     }
 
+    public static Geometry convertWKBtoGeometry(byte[] wkbBytes) {
+        WKBReader reader = new WKBReader();
+        try {
+            return reader.read(wkbBytes);
+        } catch (ParseException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
     public static BufferedImage drawImage(String bboxStr, List<Map<String, Object>> dataList, String shapeKey, List<LayerStyleView> layerStyleViews) {
         BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB);
         renderShape(image, bboxStr, dataList, getShapeStyle(layerStyleViews), shapeKey);

+ 12 - 2
tile-web/src/main/java/cn/com/taiji/web/controller/TileWebController.java

@@ -90,8 +90,8 @@ public class TileWebController {
                     if(StringUtils.equals(geoRequestParam.getRequest(),"GetMap")) {
                         byte[] ret = tileService.tileData(geoRequestParam, layerGroupDsViewList, dataMaps);
                         responseWrite(response, "image/png", ret);
-                    }else if(StringUtils.equals(geoRequestParam.getRequest(),"GetFeatureInfo")){
-                        FeatureInfo featureInfo= tileService.getFeatureInfo(geoRequestParam, layerGroupDsViewList, dataMaps);
+                    }else if(StringUtils.equals(geoRequestParam.getRequest(),"GetFeatureInfo")) {
+                        FeatureInfo featureInfo = tileService.getFeatureInfo(geoRequestParam, layerGroupDsViewList, dataMaps);
                         // 转换List为JSON
                         ObjectMapper mapper = new ObjectMapper();
                         String json = mapper.writeValueAsString(featureInfo);
@@ -100,6 +100,16 @@ public class TileWebController {
                         response.setCharacterEncoding("UTF-8");
                         // 将JSON写入响应
                         response.getWriter().write(json);
+                    } else if(StringUtils.equals(geoRequestParam.getRequest(),"GetFeature")){
+                        List<Map<String, Object>> feature = tileService.getFeature(geoRequestParam, layerGroupDsViewList, dataMaps);
+                        // 转换List为JSON
+                        ObjectMapper mapper = new ObjectMapper();
+                        String json = mapper.writeValueAsString(feature);
+                        // 设置响应类型和编码
+                        response.setContentType("application/json");
+                        response.setCharacterEncoding("UTF-8");
+                        // 将JSON写入响应
+                        response.getWriter().write(json);
                     }
                 }else{