123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- package cn.com.taiji.utils;
- import cn.com.taiji.entity.Location;
- import cn.hutool.core.date.DateUnit;
- import cn.hutool.core.date.DateUtil;
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- /**
- * @author chenfangchao
- * @title: LocationUtils
- * @projectName es-track-analysis
- * @description: TODO
- * @date 2023/2/7 5:40 PM
- */
- public class LocationUtils {
- public static List<Location> generateLogLat(String startTime, String endTime, Double startLog, Double startLat, Double endLog, Double endLat) {
- List<Location> list = new ArrayList<>();
- try {
- final int seconds = 1000;
- //经纬度差
- Double difflog = Math.abs(startLog - endLog);
- Double difflat = Math.abs(startLat - endLat);
- //相差秒数
- long diffSeconds = diffSeconds(startTime, endTime);
- //平均经纬度差
- Double avgLog = difflog / diffSeconds;
- Double avgLat = difflat / diffSeconds;
- //开始时间时间戳
- long startTimeStamp = dateToStamp(startTime);
- long endTimeStamp = dateToStamp(endTime);
- Double resLog = startLog;
- Double resLat = startLat;
- long startTimeStampNew = startTimeStamp + seconds;
- //判断时间大小关系
- if (startTimeStampNew < endTimeStamp) {
- for (long i = startTimeStamp + seconds; i < endTimeStamp; i += seconds) {
- resLog = avgLog + resLog;
- resLat = avgLat + resLat;
- double bdLog = doubleDown(resLog);
- double bdLat = doubleDown(resLat);
- Location location = new Location(bdLog,bdLat);
- list.add(location);
- }
- } else {
- for (long i = endTimeStamp + seconds; i < startTimeStampNew; i += seconds) {
- resLog = avgLog + resLog;
- resLat = avgLat + resLat;
- double bdLog = doubleDown(resLog);
- double bdLat = doubleDown(resLat);
- Location location = new Location(bdLog,bdLat);
- list.add(location);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return list;
- }
- public static double doubleDown(Double data) {
- try {
- BigDecimal bd = new BigDecimal(data);
- double res = bd.setScale(7, BigDecimal.ROUND_DOWN).doubleValue();
- return res;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return 0;
- }
- public static long dateToStamp(String time) {
- Date date = DateUtil.parse(time);
- long ts = date.getTime();
- return ts;
- }
- public static long diffSeconds(String startTime,String endTime){
- Date startDate= DateUtil.parse(startTime);
- Date endDate=DateUtil.parse(endTime);
- long second=DateUtil.between(startDate,endDate, DateUnit.SECOND);
- return second;
- }
- }
|