Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
W
wj-datacenter-platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
jinan
wj-datacenter-platform
Commits
0474913b
Commit
0474913b
authored
Jun 27, 2024
by
zhoushiguang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
路况优化
parent
40f2ac9d
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
33 deletions
+35
-33
RidProcessWindow.java
...i/indicators/task/trafficstate/func/RidProcessWindow.java
+35
-33
No files found.
wj-realtime-computing/src/main/java/com/wanji/indicators/task/trafficstate/func/RidProcessWindow.java
View file @
0474913b
...
...
@@ -72,6 +72,8 @@ public class RidProcessWindow extends ProcessWindowFunction<CarTrackModel, LaneT
long
windowEndTs
=
context
.
window
().
getEnd
();
List
<
CarTrackModel
>
list
=
StreamSupport
.
stream
(
elements
.
spliterator
(),
false
).
collect
(
Collectors
.
toList
());
//筛选速度大于1m/s
list
=
list
.
stream
().
filter
(
o
->
o
.
getSpeed
()>
3.6
).
collect
(
Collectors
.
toList
());
//进口车道
// List<CarTrackModel> inLaneList = list.stream().filter(o -> Objects.equals(2, o.getRoadnet().getLaneType())).collect(Collectors.toList());
...
...
@@ -109,30 +111,30 @@ public class RidProcessWindow extends ProcessWindowFunction<CarTrackModel, LaneT
//过滤轨迹覆盖度较低情况
if
(
avgSpeed
>
0
&&
segmentCarSize
>
10
)
{
trafficIndex
=
ArithOfBigDecmial
.
div
(
freeSpeed
,
avgSpeed
);
double
tti
=
0
;
double
ttiFree
=
0
;
Map
<
String
,
List
<
CarTrackModel
>>
groupBy
=
list
.
stream
().
collect
(
Collectors
.
groupingBy
(
o
->
o
.
getRoadnet
().
getSegmentId
()));
Map
<
String
,
Integer
>
segmentList
=
BaseLaneCache
.
getInstance
().
getSegmentLaneNumberMap
();
for
(
Map
.
Entry
<
String
,
Integer
>
entry
:
segmentList
.
entrySet
())
{
List
<
CarTrackModel
>
carlist
=
new
ArrayList
<>()
;
if
(
groupBy
.
containsKey
(
entry
.
getKey
()))
carlist
=
groupBy
.
get
(
entry
.
getKey
());
//渠化段上所有车辆
long
segCarCount
=
carlist
.
stream
().
map
(
o
->
o
.
getId
()).
distinct
().
count
();
//渠化段车辆平均行驶速度
double
avgSpd
=
this
.
getAvgSpeed
(
carlist
,
freeSpeed
);
//渠化段长度
double
length
=
carlist
.
isEmpty
()?
0
:
carlist
.
get
(
0
).
getRoadnet
().
getLaneLength
();
//渠化段ttl计算
double
travelTimeIndex
=
(
length
/
1000
/
avgSpd
)
*
segCarCount
;
double
freeTimeIndex
=
(
length
/
1000
/
freeSpeed
)
*
segCarCount
;;
tti
+=
travelTimeIndex
;
ttiFree
+=
freeTimeIndex
;
}
if
(
ttiFree
>
0
)
{
trafficIndex
=
tti
/
ttiFree
;
}
//
double tti = 0;
//
double ttiFree = 0;
//
Map<String, List<CarTrackModel>> groupBy = list.stream().collect(Collectors.groupingBy(o -> o.getRoadnet().getSegmentId()));
//
Map<String, Integer> segmentList = BaseLaneCache.getInstance().getSegmentLaneNumberMap();
//
for (Map.Entry<String, Integer> entry : segmentList.entrySet()) {
//
List<CarTrackModel> carlist= new ArrayList<>() ;
//
if (groupBy.containsKey(entry.getKey()))
//
carlist = groupBy.get(entry.getKey());
//
//渠化段上所有车辆
//
long segCarCount = carlist.stream().map(o->o.getId()).distinct().count();
//
//渠化段车辆平均行驶速度
//
double avgSpd = this.getAvgSpeed(carlist, freeSpeed);
//
//渠化段长度
//
double length = carlist.isEmpty()?0: carlist.get(0).getRoadnet().getLaneLength();
//
//渠化段ttl计算
//
double travelTimeIndex = (length/1000 / avgSpd) * segCarCount;
//
double freeTimeIndex = (length/1000/freeSpeed) * segCarCount;;
//
//
tti += travelTimeIndex;
//
ttiFree += freeTimeIndex;
//
}
//
if (ttiFree>0) {
//
trafficIndex = tti / ttiFree;
//
}
}
...
...
@@ -168,15 +170,15 @@ public class RidProcessWindow extends ProcessWindowFunction<CarTrackModel, LaneT
}
}
//采用tti判定范围
if
(
trafficIndex
<=
1.35
)
{
trafficState
=
CongestEnum
.
NO_CONGEST
.
getType
();
}
else
if
(
trafficIndex
<
1.55
)
{
trafficState
=
CongestEnum
.
LIGHT_CONGEST
.
getType
();
}
else
if
(
trafficIndex
<
1.85
)
{
trafficState
=
CongestEnum
.
MODERATE_CONGEST
.
getType
();
}
else
{
trafficState
=
CongestEnum
.
HEAVY_CONGEST
.
getType
();
}
//
if (trafficIndex <= 1.35) {
//
trafficState = CongestEnum.NO_CONGEST.getType();
//
} else if (trafficIndex < 1.55) {
//
trafficState = CongestEnum.LIGHT_CONGEST.getType();
//
} else if (trafficIndex < 1.85) {
//
trafficState = CongestEnum.MODERATE_CONGEST.getType();
//
} else {
//
trafficState = CongestEnum.HEAVY_CONGEST.getType();
//
}
LaneTrafficStateResult
outModel
=
new
LaneTrafficStateResult
();
outModel
.
setId
(
"Rid_Traffic_State"
);
...
...
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