13693261870
2024-09-13 34296b1e1960e49ab8b3a34f9bb49b59e2e22c9e
查询空间数据
已修改3个文件
97 ■■■■ 文件已修改
src/main/java/com/se/simu/domain/SeLayer.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/service/SedbService.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/se/simu/domain/SeLayer.java
@@ -19,19 +19,45 @@
    private List<SeField> fields;
    private JSONArray data;
    private String queryType;
    public SeLayer() {
        this.data = new JSONArray();
    }
    public SeLayer(String id, String name) {
        this();
        this.id = id;
        this.name = name;
        this.data = new JSONArray();
    }
    public SeLayer(String id, String name, Integer dataType, List<SeField> fields) {
        this();
        this.id = id;
        this.name = name;
        this.dataType = dataType;
        this.fields = fields;
        this.queryType = getQueryType(dataType);
    }
    public String getQueryType(Integer dataType) {
        switch (dataType) {
            case 2:
            case 4:
                return "point";
            case 1:
            case 3:
                return "polyline";
            default:
                return "polygon";
        }
    }
    public void addData(JSONArray arr){
        this.data.addAll(arr);
    }
    public String getId() {
@@ -65,4 +91,20 @@
    public void setFields(List<SeField> fields) {
        this.fields = fields;
    }
    public JSONArray getData() {
        return data;
    }
    public void setData(JSONArray data) {
        this.data = data;
    }
    public String getQueryType() {
        return queryType;
    }
    public void setQueryType(String queryType) {
        this.queryType = queryType;
    }
}
src/main/java/com/se/simu/service/SedbService.java
@@ -7,7 +7,6 @@
import com.se.simu.domain.SeField;
import com.se.simu.domain.SeLayer;
import com.se.simu.helper.RsaHelper;
import com.se.simu.helper.StringHelper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -41,6 +40,9 @@
    @Value("${sedb.dbName}")
    String dbName;
    @Value("${sedb.pageSize}")
    Integer pageSize;
    @Value("#{'${sedb.layerNames}'}")
    List<String> layerNames;
@@ -48,6 +50,7 @@
    List<String> sysFields;
    String password;
    @Resource
    RestTemplate restTemplate;
@@ -61,6 +64,7 @@
        db.setBbox(bbox);
        List<SeLayer> layers = getLayers(token, db.getDbid());
        queryData(token, db, layers);
        return db.getDbid();
    }
@@ -132,30 +136,50 @@
        return layers;
    }
    public JSONArray query(String token, String dbid, String layerId, String bbox) {
        int start = 1, count = 1000, total = 0;
    public void queryData(String token, SeDb db, List<SeLayer> layers) throws Exception {
        for (SeLayer layer : layers) {
            int count = getCount(token, db, layer);
            if (0 == count) throw new Exception(layer.getName() + ",图层数据为空");
            int pageCount = (count - 1) / pageSize + 1;
            for (int i = 0; i < pageCount; i++) {
                JSONArray data = query(token, db, layer, i + 1, pageSize);
                if (null != data && data.size() > 0) {
                    layer.addData(data);
                }
            }
        }
    }
    public int getCount(String token, SeDb db, SeLayer layer) {
        Map<String, Object> map = new HashMap<>(4);
        map.put("token", token);
        map.put("dbid", db.getDbid());
        map.put("bbox", db.getBbox());
        map.put("layerid", layer.getId());
        JSONObject obj = restTemplate.postForObject(host + "geo-service/entitydbdata/layer/query", map, JSONObject.class);
        if (null == obj || 200 != obj.getInt("code")) return 0;
        return obj.getInt("data");
    }
    public JSONArray query(String token, SeDb db, SeLayer layer, int start, int count) {
        Map<String, Object> map = new HashMap<>(8);
        map.put("token", token);
        map.put("start", start);
        map.put("count", count);
        map.put("dbid", dbid);
        map.put("layerid", layerId);
        map.put("containCount", true);
        map.put("bbox", bbox);
        map.put("querytype", "entity");
        map.put("dbid", db.getDbid());
        map.put("bbox", db.getBbox());
        map.put("containCount", false);
        map.put("layerid", layer.getId());
        map.put("querytype", layer.getQueryType());
        JSONObject obj = restTemplate.postForObject(host + "geo-service/entitydbdata/layer/query", map, JSONObject.class);
        if (null == obj || 200 != obj.getInt("code")) return null;
        JSONObject data = obj.getJSONObject("data");
        total = data.getInt("data");
        if (0 == total) return null;
        JSONArray arr = new JSONArray();
        JSONArray items = data.getJSONArray("items");
        arr.addAll(items);
        return arr;
        return data.getJSONArray("items");
    }
}
src/main/resources/application.yml
@@ -46,5 +46,6 @@
  user: WUWEIWEI
  pwd: WUWEIWEI
  dbName: 通州水利仿真4548
  pageSize: 2000
  layerNames: 管点,管线,建筑物
  sysFields: _ext_attr,_meta_id,_attach_files,_x,_y,_z,operatetime,operator,_is_latest,_data_type,groupid,id,shape_length,shape_area