suerprisePlus
2024-09-27 53ae0215de46b9bb68d9aa5d5a3e83dde7cb3986
src/main/java/com/yb/service/XzService.java
@@ -7,15 +7,25 @@
import com.yb.helper.RsaHelper;
import com.yb.util.EntityHttpUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.locationtech.jts.geom.*;
import org.locationtech.jts.operation.buffer.BufferOp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.geotools.geometry.jts.JTS;
import org.geotools.referencing.CRS;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.Point;
//import org.opengis.referencing.FactoryException;
//import org.opengis.referencing.crs.CoordinateReferenceSystem;
//import org.opengis.referencing.operation.MathTransform;
import org.locationtech.proj4j.CRSFactory;
import org.locationtech.proj4j.CoordinateReferenceSystem;
import org.locationtech.proj4j.CoordinateTransform;
import org.locationtech.proj4j.CoordinateTransformFactory;
import org.locationtech.proj4j.ProjCoordinate;
import java.util.*;
import java.util.HashMap;
@Service
@@ -24,25 +34,112 @@
    private XzConfig xzConfig;
    @Autowired
    private EntityHttpUtil entityHttpUtil;
    @Autowired
    private AgentService agentService;
    int num = 40;
    // 关键字查询
    public String getQueryFiled(String place, String filed, String layerId, String dbId, String queryEntity) throws Exception {
        String query = filed + " like '%" + place + "%'" + "";
        String querySQL = "";
        String valSql = " like '%" + place + "%'";
        String key = getPublickey();
        String encrypt = RsaHelper.encrypt(key, query);
        HashMap formData = getHashMap(layerId, dbId, "1", "0", encrypt, null);
        String query = getQuerySql(valSql, filed);
//        int num = 40;
        if (query.length() > num) {
            String[] sbuString = getSqlSubStr(query, num);
            for (int w = 0; w < sbuString.length; w++) {
                if (w > 0) {
                    querySQL += ",";
                }
                querySQL += RsaHelper.encrypt(key, sbuString[w]);
            }
        } else {
            querySQL += RsaHelper.encrypt(key, query);
        }
        System.out.println("rec getQueryFiled:" + querySQL);
        HashMap formData = getHashMap(layerId, dbId, "1", "0", querySQL, null);
        String jsonString = entityHttpUtil.getPostMessage(queryEntity, formData);
        System.out.println("rec getQueryFiled:" + jsonString);
        JSONObject jsonObject = JSON.parseObject(jsonString);
        JSONObject dataObjject = jsonObject.getJSONObject("data");
        JSONArray dataArray = dataObjject.getJSONArray("items");
        if (dataArray.size() > 0) {
            return dataArray.getJSONObject(0).toString();
        }
        return "";
    }
    public String[] getSqlSubStr(String str, int chunkSize) {
        int numChunks = (str.length() + chunkSize - 1) / chunkSize;
        String[] chunks = new String[numChunks];
        for (int i = 0; i < numChunks; i++) {
            int start = i * chunkSize;
            int end = Math.min(start + chunkSize, str.length());
            chunks[i] = str.substring(start, end);
        }
        return chunks;
    }
    public String getQuerySql(String valSql, String filed) {
        String query = "";
        if (filed.indexOf(",") > -1) {
            String[] fileds = filed.split(",");
            for (int i = 0; i < fileds.length; i++) {
                String name = fileds[i];
                if (i > 0) {
                    query += " or ";
                }
                query += name + valSql;
            }
            query += "";
        } else {
            query = filed + valSql + "";
        }
        return query;
    }
    // 关键字查询
    public String getQueryEntity(String place, String filed, String layerId, String dbId, String queryEntity) throws Exception {
        String valSql = " like '%" + place + "%'";
        String key = getPublickey();
        String query = getQuerySql(valSql, filed);
        String querySQL = "";
//        int num = 40;
        if (query.length() > num) {
            String[] sbuString = getSqlSubStr(query, num);
            for (int w = 0; w < sbuString.length; w++) {
                if (w > 0) {
                    querySQL += ",";
                }
                querySQL += RsaHelper.encrypt(key, sbuString[w]);
            }
        } else {
            querySQL += RsaHelper.encrypt(key, query);
        }
        HashMap formData = getHashMap(layerId, dbId, "1", "100", querySQL, null);
        formData.put("querytype", "entity");
        String jsonString1 = entityHttpUtil.getPostMessage(queryEntity, formData);
        System.out.println("rec getQueryFiled:" + jsonString1);
        JSONObject jsonObject = JSON.parseObject(jsonString1);
        JSONObject dataObjject = jsonObject.getJSONObject("data");
        JSONArray dataArray = dataObjject.getJSONArray("items");
        if (dataArray.size() <= 0) {
            return null;
        }
        return dataArray.getJSONObject(0).toString();
    }
    //  范围查询
    public String getQueryAround(String type, String wkt, String filed, String layerId, String dbid, String entity) throws Exception {
        String query = filed + " like '%" + type + "%'" + "";
        if (type.contains("全部目标")) {
            query = filed + " like '%目标%'" + "";
        }
        String encrypt = RsaHelper.encrypt(getPublickey(), query);
        HashMap formData = getHashMap(layerId, dbid, "1", "0", encrypt, wkt);
        formData.put("querytype", "entity");
        String jsonString = entityHttpUtil.getPostMessage(entity, formData);
        JSONObject jsonObject = JSON.parseObject(jsonString);
        JSONObject dataObj = jsonObject.getJSONObject("data");
@@ -59,10 +156,10 @@
        staticField.put("field", filed);
        staticField.put("outfield", "count_" + filed);
        jsonArray.add(staticField);
        HashMap<String, String> formData = getHashMap(layerId,dbid,null,null,null,null);
        HashMap<String, String> formData = getHashMap(layerId, dbid, null, null, null, null);
        formData.put("statistics", jsonArray.toString());
        formData.put("groupby", filed);
       return  entityHttpUtil.getPostMessage(entity, formData);
        return entityHttpUtil.getPostMessage(entity, formData);
    }
    // 获取返回信息Map
