Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
amos-boot-biz
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
项目统一框架
amos-boot-biz
Commits
12255d2c
Commit
12255d2c
authored
Oct 25, 2023
by
caotao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.对于查询的原始速度为0的数据进行处理。
2.增加方法对于纠偏后的数据的速度进行插点处理。
parent
8df5c64f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
397 additions
and
375 deletions
+397
-375
WlCarMileageServiceImpl.java
...oin/equipmanage/service/impl/WlCarMileageServiceImpl.java
+397
-375
No files found.
amos-boot-module/amos-boot-module-biz/amos-boot-module-equip-biz/src/main/java/com/yeejoin/equipmanage/service/impl/WlCarMileageServiceImpl.java
View file @
12255d2c
...
@@ -19,6 +19,7 @@ import com.yeejoin.equipmanage.service.ICarService;
...
@@ -19,6 +19,7 @@ import com.yeejoin.equipmanage.service.ICarService;
import
com.yeejoin.equipmanage.service.IWlCarMileageService
;
import
com.yeejoin.equipmanage.service.IWlCarMileageService
;
import
com.yeejoin.equipmanage.thread.ThreadCarMileageTreatment
;
import
com.yeejoin.equipmanage.thread.ThreadCarMileageTreatment
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.checkerframework.checker.units.qual.Speed
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -59,340 +60,334 @@ import java.util.stream.Collectors;
...
@@ -59,340 +60,334 @@ import java.util.stream.Collectors;
@EnableScheduling
@EnableScheduling
@EnableAsync
@EnableAsync
public
class
WlCarMileageServiceImpl
extends
ServiceImpl
<
WlCarMileageMapper
,
WlCarMileage
>
public
class
WlCarMileageServiceImpl
extends
ServiceImpl
<
WlCarMileageMapper
,
WlCarMileage
>
implements
IWlCarMileageService
{
implements
IWlCarMileageService
{
@Value
(
"${car.max.speed:100}"
)
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
HttpUtil
.
class
);
private
Integer
CAR_MAX_SPEED
;
private
final
String
GUIDE_KEY
=
"813684495d9a3981dd2c7694916fe404"
;
@Autowired
private
final
String
GUIDE_URL
=
"https://restapi.amap.com/v4/grasproad/driving?"
;
IotFeign
iotFeign
;
private
final
String
GUIDE_ADDRESS_URL
=
"https://restapi.amap.com/v3/geocode/regeo?"
;
@Autowired
IotFeign
iotFeign
;
@Autowired
ICarService
iCarService
;
@Value
(
"${car.max.speed:100}"
)
private
Integer
CAR_MAX_SPEED
;
@Value
(
"${mileage.parameter}"
)
private
Double
mileageParameter
;
@Resource
private
EmqKeeper
emqKeeper
;
@Autowired
public
static
List
<
String
>
getDayByMonth
(
Date
date
)
{
ICarService
iCarService
;
List
<
String
>
data
=
new
ArrayList
<>();
try
{
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
date
);
// 获取当前的年份
int
year
=
c
.
get
(
Calendar
.
YEAR
);
// 获取当前的月份(需要加1才是现在的月份)
int
month
=
c
.
get
(
Calendar
.
MONTH
)
+
1
;
// 获取本月的总天数
int
dayCount
=
c
.
getActualMaximum
(
Calendar
.
DAY_OF_MONTH
);
// 定义时间格式
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
// 开始日期为当前年月拼接1号
Date
startDate
=
sdf
.
parse
(
year
+
"-"
+
month
+
"-01"
);
// 结束日期为当前年月拼接该月最大天数
Date
endDate
=
sdf
.
parse
(
year
+
"-"
+
month
+
"-"
+
dayCount
);
// 设置calendar的开始日期
c
.
setTime
(
startDate
);
// 当前时间小于等于设定的结束时间
while
(
c
.
getTime
().
compareTo
(
endDate
)
<=
0
)
{
String
time
=
sdf
.
format
(
c
.
getTime
());
data
.
add
(
time
);
// 当前日期加1
c
.
add
(
Calendar
.
DATE
,
1
);
}
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
data
;
}
@Value
(
"${mileage.parameter}"
)
@Override
private
Double
mileageParameter
;
public
Page
<
WlCarMileage
>
page
(
Page
<
WlCarMileage
>
page
,
WlCarMileage
wlCarMileage
)
{
return
this
.
baseMapper
.
page
(
page
,
wlCarMileage
,
mileageParameter
);
}
@Resource
@Override
private
EmqKeeper
emqKeeper
;
public
Double
totalMileage
(
String
iotCode
)
{
return
this
.
baseMapper
.
totalMileage
(
iotCode
);
}
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
HttpUtil
.
class
);
@Override
public
List
<
Coordinate
>
getCoordinateList
(
long
id
)
{
double
speed
=
0
;
WlCarMileage
wlCarMileage
=
this
.
getById
(
id
);
String
iotCode
=
wlCarMileage
.
getIotCode
();
String
measurement
=
iotCode
.
substring
(
0
,
8
);
String
deviceName
=
iotCode
.
replace
(
measurement
,
""
);
// 由于iot存在毫秒故结束时间要+1秒 iot+1秒有bug还是查不到 +2秒
ResponseModel
<
List
<
Object
>>
result
=
iotFeign
.
getLiveData
(
measurement
,
deviceName
,
wlCarMileage
.
getStartTime
(),
new
Date
(
wlCarMileage
.
getEndTime
().
getTime
()));
List
<
Object
>
list
=
result
.
getResult
();
List
<
Coordinate
>
coordinateList
=
new
ArrayList
<
Coordinate
>();
if
(
list
!=
null
)
{
DateFormat
format1
=
new
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
);
DateFormat
format2
=
new
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss'Z'"
);
for
(
Object
object
:
list
)
{
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
object
));
if
(
jsonObject
.
get
(
"FireCar_Longitude"
)
!=
null
&&
jsonObject
.
get
(
"FireCar_Latitude"
)
!=
null
)
{
Coordinate
coordinate
=
new
Coordinate
();
List
<
Double
>
lnglat
=
new
ArrayList
<
Double
>();
lnglat
.
add
(
jsonObject
.
getDoubleValue
(
"FireCar_Longitude"
));
lnglat
.
add
(
jsonObject
.
getDoubleValue
(
"FireCar_Latitude"
));
coordinate
.
setLnglat
(
lnglat
);
coordinate
.
setSpeed
(
jsonObject
.
getDoubleValue
(
"fireCar_Speed"
));
speed
=
speed
+
jsonObject
.
getDoubleValue
(
"fireCar_Speed"
);
String
time
=
jsonObject
.
getString
(
"time"
);
if
(
time
.
length
()
>
20
)
{
try
{
coordinate
.
setTime
(
format1
.
parse
(
jsonObject
.
getString
(
"time"
)).
getTime
());
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
else
{
try
{
coordinate
.
setTime
(
format2
.
parse
(
jsonObject
.
getString
(
"time"
)).
getTime
());
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
double
direction
=
jsonObject
.
getDoubleValue
(
"direction"
);
if
(!
ObjectUtils
.
isEmpty
(
direction
))
{
coordinate
.
setDirection
(
jsonObject
.
getDoubleValue
(
"direction"
));
}
else
{
coordinate
.
setDirection
(
0
);
}
coordinateList
.
add
(
coordinate
);
}
}
}
// 倒序坐标变为正序
Collections
.
reverse
(
coordinateList
);
private
final
String
GUIDE_KEY
=
"813684495d9a3981dd2c7694916fe404"
;
// 坐标轨迹纠偏
double
avgSpeed
=
speed
/
coordinateList
.
size
();
double
count
=
Double
.
valueOf
(
coordinateList
.
size
())
/
500
;
int
ceil
=
(
int
)
Math
.
ceil
(
count
);
ArrayList
<
Coordinate
>
resultList
=
new
ArrayList
<>();
for
(
int
i
=
1
;
i
<=
ceil
;
i
++)
{
if
(
i
==
ceil
)
{
List
<
Coordinate
>
coordinates
=
coordinateList
.
subList
(
500
*
(
i
-
1
),
coordinateList
.
size
());
List
<
Coordinate
>
check
=
check
(
coordinates
,
avgSpeed
);
resultList
.
addAll
(
check
);
}
else
{
List
<
Coordinate
>
coordinates
=
coordinateList
.
subList
(
500
*
(
i
-
1
),
500
+
(
i
-
1
)
*
500
);
List
<
Coordinate
>
check
=
check
(
coordinates
,
avgSpeed
);
resultList
.
addAll
(
check
);
}
private
final
String
GUIDE_URL
=
"https://restapi.amap.com/v4/grasproad/driving?"
;
}
private
final
String
GUIDE_ADDRESS_URL
=
"https://restapi.amap.com/v3/geocode/regeo?"
;
return
resultList
;
}
@Override
private
List
<
Coordinate
>
check
(
List
<
Coordinate
>
list
,
double
avgSpeed
)
{
public
Page
<
WlCarMileage
>
page
(
Page
<
WlCarMileage
>
page
,
WlCarMileage
wlCarMileage
)
{
ArrayList
<
Coordinate
>
coordinates
=
new
ArrayList
<>();
return
this
.
baseMapper
.
page
(
page
,
wlCarMileage
,
mileageParameter
);
JSONArray
objects
=
new
JSONArray
();
}
int
count
=
0
;
for
(
Coordinate
coordinate
:
list
)
{
JSONObject
jsonObject
=
new
JSONObject
();
// 经度
jsonObject
.
put
(
"x"
,
coordinate
.
getLnglat
().
get
(
0
));
// 纬度
jsonObject
.
put
(
"y"
,
coordinate
.
getLnglat
().
get
(
1
));
// 角度
jsonObject
.
put
(
"ag"
,
coordinate
.
getDirection
());
// 速度
jsonObject
.
put
(
"sp"
,
coordinate
.
getSpeed
()
>
0
?
coordinate
.
getSpeed
()
:
avgSpeed
);
// 时间
if
(
count
==
0
)
{
jsonObject
.
put
(
"tm"
,
coordinate
.
getTime
()
/
1000
);
}
else
{
jsonObject
.
put
(
"tm"
,
3
*
count
);
}
count
+=
1
;
objects
.
add
(
jsonObject
);
}
String
s
=
objects
.
toJSONString
();
StringBuilder
api
=
new
StringBuilder
(
GUIDE_URL
);
api
.
append
(
"key="
).
append
(
GUIDE_KEY
);
String
result
=
null
;
try
{
result
=
HttpUtil
.
post
(
api
.
toString
(),
s
);
}
catch
(
IOException
|
NoSuchAlgorithmException
|
KeyStoreException
|
KeyManagementException
e
)
{
e
.
printStackTrace
();
}
if
(
result
!=
null
)
{
Map
<
String
,
Object
>
jsonObject
=
(
Map
<
String
,
Object
>)
JSONObject
.
parseObject
(
result
);
//判断是否坐标不满足高德地图纠偏需求
if
(
jsonObject
.
containsKey
(
"errcode"
)
&&
jsonObject
.
get
(
"errcode"
).
toString
().
equals
(
"30001"
))
{
return
list
;
}
if
(
jsonObject
.
containsKey
(
"data"
))
{
JSONObject
data3
=
JSONObject
.
parseObject
(
jsonObject
.
get
(
"data"
).
toString
());
JSONArray
points1
=
JSONArray
.
parseArray
(
data3
.
get
(
"points"
).
toString
());
for
(
int
i
=
0
;
i
<
points1
.
size
();
i
++)
{
JSONObject
jsonObject1
=
JSONObject
.
parseObject
(
points1
.
get
(
i
).
toString
());
List
<
Double
>
doubles
=
new
ArrayList
<>();
Coordinate
coordinate
=
new
Coordinate
();
doubles
.
add
(
Double
.
valueOf
(
jsonObject1
.
get
(
"x"
).
toString
()));
doubles
.
add
(
Double
.
valueOf
(
jsonObject1
.
get
(
"y"
).
toString
()));
coordinate
.
setLnglat
(
doubles
);
Double
speeed
=
getSpeedByOriginalData
(
objects
,
Double
.
valueOf
(
jsonObject1
.
get
(
"x"
).
toString
()),
Double
.
valueOf
(
jsonObject1
.
get
(
"y"
).
toString
()),
i
);
coordinate
.
setSpeed
(
speeed
);
coordinates
.
add
(
coordinate
);
}
}
}
@Override
return
coordinates
;
public
Double
totalMileage
(
String
iotCode
)
{
}
return
this
.
baseMapper
.
totalMileage
(
iotCode
);
}
@Override
@Override
public
List
<
Coordinate
>
getCoordinateList
(
long
id
)
{
public
Map
<
String
,
Boolean
>
getCalender
(
long
id
,
Date
date
)
{
double
speed
=
0
;
List
<
String
>
daylist
=
new
ArrayList
<
String
>();
WlCarMileage
wlCarMileage
=
this
.
getById
(
id
);
Map
<
String
,
Boolean
>
map
=
new
HashMap
<>();
String
iotCode
=
wlCarMileage
.
getIotCode
();
Car
car
=
iCarService
.
getById
(
id
);
String
measurement
=
iotCode
.
substring
(
0
,
8
);
if
(
car
==
null
||
car
.
getIotCode
()
==
null
||
date
==
null
)
{
String
deviceName
=
iotCode
.
replace
(
measurement
,
""
);
return
map
;
// 由于iot存在毫秒故结束时间要+1秒 iot+1秒有bug还是查不到 +2秒
}
ResponseModel
<
List
<
Object
>>
result
=
iotFeign
.
getLiveData
(
measurement
,
deviceName
,
wlCarMileage
.
getStartTime
(),
Calendar
c
=
Calendar
.
getInstance
();
new
Date
(
wlCarMileage
.
getEndTime
().
getTime
()));
// 获取上一个月
List
<
Object
>
list
=
result
.
getResult
();
c
.
setTime
(
date
);
List
<
Coordinate
>
coordinateList
=
new
ArrayList
<
Coordinate
>();
c
.
add
(
Calendar
.
MONTH
,
-
1
);
if
(
list
!=
null
)
{
daylist
.
addAll
(
getDayByMonth
(
c
.
getTime
()));
DateFormat
format1
=
new
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
);
DateFormat
format2
=
new
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss'Z'"
);
for
(
Object
object
:
list
)
{
JSONObject
jsonObject
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
object
));
if
(
jsonObject
.
get
(
"FireCar_Longitude"
)
!=
null
&&
jsonObject
.
get
(
"FireCar_Latitude"
)
!=
null
)
{
Coordinate
coordinate
=
new
Coordinate
();
List
<
Double
>
lnglat
=
new
ArrayList
<
Double
>();
lnglat
.
add
(
jsonObject
.
getDoubleValue
(
"FireCar_Longitude"
));
lnglat
.
add
(
jsonObject
.
getDoubleValue
(
"FireCar_Latitude"
));
coordinate
.
setLnglat
(
lnglat
);
coordinate
.
setSpeed
(
jsonObject
.
getDoubleValue
(
"FireCar_Speed"
));
speed
=
speed
+
jsonObject
.
getDoubleValue
(
"FireCar_Speed"
);
String
time
=
jsonObject
.
getString
(
"time"
);
if
(
time
.
length
()
>
20
)
{
try
{
coordinate
.
setTime
(
format1
.
parse
(
jsonObject
.
getString
(
"time"
)).
getTime
());
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
else
{
try
{
coordinate
.
setTime
(
format2
.
parse
(
jsonObject
.
getString
(
"time"
)).
getTime
());
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
}
double
direction
=
jsonObject
.
getDoubleValue
(
"direction"
);
if
(!
ObjectUtils
.
isEmpty
(
direction
)){
coordinate
.
setDirection
(
jsonObject
.
getDoubleValue
(
"direction"
));
}
else
{
coordinate
.
setDirection
(
0
);
}
coordinateList
.
add
(
coordinate
);
}
}
}
// 倒序坐标变为正序
Collections
.
reverse
(
coordinateList
);
// 坐标轨迹纠偏
// 获取当月
double
avgSpeed
=
speed
/
coordinateList
.
size
();
c
.
setTime
(
date
);
double
count
=
Double
.
valueOf
(
coordinateList
.
size
())
/
500
;
daylist
.
addAll
(
getDayByMonth
(
c
.
getTime
()));
int
ceil
=
(
int
)
Math
.
ceil
(
count
);
ArrayList
<
Coordinate
>
resultList
=
new
ArrayList
<>();
for
(
int
i
=
1
;
i
<=
ceil
;
i
++)
{
if
(
i
==
ceil
)
{
List
<
Coordinate
>
coordinates
=
coordinateList
.
subList
(
500
*
(
i
-
1
),
coordinateList
.
size
());
List
<
Coordinate
>
check
=
check
(
coordinates
,
avgSpeed
);
resultList
.
addAll
(
check
);
}
else
{
List
<
Coordinate
>
coordinates
=
coordinateList
.
subList
(
500
*
(
i
-
1
),
500
+
(
i
-
1
)
*
500
);
List
<
Coordinate
>
check
=
check
(
coordinates
,
avgSpeed
);
resultList
.
addAll
(
check
);
}
}
// 获取下一个月
c
.
setTime
(
date
);
return
resultList
;
c
.
add
(
Calendar
.
MONTH
,
1
);
}
daylist
.
addAll
(
getDayByMonth
(
c
.
getTime
()));
private
List
<
Coordinate
>
check
(
List
<
Coordinate
>
list
,
double
avgSpeed
)
{
ArrayList
<
Coordinate
>
coordinates
=
new
ArrayList
<>();
JSONArray
objects
=
new
JSONArray
();
int
count
=
0
;
for
(
Coordinate
coordinate
:
list
)
{
JSONObject
jsonObject
=
new
JSONObject
();
// 经度
jsonObject
.
put
(
"x"
,
coordinate
.
getLnglat
().
get
(
0
));
// 纬度
jsonObject
.
put
(
"y"
,
coordinate
.
getLnglat
().
get
(
1
));
// 角度
jsonObject
.
put
(
"ag"
,
coordinate
.
getDirection
());
// 速度
jsonObject
.
put
(
"sp"
,
coordinate
.
getSpeed
());
// 时间
if
(
count
==
0
)
{
jsonObject
.
put
(
"tm"
,
coordinate
.
getTime
()
/
1000
);
}
else
{
jsonObject
.
put
(
"tm"
,
3
*
count
);
}
count
+=
1
;
objects
.
add
(
jsonObject
);
}
String
s
=
objects
.
toJSONString
();
StringBuilder
api
=
new
StringBuilder
(
GUIDE_URL
);
api
.
append
(
"key="
).
append
(
GUIDE_KEY
);
String
result
=
null
;
try
{
result
=
HttpUtil
.
post
(
api
.
toString
(),
s
);
}
catch
(
IOException
|
NoSuchAlgorithmException
|
KeyStoreException
|
KeyManagementException
e
)
{
e
.
printStackTrace
();
}
if
(
result
!=
null
)
{
Map
<
String
,
Object
>
jsonObject
=
(
Map
<
String
,
Object
>)
JSONObject
.
parseObject
(
result
);
//判断是否坐标不满足高德地图纠偏需求
if
(
jsonObject
.
containsKey
(
"errcode"
)&&
jsonObject
.
get
(
"errcode"
).
toString
().
equals
(
"30001"
)){
return
list
;
}
if
(
jsonObject
.
containsKey
(
"data"
))
{
JSONObject
data3
=
JSONObject
.
parseObject
(
jsonObject
.
get
(
"data"
).
toString
());
JSONArray
points1
=
JSONArray
.
parseArray
(
data3
.
get
(
"points"
).
toString
());
points1
.
forEach
(
item
->
{
JSONObject
jsonObject1
=
JSONObject
.
parseObject
(
item
.
toString
());
List
<
Double
>
doubles
=
new
ArrayList
<>();
Coordinate
coordinate
=
new
Coordinate
();
doubles
.
add
(
Double
.
valueOf
(
jsonObject1
.
get
(
"x"
).
toString
()));
doubles
.
add
(
Double
.
valueOf
(
jsonObject1
.
get
(
"y"
).
toString
()));
coordinate
.
setLnglat
(
doubles
);
coordinate
.
setSpeed
(
avgSpeed
);
coordinates
.
add
(
coordinate
);
});
}
}
return
coordinates
;
}
@Override
public
Map
<
String
,
Boolean
>
getCalender
(
long
id
,
Date
date
)
{
List
<
String
>
daylist
=
new
ArrayList
<
String
>();
Map
<
String
,
Boolean
>
map
=
new
HashMap
<>();
Car
car
=
iCarService
.
getById
(
id
);
if
(
car
==
null
||
car
.
getIotCode
()
==
null
||
date
==
null
)
{
return
map
;
}
Calendar
c
=
Calendar
.
getInstance
();
// 获取上一个月
c
.
setTime
(
date
);
c
.
add
(
Calendar
.
MONTH
,
-
1
);
daylist
.
addAll
(
getDayByMonth
(
c
.
getTime
()));
// 获取当月
c
.
setTime
(
date
);
daylist
.
addAll
(
getDayByMonth
(
c
.
getTime
()));
// 获取下一个月
c
.
setTime
(
date
);
c
.
add
(
Calendar
.
MONTH
,
1
);
daylist
.
addAll
(
getDayByMonth
(
c
.
getTime
()));
// List<Map<String, Object>> hasList = this.listMaps(new QueryWrapper<WlCarMileage>()
// List<Map<String, Object>> hasList = this.listMaps(new QueryWrapper<WlCarMileage>()
// .select("COUNT(1) AS count,date").lambda().eq(WlCarMileage::getIotCode, car.getIotCode())
// .select("COUNT(1) AS count,date").lambda().eq(WlCarMileage::getIotCode, car.getIotCode())
// .between(WlCarMileage::getDate, daylist.get(0), daylist.get(daylist.size() - 1))
// .between(WlCarMileage::getDate, daylist.get(0), daylist.get(daylist.size() - 1))
// .isNotNull(WlCarMileage::getEndTime)
// .isNotNull(WlCarMileage::getEndTime)
// .ge(WlCarMileage::getTravel, 0.5)
// .ge(WlCarMileage::getTravel, 0.5)
// .groupBy(WlCarMileage::getDate));
// .groupBy(WlCarMileage::getDate));
Map
<
String
,
Object
>
hasMap
=
new
HashMap
<>();
Map
<
String
,
Object
>
hasMap
=
new
HashMap
<>();
List
<
WlCarMileage
>
wlCarMileageList
=
this
.
list
(
new
QueryWrapper
<
WlCarMileage
>().
eq
(
"iot_code"
,
car
.
getIotCode
())
List
<
WlCarMileage
>
wlCarMileageList
=
this
.
list
(
new
QueryWrapper
<
WlCarMileage
>().
eq
(
"iot_code"
,
car
.
getIotCode
())
.
between
(
"date"
,
daylist
.
get
(
0
),
daylist
.
get
(
daylist
.
size
()
-
1
))
.
between
(
"date"
,
daylist
.
get
(
0
),
daylist
.
get
(
daylist
.
size
()
-
1
))
.
isNotNull
(
"end_time"
)
.
isNotNull
(
"end_time"
)
.
ge
(
"travel"
,
0.5
)
.
ge
(
"travel"
,
0.5
)
.
groupBy
(
"date"
));
.
groupBy
(
"date"
));
List
<
WlCarMileage
>
wlCarMileageListActiveData
=
wlCarMileageList
.
stream
().
filter
(
wl
->
(!
ObjectUtils
.
isEmpty
(
wl
.
getTakeTime
())
&&
!
ObjectUtils
.
isEmpty
(
wl
.
getTravel
())
&&
((
wl
.
getTravel
()
/
(
wl
.
getTakeTime
()
/
3600000.0
))
<
CAR_MAX_SPEED
))).
collect
(
Collectors
.
toList
());
List
<
WlCarMileage
>
wlCarMileageListActiveData
=
wlCarMileageList
.
stream
().
filter
(
wl
->
(!
ObjectUtils
.
isEmpty
(
wl
.
getTakeTime
())
&&
!
ObjectUtils
.
isEmpty
(
wl
.
getTravel
())
&&
((
wl
.
getTravel
()
/
(
wl
.
getTakeTime
()
/
3600000.0
))
<
CAR_MAX_SPEED
))).
collect
(
Collectors
.
toList
());
List
<
String
>
activeDateList
=
wlCarMileageListActiveData
.
stream
().
map
(
wlCarMileage
->
String
.
valueOf
(
DateUtils
.
convertDateToString
(
wlCarMileage
.
getDate
(),
DateUtils
.
DATE_PATTERN
))).
collect
(
Collectors
.
toList
());
List
<
String
>
activeDateList
=
wlCarMileageListActiveData
.
stream
().
map
(
wlCarMileage
->
String
.
valueOf
(
DateUtils
.
convertDateToString
(
wlCarMileage
.
getDate
(),
DateUtils
.
DATE_PATTERN
))).
collect
(
Collectors
.
toList
());
for
(
String
day
:
daylist
)
{
for
(
String
day
:
daylist
)
{
boolean
has
=
false
;
boolean
has
=
false
;
if
(
activeDateList
.
contains
(
day
))
{
if
(
activeDateList
.
contains
(
day
))
{
has
=
true
;
has
=
true
;
}
}
map
.
put
(
day
,
has
);
map
.
put
(
day
,
has
);
}
}
return
map
;
return
map
;
}
}
public
static
List
<
String
>
getDayByMonth
(
Date
date
)
{
List
<
String
>
data
=
new
ArrayList
<>();
try
{
Calendar
c
=
Calendar
.
getInstance
();
c
.
setTime
(
date
);
// 获取当前的年份
int
year
=
c
.
get
(
Calendar
.
YEAR
);
// 获取当前的月份(需要加1才是现在的月份)
int
month
=
c
.
get
(
Calendar
.
MONTH
)
+
1
;
// 获取本月的总天数
int
dayCount
=
c
.
getActualMaximum
(
Calendar
.
DAY_OF_MONTH
);
// 定义时间格式
SimpleDateFormat
sdf
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
// 开始日期为当前年月拼接1号
Date
startDate
=
sdf
.
parse
(
year
+
"-"
+
month
+
"-01"
);
// 结束日期为当前年月拼接该月最大天数
Date
endDate
=
sdf
.
parse
(
year
+
"-"
+
month
+
"-"
+
dayCount
);
// 设置calendar的开始日期
c
.
setTime
(
startDate
);
// 当前时间小于等于设定的结束时间
while
(
c
.
getTime
().
compareTo
(
endDate
)
<=
0
)
{
String
time
=
sdf
.
format
(
c
.
getTime
());
data
.
add
(
time
);
// 当前日期加1
c
.
add
(
Calendar
.
DATE
,
1
);
}
}
catch
(
ParseException
e
)
{
e
.
printStackTrace
();
}
return
data
;
}
@Override
@Override
@Scheduled
(
cron
=
"${mileage.segmentation.cron}"
)
@Scheduled
(
cron
=
"${mileage.segmentation.cron}"
)
@Async
@Async
public
void
mileageSegmentation
()
{
public
void
mileageSegmentation
()
{
log
.
info
(
"轨迹切分定时任务开始执行时间.............{}"
,
LocalDateTime
.
now
());
log
.
info
(
"轨迹切分定时任务开始执行时间.............{}"
,
LocalDateTime
.
now
());
Calendar
cal
=
Calendar
.
getInstance
();
Calendar
cal
=
Calendar
.
getInstance
();
cal
.
setTime
(
new
Date
());
cal
.
setTime
(
new
Date
());
cal
.
add
(
Calendar
.
DATE
,
-
1
);
cal
.
add
(
Calendar
.
DATE
,
-
1
);
String
nowDate
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
format
(
cal
.
getTime
());
String
nowDate
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
).
format
(
cal
.
getTime
());
log
.
info
(
"轨迹切分定时任务数据过滤时间.............{}"
,
nowDate
);
log
.
info
(
"轨迹切分定时任务数据过滤时间.............{}"
,
nowDate
);
List
<
WlCarMileage
>
list
=
this
.
baseMapper
.
list
(
nowDate
);
List
<
WlCarMileage
>
list
=
this
.
baseMapper
.
list
(
nowDate
);
log
.
info
(
"需要切分数据, {}"
,
list
);
log
.
info
(
"需要切分数据, {}"
,
list
);
//销毁所有线程和所有上次坐标
//销毁所有线程和所有上次坐标
//销毁所有线程
//销毁所有线程
log
.
info
(
"销毁所有有效线程开始"
);
log
.
info
(
"销毁所有有效线程开始"
);
CarIotNewListener
.
deviceInfo
.
keySet
().
forEach
(
s
->
{
CarIotNewListener
.
deviceInfo
.
keySet
().
forEach
(
s
->
{
try
{
try
{
CarIotNewListener
.
deviceInfo
.
get
(
s
).
interrupt
();
CarIotNewListener
.
deviceInfo
.
get
(
s
).
interrupt
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
log
.
info
(
"销毁有效线程失败"
+
e
.
getMessage
());
log
.
info
(
"销毁有效线程失败"
+
e
.
getMessage
());
}
}
});
});
CarIotNewListener
.
deviceInfo
.
clear
();
CarIotNewListener
.
deviceInfo
.
clear
();
log
.
info
(
"销毁所有有效线程成功"
);
log
.
info
(
"销毁所有有效线程成功"
);
//销毁所有的坐标信息
//销毁所有的坐标信息
log
.
info
(
"销毁所有坐标信息开始"
);
log
.
info
(
"销毁所有坐标信息开始"
);
CarIotNewListener
.
deviceLastInfo
.
clear
();
CarIotNewListener
.
deviceLastInfo
.
clear
();
log
.
info
(
"销毁所有坐标信息成功"
);
log
.
info
(
"销毁所有坐标信息成功"
);
log
.
info
(
"------------------开始切分里程-------------------------------"
);
log
.
info
(
"------------------开始切分里程-------------------------------"
);
list
.
forEach
(
item
->
{
list
.
forEach
(
item
->
{
Calendar
calendar
=
Calendar
.
getInstance
();
Calendar
calendar
=
Calendar
.
getInstance
();
calendar
.
setTime
(
item
.
getDate
());
calendar
.
setTime
(
item
.
getDate
());
calendar
.
add
(
Calendar
.
DATE
,
1
);
calendar
.
add
(
Calendar
.
DATE
,
1
);
Date
date
=
calendar
.
getTime
();
Date
date
=
calendar
.
getTime
();
//iotcode有效
//iotcode有效
if
(!
ObjectUtils
.
isEmpty
(
item
.
getIotCode
())
&&
item
.
getIotCode
().
length
()
>
8
)
{
if
(!
ObjectUtils
.
isEmpty
(
item
.
getIotCode
())
&&
item
.
getIotCode
().
length
()
>
8
)
{
// 查询车辆上报信息
// 查询车辆上报信息
ResponseModel
<
List
<
Object
>>
result
=
iotFeign
.
getLiveData
(
item
.
getIotCode
().
substring
(
0
,
8
),
item
.
getIotCode
().
substring
(
8
),
ResponseModel
<
List
<
Object
>>
result
=
iotFeign
.
getLiveData
(
item
.
getIotCode
().
substring
(
0
,
8
),
item
.
getIotCode
().
substring
(
8
),
item
.
getStartTime
(),
new
Date
(
new
Date
().
getTime
()
+
2000
));
item
.
getStartTime
(),
new
Date
(
new
Date
().
getTime
()
+
2000
));
List
<
Object
>
list1
=
result
.
getResult
();
List
<
Object
>
list1
=
result
.
getResult
();
// 获取最后一个有坐标的数据
// 获取最后一个有坐标的数据
JSONObject
lastObj
=
null
;
JSONObject
lastObj
=
null
;
// 过滤空坐标
// 过滤空坐标
List
<
Object
>
filterList
=
new
ArrayList
<
Object
>();
List
<
Object
>
filterList
=
new
ArrayList
<
Object
>();
for
(
int
i
=
0
;
i
<
list1
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
list1
.
size
();
i
++)
{
JSONObject
Obj
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
list1
.
get
(
i
)));
JSONObject
Obj
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
list1
.
get
(
i
)));
if
(
Obj
.
get
(
"FireCar_Longitude"
)
!=
null
&&
Obj
.
get
(
"FireCar_Latitude"
)
!=
null
if
(
Obj
.
get
(
"FireCar_Longitude"
)
!=
null
&&
Obj
.
get
(
"FireCar_Latitude"
)
!=
null
&&
Obj
.
getDoubleValue
(
"FireCar_Longitude"
)
!=
0
&&
Obj
.
getDoubleValue
(
"FireCar_Longitude"
)
!=
0
&&
Obj
.
getDoubleValue
(
"FireCar_Latitude"
)
!=
0
)
{
&&
Obj
.
getDoubleValue
(
"FireCar_Latitude"
)
!=
0
)
{
filterList
.
add
(
list1
.
get
(
i
));
filterList
.
add
(
list1
.
get
(
i
));
// 获取第一个不为空的坐标
// 获取第一个不为空的坐标
if
(
lastObj
==
null
)
{
if
(
lastObj
==
null
)
{
lastObj
=
Obj
;
lastObj
=
Obj
;
}
}
}
}
}
}
if
(
lastObj
==
null
)
{
if
(
lastObj
==
null
)
{
lastObj
=
new
JSONObject
();
lastObj
=
new
JSONObject
();
lastObj
.
put
(
"FireCar_Longitude"
,
0.0
);
lastObj
.
put
(
"FireCar_Longitude"
,
0.0
);
lastObj
.
put
(
"FireCar_Latitude"
,
0.0
);
lastObj
.
put
(
"FireCar_Latitude"
,
0.0
);
lastObj
.
put
(
"time"
,
0
);
lastObj
.
put
(
"time"
,
0
);
lastObj
.
put
(
"FireCar_Speed"
,
0
);
lastObj
.
put
(
"FireCar_Speed"
,
0
);
}
}
// 当前坐标
// 当前坐标
double
startLongitude
=
lastObj
.
getDoubleValue
(
"FireCar_Longitude"
);
double
startLongitude
=
lastObj
.
getDoubleValue
(
"FireCar_Longitude"
);
double
startLatitude
=
lastObj
.
getDoubleValue
(
"FireCar_Latitude"
);
double
startLatitude
=
lastObj
.
getDoubleValue
(
"FireCar_Latitude"
);
// 当前速度
// 当前速度
Double
v
=
Double
.
parseDouble
(
String
.
valueOf
(
lastObj
.
get
(
"FireCar_Speed"
)));
Double
v
=
Double
.
parseDouble
(
String
.
valueOf
(
lastObj
.
get
(
"FireCar_Speed"
)));
item
.
setStartSpeed
(
v
.
intValue
());
item
.
setStartSpeed
(
v
.
intValue
());
double
travel
=
0.0
;
double
travel
=
0.0
;
// 获取里程
// 获取里程
for
(
int
i
=
0
;
i
<
filterList
.
size
()
-
1
;
i
++)
{
for
(
int
i
=
0
;
i
<
filterList
.
size
()
-
1
;
i
++)
{
JSONObject
start
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filterList
.
get
(
i
)));
JSONObject
start
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filterList
.
get
(
i
)));
JSONObject
end
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filterList
.
get
(
i
+
1
)));
JSONObject
end
=
JSONObject
.
parseObject
(
JSONObject
.
toJSONString
(
filterList
.
get
(
i
+
1
)));
travel
+=
CoordinateUtil
.
distance
(
start
.
getDoubleValue
(
"FireCar_Latitude"
),
travel
+=
CoordinateUtil
.
distance
(
start
.
getDoubleValue
(
"FireCar_Latitude"
),
start
.
getDoubleValue
(
"FireCar_Longitude"
),
end
.
getDoubleValue
(
"FireCar_Latitude"
),
start
.
getDoubleValue
(
"FireCar_Longitude"
),
end
.
getDoubleValue
(
"FireCar_Latitude"
),
end
.
getDoubleValue
(
"FireCar_Longitude"
));
end
.
getDoubleValue
(
"FireCar_Longitude"
));
}
}
// 查询车辆最新位置
// 查询车辆最新位置
String
address
=
getAddress
(
startLongitude
,
startLatitude
);
String
address
=
getAddress
(
startLongitude
,
startLatitude
);
// 里程耗时
// 里程耗时
long
takeTime
=
(
date
.
getTime
())
-
(
item
.
getStartTime
().
getTime
());
long
takeTime
=
(
date
.
getTime
())
-
(
item
.
getStartTime
().
getTime
());
// 修改0点未结束里程记录
// 修改0点未结束里程记录
item
.
setEndSpeed
(
v
.
intValue
());
item
.
setEndSpeed
(
v
.
intValue
());
item
.
setEndTime
(
date
);
item
.
setEndTime
(
date
);
item
.
setEndLatitude
(
startLatitude
);
item
.
setEndLatitude
(
startLatitude
);
item
.
setEndLongitude
(
startLongitude
);
item
.
setEndLongitude
(
startLongitude
);
item
.
setEndName
(
address
);
item
.
setEndName
(
address
);
item
.
setTravel
(
new
BigDecimal
(
travel
/
1000
).
setScale
(
1
,
BigDecimal
.
ROUND_HALF_UP
).
doubleValue
());
item
.
setTravel
(
new
BigDecimal
(
travel
/
1000
).
setScale
(
1
,
BigDecimal
.
ROUND_HALF_UP
).
doubleValue
());
item
.
setTakeTime
(
takeTime
);
item
.
setTakeTime
(
takeTime
);
this
.
getBaseMapper
().
updateById
(
item
);
this
.
getBaseMapper
().
updateById
(
item
);
log
.
info
(
"-----------结束里程成功:::"
+
JSONObject
.
toJSONString
(
item
)+
"-----------------"
);
log
.
info
(
"-----------结束里程成功:::"
+
JSONObject
.
toJSONString
(
item
)
+
"-----------------"
);
// // 从0点开启新里程
// // 从0点开启新里程
// item.setStartName(address);
// item.setStartName(address);
// item.setDate(date);
// item.setDate(date);
...
@@ -420,73 +415,100 @@ public class WlCarMileageServiceImpl extends ServiceImpl<WlCarMileageMapper, WlC
...
@@ -420,73 +415,100 @@ public class WlCarMileageServiceImpl extends ServiceImpl<WlCarMileageMapper, WlC
// emqKeeper.getMqttClient().publish(item.getIotCode().substring(0, 8)+"/"+item.getIotCode().substring(8)+"/property",JSON.toJSON(messageMap).toString().getBytes("UTF-8"),1,false);
// emqKeeper.getMqttClient().publish(item.getIotCode().substring(0, 8)+"/"+item.getIotCode().substring(8)+"/property",JSON.toJSON(messageMap).toString().getBytes("UTF-8"),1,false);
// } catch (Exception e) {
// } catch (Exception e) {
// }
// }
//根据iotcode获取车辆并且同步经纬度到车辆
//根据iotcode获取车辆并且同步经纬度到车辆
Car
car
=
iCarService
.
getOne
(
new
QueryWrapper
<
Car
>().
eq
(
"iot_code"
,
item
.
getIotCode
()));
Car
car
=
iCarService
.
getOne
(
new
QueryWrapper
<
Car
>().
eq
(
"iot_code"
,
item
.
getIotCode
()));
car
.
setLongitude
(
startLongitude
);
car
.
setLongitude
(
startLongitude
);
car
.
setLatitude
(
startLatitude
);
car
.
setLatitude
(
startLatitude
);
iCarService
.
saveOrUpdate
(
car
);
iCarService
.
saveOrUpdate
(
car
);
log
.
info
(
"-----------更新车辆坐标成功:::"
+
JSONObject
.
toJSONString
(
item
)+
"-----------------"
);
log
.
info
(
"-----------更新车辆坐标成功:::"
+
JSONObject
.
toJSONString
(
item
)
+
"-----------------"
);
}
}
});
});
log
.
info
(
"轨迹切分任务执行完成.............."
);
log
.
info
(
"轨迹切分任务执行完成.............."
);
// log.info("-------------------对于切割完成的数据进行倒计时操作----------------------------------");
// log.info("-------------------对于切割完成的数据进行倒计时操作----------------------------------");
// ThreadCarMileageTreatment threadCarMileageTreatment = new ThreadCarMileageTreatment(this,iCarService , iotFeign);
// ThreadCarMileageTreatment threadCarMileageTreatment = new ThreadCarMileageTreatment(this,iCarService , iotFeign);
// log.info("-------------------对于切割完成的数据进行倒计时开始----------------------------------");
// log.info("-------------------对于切割完成的数据进行倒计时开始----------------------------------");
// threadCarMileageTreatment.start();
// threadCarMileageTreatment.start();
// log.info("-------------------对于切割完成的数据进行倒计时结束----------------------------------");
// log.info("-------------------对于切割完成的数据进行倒计时结束----------------------------------");
}
}
@Override
public
Boolean
getUncompleteMileagByIotCode
(
String
iotCode
)
{
Integer
integer
=
this
.
count
(
new
QueryWrapper
<
WlCarMileage
>().
select
(
"1"
).
lambda
().
eq
(
WlCarMileage:
:
getIotCode
,
iotCode
).
isNull
(
WlCarMileage:
:
getEndTime
));
return
integer
<=
0
;
}
private
String
getAddress
(
double
longitude
,
double
lantitude
)
{
StringBuilder
api
=
new
StringBuilder
(
GUIDE_ADDRESS_URL
);
api
.
append
(
"key="
).
append
(
GUIDE_KEY
).
append
(
"&location="
).
append
(
longitude
).
append
(
","
).
append
(
lantitude
)
.
append
(
"&radius=1000"
).
append
(
"&batch=false"
).
append
(
"&extensions=base"
).
append
(
"&roadlevel=0"
)
.
append
(
"&batch=false"
);
StringBuilder
res
=
new
StringBuilder
();
BufferedReader
in
=
null
;
try
{
System
.
out
.
println
(
api
.
toString
());
URL
url
=
new
URL
(
api
.
toString
());
HttpURLConnection
conn
=
(
HttpURLConnection
)
url
.
openConnection
();
conn
.
setDoOutput
(
true
);
conn
.
setRequestMethod
(
"POST"
);
in
=
new
BufferedReader
(
new
InputStreamReader
(
conn
.
getInputStream
(),
"UTF-8"
));
String
line
;
while
((
line
=
in
.
readLine
())
!=
null
)
{
res
.
append
(
line
).
append
(
"\n"
);
}
JSONObject
object
=
JSONObject
.
parseObject
(
res
.
toString
());
JSONObject
regeocode
=
object
.
getJSONObject
(
"regeocode"
);
String
address
=
regeocode
.
getString
(
"formatted_address"
);
if
(
"[]"
.
equals
(
address
))
{
address
=
"无效坐标"
;
}
res
=
new
StringBuilder
(
address
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
try
{
if
(
in
!=
null
)
{
in
.
close
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
return
res
.
toString
();
}
@Override
@Override
public
Boolean
getUncompleteMileagByIotCode
(
String
iotCode
)
{
public
Double
getTotalTravelByIotCodeAndDate
(
String
date
,
String
iotCode
)
{
Integer
integer
=
this
.
count
(
new
QueryWrapper
<
WlCarMileage
>().
select
(
"1"
).
lambda
().
eq
(
WlCarMileage:
:
getIotCode
,
iotCode
).
isNull
(
WlCarMileage:
:
getEndTime
));
return
this
.
baseMapper
.
getTotalTravelByIotCodeAndDate
(
date
,
iotCode
);
return
integer
<=
0
;
}
}
private
String
getAddress
(
double
longitude
,
double
lantitude
)
{
@Override
StringBuilder
api
=
new
StringBuilder
(
GUIDE_ADDRESS_URL
);
public
Double
getTotalTravelByIotCodeAndDateProd
(
String
startDate
,
String
endDate
,
String
iotCode
)
{
api
.
append
(
"key="
).
append
(
GUIDE_KEY
).
append
(
"&location="
).
append
(
longitude
).
append
(
","
).
append
(
lantitude
)
return
this
.
baseMapper
.
getTotalTravelByIotCodeAndDateProd
(
startDate
,
endDate
,
iotCode
);
.
append
(
"&radius=1000"
).
append
(
"&batch=false"
).
append
(
"&extensions=base"
).
append
(
"&roadlevel=0"
)
}
.
append
(
"&batch=false"
);
StringBuilder
res
=
new
StringBuilder
();
BufferedReader
in
=
null
;
try
{
System
.
out
.
println
(
api
.
toString
());
URL
url
=
new
URL
(
api
.
toString
());
HttpURLConnection
conn
=
(
HttpURLConnection
)
url
.
openConnection
();
conn
.
setDoOutput
(
true
);
conn
.
setRequestMethod
(
"POST"
);
in
=
new
BufferedReader
(
new
InputStreamReader
(
conn
.
getInputStream
(),
"UTF-8"
));
String
line
;
while
((
line
=
in
.
readLine
())
!=
null
)
{
res
.
append
(
line
).
append
(
"\n"
);
}
JSONObject
object
=
JSONObject
.
parseObject
(
res
.
toString
());
JSONObject
regeocode
=
object
.
getJSONObject
(
"regeocode"
);
String
address
=
regeocode
.
getString
(
"formatted_address"
);
if
(
"[]"
.
equals
(
address
))
{
address
=
"无效坐标"
;
}
res
=
new
StringBuilder
(
address
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
try
{
if
(
in
!=
null
)
{
in
.
close
();
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
return
res
.
toString
();
}
@Override
public
Double
getTotalTravelByIotCodeAndDate
(
String
date
,
String
iotCode
)
{
return
this
.
baseMapper
.
getTotalTravelByIotCodeAndDate
(
date
,
iotCode
);
}
@Override
/**
public
Double
getTotalTravelByIotCodeAndDateProd
(
String
startDate
,
String
endDate
,
String
iotCode
)
{
* @descrip 获取纠偏后数据应该展示的数据
return
this
.
baseMapper
.
getTotalTravelByIotCodeAndDateProd
(
startDate
,
endDate
,
iotCode
);
* @param objects 纠偏下之前的数据
}
* @param startLatitude 纠偏之后的经度
* @param startLongitude 纠偏之后的纬度
* @param index 当前纠偏数据的索引
* @return 当前数据应该展示的速度
*/
public
Double
getSpeedByOriginalData
(
JSONArray
objects
,
Double
startLatitude
,
Double
startLongitude
,
Integer
index
)
{
Double
speed
=
0.0
;
for
(
int
i
=
index
;
i
<
objects
.
size
()
-
1
;
i
++)
{
JSONObject
jsonObject1
=
objects
.
getJSONObject
(
index
);
JSONObject
jsonObject2
=
objects
.
getJSONObject
(
index
+
1
);
Double
travel1
=
CoordinateUtil
.
distance
(
startLatitude
,
startLongitude
,
jsonObject1
.
getDoubleValue
(
"x"
),
jsonObject1
.
getDoubleValue
(
"y"
));
Double
travel2
=
CoordinateUtil
.
distance
(
startLatitude
,
startLongitude
,
jsonObject2
.
getDoubleValue
(
"x"
),
jsonObject2
.
getDoubleValue
(
"y"
));
log
.
info
(
"travel1:"
+
travel1
+
"travel2:"
+
travel2
);
if
(
travel2
>=
travel1
)
{
speed
=
jsonObject1
.
getDoubleValue
(
"sp"
);
break
;
}
else
{
speed
=
jsonObject2
.
getDoubleValue
(
"sp"
);
}
}
return
speed
;
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment