From ccc0c29ff83aafea87a6d3f3bca3ef9e0aa8268a Mon Sep 17 00:00:00 2001 From: suerprisePlus <15810472099@163.com> Date: 星期三, 28 八月 2024 15:55:30 +0800 Subject: [PATCH] API名称:[元数据查询]接口添加 --- src/main/java/com/yb/controller/XzController.java | 259 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 231 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/yb/controller/XzController.java b/src/main/java/com/yb/controller/XzController.java index 1dea396..2730ab9 100644 --- a/src/main/java/com/yb/controller/XzController.java +++ b/src/main/java/com/yb/controller/XzController.java @@ -1,63 +1,268 @@ package com.yb.controller; import com.alibaba.fastjson.JSON; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + import com.yb.config.R; import com.yb.entity.ReqEntity; +import com.yb.helper.RsaHelper; +import com.yb.util.EntityHttpUtil; + import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import org.locationtech.jts.geom.*; +import org.locationtech.jts.io.WKTWriter; +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.stringtemplate.v4.ST; + import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; -@Tag(name="鏂版櫤鎺ュ彛") + +@Tag(name = "鏂版櫤鎺ュ彛") @RestController @RequestMapping("/api/v1") public class XzController { @Autowired WebSocketController webSocketController; + @Autowired + private EntityHttpUtil entityHttpUtil; + @Value("${spring.geographical.canview}") + String canview; + @Value("${spring.geographical.entityName}") + String entityName; + @Value("${spring.geographical.dbid}") + String dbid; + @Value("${spring.geographical.layerId}") + String layerId; + @Value("${spring.geographical.queryEntity}") + String queryEntity; + @Value("${spring.geographical.publickey}") + String publickey; + @Value("${spring.geographical.token}") + String token; + @PostMapping("/poiMap") @Operation(summary = "鏄剧ず鍦扮偣") - public R poiMap(@Parameter String place,@Parameter String mid){ - System.out.println("rec message:"+place+" mid:"+mid); - HashMap<String,Object> hash = new HashMap<>(); - hash.put("func","poiMap"); - hash.put("mid","mid"); + public R poiMap(@Parameter String place, @Parameter String mid) throws Exception { + System.out.println("rec message:" + place + " mid:" + mid); + HashMap<String, Object> hash = new HashMap<>(); + hash.put("func", "poiMap"); + hash.put("mid", mid); ReqEntity reqEntity = new ReqEntity(); - reqEntity.setPlace(place); - reqEntity.setX("120.9671"); - reqEntity.setY("13.5748"); - hash.put("poi",reqEntity); - + String item = getQueryFiled(place); + JSONObject obj = JSONObject.parseObject(item); + reqEntity.setX(obj.getString("lon")); + reqEntity.setY(obj.getString("lat")); + reqEntity.setPlace(obj.getString("enti_name")); + System.out.println("rec message:" + reqEntity); + hash.put("poi", reqEntity); String message = JSON.toJSONString(hash); webSocketController.sendAllMessage(message); - return R.ok(hash); } @PostMapping("/aroundPoi") + @Operation(summary = "鍛ㄨ竟灞炴�ф煡璇�") + public R aroundPoi(@Parameter String place, @Parameter String mid, @Parameter String type, @Parameter int radius) throws Exception { + System.out.println("rec message:" + place + " mid:" + mid + " type:" + type + " radius:" + radius); + HashMap<String, Object> hash = new HashMap<>(); + hash.put("func", "aroundPoi"); + hash.put("mid", mid); + String item = getQueryFiled(place); + JSONObject obj = JSONObject.parseObject(item); + Double lon = Double.parseDouble(obj.getString("lon")); + Double lat = Double.parseDouble(obj.getString("lat")); + String wkt = getWKt(lon, lat, radius); + String itemList = getQueryAround(type, wkt); +// System.out.print("ces: "+itemList); + JSONArray dataArray = JSONArray.parseArray(itemList); + ArrayList<ReqEntity> arrayList = new ArrayList<>(); + for (int i = 0; i < dataArray.size(); i++) { + Object element = dataArray.get(i); + if (element instanceof JSONObject) { + JSONObject jsonObject = (JSONObject) element; + ReqEntity reqEntity = new ReqEntity(); + reqEntity.setX(jsonObject.getString("lon")); + reqEntity.setY(jsonObject.getString("lat")); + reqEntity.setPlace(jsonObject.getString("enti_name")); + arrayList.add(reqEntity); + } + } + System.out.println("rec message:" + arrayList); + hash.put("poi", arrayList); + String message = JSON.toJSONString(hash); + webSocketController.sendAllMessage(message); + return R.ok(hash); + } + + @PostMapping("/queryMeta") + @Operation(summary = "鍏冧俊鎭煡璇�") + public R queryMeta(@Parameter String mid) { + System.out.println("queryMeta"); + HashMap<String, Object> hash = new HashMap<>(); + hash.put("func", "queryMeta"); + hash.put("mid", mid); +// 缁熻鏌ヨ鎺ュ彛鎷兼帴 + JSONArray jsonArray = new JSONArray(); + HashMap<String, Object> staticField = new HashMap<>(); + String filed = "sjnr"; + staticField.put("type", "count"); + staticField.put("field", "sjnr"); + staticField.put("outfield", "count_" + filed); + jsonArray.add(staticField); + HashMap<String, String> formData = new HashMap<>(); + formData.put("token", token); + formData.put("containCount", "true"); + formData.put("layerid", layerId); + formData.put("dbid", dbid); + formData.put("statistics", jsonArray.toString()); + formData.put("groupby", filed); + String filedString = entityHttpUtil.getPostMessage(queryEntity, formData); + System.out.println("rec message:" + filedString); + JSONObject jsonObject = JSON.parseObject(filedString); + JSONArray dataArray = jsonObject.getJSONArray("data"); + HashMap<String, Object> markMap = new HashMap<>(); + JSONArray markArray= new JSONArray(); + String markDown = "| 鏁版嵁绫诲瀷 | 鏁版嵁閲� |\\n|------|------|\\n"; + for (int i = 0; i < dataArray.size(); i++) { + JSONObject dataObj = dataArray.getJSONObject(i); + System.out.println("rec message:" + dataObj); + String[] filedValue = new String[2]; + + for (String key : dataObj.keySet()) { + if (key == filed) { + filedValue[0]= dataObj.getString(key); + } else { + filedValue[1]= dataObj.getString(key); + } + } + markDown+="| "+ filedValue[0]+" | "+filedValue[1]+" |\n"; + } + + markMap.put("markdown",markDown); + markArray.add(markMap); + hash.put("markdown",markArray); + hash.put("content","鍦扮悊瀹炰綋鏁版嵁搴�"); + System.out.println("rec message:" + hash); + String message = JSON.toJSONString(hash); + webSocketController.sendAllMessage(message); + return R.ok(hash); + } + + public String getWKt(double lon, double lat, int radius) { + // 鍒涘缓涓�涓潗鏍囩偣 + Coordinate coord = new Coordinate(lon, lat); + // 鍒涘缓GeometryFactory瀹炰緥锛屽苟鎸囧畾鍧愭爣鍙傝�冪郴缁熶负WGS84 + GeometryFactory geometryFactory = new GeometryFactory(new PrecisionModel(), 4326); + // 浣跨敤鍧愭爣鍒涘缓涓�涓偣 + Point point = geometryFactory.createPoint(coord); + // 鍒涘缓BufferOp瀹炰緥锛岀敤浜庣敓鎴愮紦鍐插尯 + BufferOp bufferOp = new BufferOp(point); + int dis = 500; + if (radius != 0) { + dis = radius; + } + // 璁剧疆缂撳啿鍖鸿窛绂讳负500绫� + Geometry bufferedGeometry = bufferOp.getResultGeometry(dis); + // 鍒涘缓WKTWriter瀹炰緥锛岀敤浜庡皢Geometry杞崲涓篧KT鏍煎紡 +// WKTWriter wktWriter = new WKTWriter(); + + // 灏嗙紦鍐插尯Geometry杞崲涓篧KT鏍煎紡 +// String wkt = wktWriter.write(bufferedGeometry); + // 杈撳嚭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; + } + + public String getQueryAround(String type, String wkt) throws Exception { + String query = "sjnr like '%" + type + "%'" + ""; + String key = getPublickey(); + String encrypt = RsaHelper.encrypt(key, query); + HashMap formData = new HashMap<>(); + formData.put("token", token); + formData.put("start", "1"); + formData.put("count", "0"); + formData.put("containCount", "true"); + formData.put("layerid", layerId); + formData.put("dbid", dbid); + formData.put("where", encrypt); + formData.put("box", wkt); + String jsonString = entityHttpUtil.getPostMessage(queryEntity, formData); + JSONObject jsonObject = JSON.parseObject(jsonString); + JSONObject dataObjject = jsonObject.getJSONObject("data"); + JSONArray dataArray = dataObjject.getJSONArray("items"); + return dataArray.toString(); + } + + //鍏抽敭瀛楁煡璇� + public String getQueryFiled(String place) throws Exception { + String query = "enti_name like '%" + place + "%'" + ""; + String key = getPublickey(); + String encrypt = RsaHelper.encrypt(key, query); + HashMap formData = new HashMap<>(); + formData.put("token", token); + formData.put("start", "1"); + formData.put("count", "0"); + formData.put("containCount", "true"); + formData.put("layerid", layerId); + formData.put("dbid", dbid); + formData.put("where", encrypt); + String jsonString = entityHttpUtil.getPostMessage(queryEntity, formData); + JSONObject jsonObject = JSON.parseObject(jsonString); + JSONObject dataObjject = jsonObject.getJSONObject("data"); + JSONArray dataArray = dataObjject.getJSONArray("items"); + return dataArray.getJSONObject(0).toString(); + } + + //鑾峰彇绉橀挜鎺ュ彛 + public String getPublickey() { + HashMap<String, String> map = new HashMap<>(); + map.put("token", token); + String jsonString = entityHttpUtil.getPostMessage(publickey, map); + JSONObject jsonObject = JSON.parseObject(jsonString); + return jsonObject.getString("data"); + } + + + @PostMapping("/aroundPoi2") @Operation(summary = "鍛ㄨ竟鏌ヨ") - public R aroundPoi(@RequestBody ReqEntity reqEntity){ - System.out.println("rec message:"+reqEntity); - HashMap<String,Object> hash = new HashMap<>(); - hash.put("func","aroundPoi"); - hash.put("mid","mid"); + public R aroundPoi2(@RequestBody ReqEntity reqEntity) { + System.out.println("rec message:" + reqEntity); + HashMap<String, Object> hash = new HashMap<>(); + hash.put("func", "aroundPoi"); + hash.put("mid", "mid"); List<ReqEntity> list = new ArrayList<>(); - reqEntity.setX("120.9671"); - reqEntity.setY("13.5748"); +// reqEntity.setX("120.9671"); +// reqEntity.setY("13.5748"); list.add(reqEntity); list.add(reqEntity); - hash.put("poi",list); + hash.put("poi", list); String message = JSON.toJSONString(hash); webSocketController.sendAllMessage(message); return R.ok(hash); } + /*@GetMapping("/queryPath/{start_point}/{end_point}") @Operation(summary = "璺嚎鏌ヨ") @@ -76,17 +281,15 @@ return R.ok(hash); } */ - @PostMapping("/queryMeta") + @PostMapping("/queryMeta2") @Operation(summary = "鍏冧俊鎭煡璇�") - public R queryMeta(@Parameter String mid){ + public R queryMeta2(@Parameter String mid) { System.out.println("queryMeta "); - HashMap<String,Object> hash = new HashMap<>(); - hash.put("func","queryMeta"); - hash.put("mid",mid); + HashMap<String, Object> hash = new HashMap<>(); + hash.put("func", "queryMeta"); + hash.put("mid", mid); List<ReqEntity> list = new ArrayList<>(); - - hash.put("meta",list); - + hash.put("meta", list); String message = JSON.toJSONString(hash); webSocketController.sendAllMessage(message); -- Gitblit v1.9.3