@@ -99,14 +196,15 @@
            hashMap.put("where", where);
        }
        if (box != null && box != "") {
            hashMap.put("box", box);
            hashMap.put("bbox", box);
        }
        return hashMap;
    }
    //生成WKT
    public String getWKt(double lon, double lat, int radius) {
    public String getWKt(double lon, double lat, int radius) throws Exception {
        // 创建一个坐标点
        Coordinate coord = new Coordinate(lon, lat);
        // 创建GeometryFactory实例,并指定坐标参考系统为WGS84
@@ -129,14 +227,49 @@
        // 输出WKT
//        System.out.println("WKT: " + wkt);
        Envelope envelope = bufferedGeometry.getEnvelopeInternal();
        double[] wkt = new double[4];
        wkt[0] = envelope.getMinX();
        wkt[1] = envelope.getMinY();
        wkt[2] = envelope.getMaxX();
        wkt[3] = envelope.getMaxY();
        String arrayAsString = Arrays.toString(wkt);
        System.out.println("arrayAsString: " + arrayAsString);
        return arrayAsString;
//        double[] wkt = new double[4];
//        wkt[0] = ;
//        wkt[1] =;
//        wkt[2] = envelope.getMaxX();
//        wkt[3] = envelope.getMaxY();
//
//        wkt += envelope.getMinX();
//        wkt += ","+envelope.getMinY();
//        wkt += ","+envelope.getMaxX();
//        wkt += ","+envelope.getMaxY();
//                System.out.println("WKT: " + wkt);
//        String arrayAsString = Arrays.toString(wkt);
//        System.out.println("wkt: " + wkt);
        CoordinateTransformFactory ctFactory = new CoordinateTransformFactory();
        // 定义源坐标系(WGS 84)
        String srcCRS = "EPSG:4326";
        // 定义目标坐标系(中国大地坐标系)
        String destCRS = "EPSG:4550";
        // 创建坐标参考系统
        CRSFactory crsFactory = new CRSFactory();
        CoordinateReferenceSystem src = crsFactory.createFromName(srcCRS);
        CoordinateReferenceSystem dest = crsFactory.createFromName(destCRS);
        // 创建坐标转换器
        CoordinateTransform transform = ctFactory.createTransform(src, dest);
        // 定义一个源坐标点(经度,纬度)
        ProjCoordinate srcgetMin = new ProjCoordinate(envelope.getMinX(), envelope.getMinY(), 0); // 例如:北京的经纬度
        ProjCoordinate srcgetMax = new ProjCoordinate(envelope.getMaxX(), envelope.getMaxY(), 0); // 例如:北京的经纬度
        // 执行转换
        ProjCoordinate destgetMin = new ProjCoordinate();
        ProjCoordinate destgetMax = new ProjCoordinate();
        System.out.println("转换后的坐标:X = " + srcgetMin);
        transform.transform(srcgetMin, destgetMin);
        transform.transform(srcgetMax, destgetMax);
        String wkt = destgetMin.x + "," + destgetMin.y + "," + destgetMax.x + "," + destgetMax.y;
        System.out.println("转换后的坐标:X = " + wkt);
        return wkt;
    }