From 7d77fd318e575c1873c8caf549ce7617785c148f Mon Sep 17 00:00:00 2001 From: 于紫祥_1901 <email@yuzixiang_1910> Date: Thu, 20 Aug 2020 09:04:16 +0800 Subject: [PATCH] 风场图update --- src/main/java/com/moral/service/DeviceService.java | 1 src/main/java/com/moral/controller/ScreenController.java | 22 +++++ src/main/java/com/moral/service/impl/DeviceServiceImpl.java | 162 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 184 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java index 207fe08..af81612 100644 --- a/src/main/java/com/moral/controller/ScreenController.java +++ b/src/main/java/com/moral/controller/ScreenController.java @@ -1995,6 +1995,28 @@ List list=deviceService.byMonitorIdGetDeviceAndWind(monitorPointId,time,table); return list; } + @GetMapping("/windAndDeviceDataByArea") + @ResponseBody + public List windAndDeviceDataByArea(String monitorPointId) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.MINUTE, (calendar.get(Calendar.MINUTE) - 2)); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + String time = df.format(calendar.getTime())+":00"; + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH) + 1; + String mon; + if (month<10){ + mon="0"+month; + }else { + mon=""+month; + } + String table="history_minutely_"+year+mon; + log.info(table); + log.info(time); + List list=deviceService.byMonitorIdGetDeviceAndWindSpecial(monitorPointId,time,table); + return list; + } + @GetMapping("forecastO3") @ApiOperation(value = "���������������������������", notes = "���������������������������") @ApiImplicitParams(value = { diff --git a/src/main/java/com/moral/service/DeviceService.java b/src/main/java/com/moral/service/DeviceService.java index 8b7cb04..8064130 100644 --- a/src/main/java/com/moral/service/DeviceService.java +++ b/src/main/java/com/moral/service/DeviceService.java @@ -81,6 +81,7 @@ Device byMacGetDevice(String mac); List<DeviceAndWind> byMonitorIdGetDeviceAndWind(String id,String time,String tab); + List<DeviceAndWind> byMonitorIdGetDeviceAndWindSpecial(String id,String time,String tab); DeviceAndWind getDeviceAndWindByMac(String mac,String time,String table); } diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java index 0db3787..52bda83 100644 --- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java @@ -840,7 +840,167 @@ } } }else { - if (y>=1 && j==y*nx+x && uList.get(j)==0.0 && vList.get(j)==0.0){ + if (y>=1 && j==y*nx+x){ + int k; + for (k = j-2*nx; k <=j+2*nx ;) { + uList.set(k-1,U); + uList.set(k-2,U); + uList.set(k+1,U); + uList.set(k+2,U); + vList.set(k-1,V); + vList.set(k-2,V); + vList.set(k+1,V); + vList.set(k+2,V); + k=k+nx; + } + uList.set(j,U); + vList.set(j,V); + } + } + } + } + String uData = "\"" + "data" + "\"" + ": " + uList; + String vData = "\"" + "data" + "\"" + ": " + vList; + String s1 = "[" + "{" + header1 + ", " + uData + "}" + ", " + "{" + header2 + ", " + vData + "}" + "]"; + JSONArray jsonArray = JSONArray.parseArray(s1); + MonitorPoint monitorPoint=monitorPointMapper.byIdGetMonitorPoint(Integer.parseInt(id)); + Double monitorLo=monitorPoint.getLongitude(); + Double monitorLa=monitorPoint.getLatitude(); + List transList= LatLngTransformation.Convert_BD09_To_GCJ02(monitorLa,monitorLo); + Double transLo=(Double) transList.get(0); + Double transLa=(Double) transList.get(1); + + list.add(jsonArray); + list.add(transLo); + list.add(transLa); + list.add(laLaMap); + return list; + } + + @Override + public List byMonitorIdGetDeviceAndWindSpecial(String id, String time, String tab) { + List<DeviceAndWind> deviceAndWinds=deviceMapper.byMonitorIdGetDeviceAndWind(Integer.parseInt(id),time,tab); + List loList=new ArrayList(); + List laList=new ArrayList(); + Double U=0.0; + Double V=0.0; + List list=new ArrayList(); + for (DeviceAndWind andWind : deviceAndWinds) { + Double lo=andWind.getLongitude(); + Double la=andWind.getLatitude(); + List tranlist= LatLngTransformation.Convert_BD09_To_GCJ02(la,lo); + Double transLo=(Double) tranlist.get(0); + Double transLa=(Double) tranlist.get(1); + loList.add(transLo); + laList.add(transLa); + } + Double loma= 0.0; + Double lomi= 0.0; + Double lama= 0.0; + Double lami= 0.0; + if (loList.size()>0){ + loma= (Double) Collections.max(loList); + lomi= (Double) Collections.min(loList); + } + if (laList.size()>0){ + lama= (Double) Collections.max(laList); + lami= (Double) Collections.min(laList); + } + Map laLaMap=new HashMap(); + laLaMap.put("maxLo",loma); + laLaMap.put("minLo",lomi); + laLaMap.put("maxLa",lama); + laLaMap.put("minLa",lami); + + Double lo1=lomi-2000*0.00001141; + Double lo2=loma+2000*0.00001141; + Double la2=lami-2000*0.00000899; + Double la1=lama+2000*0.00000899; + + Double dx=0.00001141*70; + Double dy=0.00000899*70; + + int nx=(int) Math.floor((lo2-lo1)/dx); + int ny=(int) Math.floor((la1-la2)/dy); + System.out.println(nx+"----"+ny); + String header1 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 2 + + ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + + ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + + ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + + ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; + + String header2 = "\"" + "header" + "\"" + ": " + "{" + "\"" + "parameterUnit" + "\"" + ": " + "\"" + "m/s" + "\"" + ", " + "\"" + "parameterNumber" + "\"" + ": " + 3 + + ", " + "\"" + "dx" + "\"" + ": " + dx + ", " + "\"" + "dy" + "\"" + ": " + dy + + ", " + "\"" + "parameterNumberName" + "\"" + ": " + "\"" + "eastward_wind" + "\"" + ", " + "\"" + "la1" + "\"" + ": " + la1 + ", " + "\"" + "la2" + "\"" + ": " + la2 + + ", " + "\"" + "parameterCategory" + "\"" + ": " + 2 + ", " + "\"" + "lo1" + "\"" + ": " + lo1 + ", " + "\"" + "lo2" + "\"" + ": " + lo2 + + ", " + "\"" + "nx" + "\"" + ": " + nx + ", " + "\"" + "ny" + "\"" + ": " + ny + ", " + "\"" + "refTime" + "\"" + ": " + "\"" + "2020-07-22 23:00:00" + "\"" + "}"; + + List<Double> uList=new ArrayList<Double> (); + List<Double> vList=new ArrayList<Double> (); + int x=0; + int y=0; + List<Map> mapList=new ArrayList<Map>(); + + for (int j = 0; j <deviceAndWinds.size() ; j++) { + Map<String,Double> map=new HashMap<String,Double> (); + Double windDir= deviceAndWinds.get(j).getWindDir(); + + Double windSpeed=deviceAndWinds.get(j).getWindSpeed(); + if (windDir==null){ + windDir=0.0; + windSpeed=0.0; + } + Double tvoc=deviceAndWinds.get(j).getTVoc(); + + List tranlist= LatLngTransformation.Convert_BD09_To_GCJ02(deviceAndWinds.get(j).getLatitude(),deviceAndWinds.get(j).getLongitude()); + Double transLo=(Double) tranlist.get(0); + Double transLa=(Double) tranlist.get(1); + if (tvoc==null){ + tvoc=0.0; + } + Double dir = (270.0 - windDir * Math.PI / 180.0); + + U = windSpeed * Math.cos(dir); + V = windSpeed * Math.sin(dir); + map.put("lo",transLo); + map.put("la",transLa); + map.put("U",U); + map.put("V",V); + mapList.add(map); + } + for (int i = 0; i <mapList.size() ; i++) { + Double lo= (Double) mapList.get(i).get("lo"); + Double la= (Double) mapList.get(i).get("la"); + x= (int) Math.floor((lo-lo1)/dx); + y=Math.abs((int)Math.floor((la-la1)/dy)); + //y=Math.floor(Math.abs(la-la1)/dy); + U=(Double) mapList.get(i).get("U"); + V=(Double) mapList.get(i).get("V"); + if (i==0){ + for (int j = 0; j <nx*ny ; j++) { + uList.add(0.0); + vList.add(0.0); + } + } + for (int j = 0; j <nx*ny ; j++) { + if (i==0){ + if ((y>=2 && j==(y)*nx+x)){ + int k; + for (k = j-2*nx; k <=j+2*nx ;k=k+nx) { + uList.set(k,U); + uList.set(k-1,U); + uList.set(k-2,U); + uList.set(k+1,U); + uList.set(k+2,U); + vList.set(k,V); + vList.set(k-1,V); + vList.set(k-2,V); + vList.set(k+1,V); + vList.set(k+2,V); + } + } + }else { + if (y>=1 && j==y*nx+x){ int k; for (k = j-2*nx; k <=j+2*nx ;) { uList.set(k-1,U); -- Gitblit v1.8.0