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
6c992aae
Commit
6c992aae
authored
Mar 22, 2024
by
zhoushiguang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
基于轨迹计算周期转向流量
parent
ebdb551f
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
693 additions
and
33 deletions
+693
-33
TurnIndicatorData.java
...n/java/com/wanji/indicators/entity/TurnIndicatorData.java
+38
-0
TurnIndicatorsDataMapper.java
...com/wanji/indicators/mapper/TurnIndicatorsDataMapper.java
+17
-0
CrossTurnIndicatorMainNew.java
...cators/task/turnIndicators/CrossTurnIndicatorMainNew.java
+188
-0
TurnDataPeriodProcessWindow.java
...task/turnIndicators/func/TurnDataPeriodProcessWindow.java
+93
-0
TurnDataProcessWindow.java
...ators/task/turnIndicators/func/TurnDataProcessWindow.java
+118
-0
CrossTurnResultModel.java
...ators/task/turnIndicators/model/CrossTurnResultModel.java
+28
-0
TurnResultModel.java
...indicators/task/turnIndicators/model/TurnResultModel.java
+24
-0
TurnIndicationSinkFunction.java
.../task/turnIndicators/sink/TurnIndicationSinkFunction.java
+71
-0
config.properties
wj-realtime-computing/src/main/resources/config.properties
+1
-1
config_dev.properties
...altime-computing/src/main/resources/config_dev.properties
+31
-31
cross_exit_info.data
...omputing/src/main/resources/data/dev/cross_exit_info.data
+0
-0
gis-aqd.geojson
...ime-computing/src/main/resources/data/dev/gis-aqd.geojson
+18
-0
gis-rxhd.geojson
...me-computing/src/main/resources/data/dev/gis-rxhd.geojson
+17
-0
TurnIndicatorsDataMapper.xml
...ng/src/main/resources/mapper/TurnIndicatorsDataMapper.xml
+48
-0
spring-mybatis.xml
wj-realtime-computing/src/main/resources/spring-mybatis.xml
+1
-1
No files found.
wj-realtime-computing/src/main/java/com/wanji/indicators/entity/TurnIndicatorData.java
0 → 100644
View file @
6c992aae
package
com
.
wanji
.
indicators
.
entity
;
import
com.fasterxml.jackson.annotation.JsonProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.ToString
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.Date
;
import
java.util.List
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ToString
public
class
TurnIndicatorData
implements
Serializable
{
private
String
crossId
;
@JsonProperty
(
"fRid"
)
private
String
fRid
;
@JsonProperty
(
"fRidDir"
)
private
Integer
fRidDir
;
@JsonProperty
(
"tRid"
)
private
String
tRid
;
private
int
turnDirNo
;
private
int
flow
;
private
double
speed
;
private
Date
windowStartTime
;
private
Date
windowEndTime
;
private
String
granularity
;
private
Integer
dt
;
}
wj-realtime-computing/src/main/java/com/wanji/indicators/mapper/TurnIndicatorsDataMapper.java
0 → 100644
View file @
6c992aae
package
com
.
wanji
.
indicators
.
mapper
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
com.wanji.indicators.entity.CrossStateData
;
import
com.wanji.indicators.entity.TurnIndicatorData
;
import
java.util.List
;
public
interface
TurnIndicatorsDataMapper
extends
BaseMapper
<
TurnIndicatorData
>{
/**
* 批量保存
*/
void
batchInsert
(
List
<
TurnIndicatorData
>
list
);
}
wj-realtime-computing/src/main/java/com/wanji/indicators/task/turnIndicators/CrossTurnIndicatorMainNew.java
0 → 100644
View file @
6c992aae
This diff is collapsed.
Click to expand it.
wj-realtime-computing/src/main/java/com/wanji/indicators/task/turnIndicators/func/TurnDataPeriodProcessWindow.java
0 → 100644
View file @
6c992aae
package
com
.
wanji
.
indicators
.
task
.
turnIndicators
.
func
;
import
com.wanji.indicators.constant.TimeGranularityEnum
;
import
com.wanji.indicators.entity.BaseCrossTurnInfo
;
import
com.wanji.indicators.model.CarTrackModel
;
import
com.wanji.indicators.model.CrossFrameModel
;
import
com.wanji.indicators.task.turnIndicators.model.CrossTurnResultModel
;
import
com.wanji.indicators.task.turnIndicators.model.TurnResultModel
;
import
com.wanji.indicators.util.DateUtil
;
import
org.apache.flink.configuration.Configuration
;
import
org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction
;
import
org.apache.flink.streaming.api.windowing.windows.TimeWindow
;
import
org.apache.flink.util.Collector
;
import
org.joda.time.DateTime
;
import
org.joda.time.DateTimeUtils
;
import
org.joda.time.Minutes
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
import
java.util.stream.StreamSupport
;
/**
* @author fengyi
* @date 2023/4/6
* @description
*/
public
class
TurnDataPeriodProcessWindow
extends
ProcessWindowFunction
<
CrossTurnResultModel
,
CrossTurnResultModel
,
String
,
TimeWindow
>
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
TurnDataPeriodProcessWindow
.
class
);
@Override
public
void
open
(
Configuration
parameters
)
{
//mapState = getRuntimeContext().getMapState(new MapStateDescriptor<>("mapStateAccident_Area_Indicators", String.class, CarTrackModel.class));
}
@Override
public
void
process
(
String
groupKey
,
Context
context
,
Iterable
<
CrossTurnResultModel
>
elements
,
Collector
<
CrossTurnResultModel
>
out
)
throws
Exception
{
List
<
CrossTurnResultModel
>
list
=
StreamSupport
.
stream
(
elements
.
spliterator
(),
false
).
collect
(
Collectors
.
toList
());
//=====================================================================================//
long
windowStartTime
=
context
.
window
().
getStart
();
long
windowEndTime
=
context
.
window
().
getEnd
();
DateTime
startDateTime
=
new
DateTime
(
windowStartTime
);
DateTime
endDateTime
=
new
DateTime
(
windowEndTime
);
int
minute
=
Minutes
.
minutesBetween
(
startDateTime
,
endDateTime
).
getMinutes
();
String
granularity
=
minute
+
"m"
;
if
(
minute
==
60
)
{
granularity
=
"1h"
;
}
String
startTime
=
DateUtil
.
toDateTime
(
windowStartTime
,
DateUtil
.
YYYY_MM_DD_HH_MM_SS
);
String
endTime
=
DateUtil
.
toDateTime
(
windowEndTime
,
DateUtil
.
YYYY_MM_DD_HH_MM_SS
);
List
<
TurnResultModel
>
turnDataList
=
new
ArrayList
<>();
CrossTurnResultModel
outModel
=
null
;
for
(
CrossTurnResultModel
model
:
list
)
{
turnDataList
.
addAll
(
model
.
getTurnDataList
());
outModel
=
model
;
}
Map
<
String
,
List
<
TurnResultModel
>>
group
=
turnDataList
.
stream
().
collect
(
Collectors
.
groupingBy
(
o
->
o
.
getInRid
()
+
"_"
+
o
.
getTurnDirNo
()));
List
<
TurnResultModel
>
aggList
=
new
ArrayList
<>();
for
(
Map
.
Entry
<
String
,
List
<
TurnResultModel
>>
entry
:
group
.
entrySet
())
{
List
<
TurnResultModel
>
value
=
entry
.
getValue
();
TurnResultModel
result
=
value
.
get
(
0
);
int
flow
=
value
.
stream
().
mapToInt
(
o
->
o
.
getFlow
()).
sum
();
double
speed
=
value
.
stream
().
mapToDouble
(
o
->
o
.
getSpeed
()).
average
().
orElse
(
0
);
result
.
setFlow
(
flow
);
result
.
setSpeed
(
speed
);
aggList
.
add
(
result
);
}
outModel
.
setStartTime
(
startTime
);
outModel
.
setEndTime
(
endTime
);
outModel
.
setTimestamp
(
windowStartTime
);
outModel
.
setGranularity
(
granularity
);
outModel
.
setTurnDataList
(
aggList
);
out
.
collect
(
outModel
);
}
}
wj-realtime-computing/src/main/java/com/wanji/indicators/task/turnIndicators/func/TurnDataProcessWindow.java
0 → 100644
View file @
6c992aae
package
com
.
wanji
.
indicators
.
task
.
turnIndicators
.
func
;
import
com.wanji.indicators.constant.TimeGranularityEnum
;
import
com.wanji.indicators.entity.BaseCrossTurnInfo
;
import
com.wanji.indicators.model.CarTrackModel
;
import
com.wanji.indicators.model.CrossFrameModel
;
import
com.wanji.indicators.task.turnIndicators.model.CrossTurnResultModel
;
import
com.wanji.indicators.task.turnIndicators.model.TurnResultModel
;
import
com.wanji.indicators.util.DateUtil
;
import
org.apache.flink.configuration.Configuration
;
import
org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction
;
import
org.apache.flink.streaming.api.windowing.windows.TimeWindow
;
import
org.apache.flink.util.Collector
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.util.ArrayList
;
import
java.util.Comparator
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
import
java.util.stream.StreamSupport
;
/**
* @author fengyi
* @date 2023/4/6
* @description
*/
public
class
TurnDataProcessWindow
extends
ProcessWindowFunction
<
CrossFrameModel
,
CrossTurnResultModel
,
String
,
TimeWindow
>
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
TurnDataProcessWindow
.
class
);
@Override
public
void
open
(
Configuration
parameters
)
{
//mapState = getRuntimeContext().getMapState(new MapStateDescriptor<>("mapStateAccident_Area_Indicators", String.class, CarTrackModel.class));
}
@Override
public
void
process
(
String
groupKey
,
Context
context
,
Iterable
<
CrossFrameModel
>
elements
,
Collector
<
CrossTurnResultModel
>
out
)
throws
Exception
{
List
<
CrossFrameModel
>
list
=
StreamSupport
.
stream
(
elements
.
spliterator
(),
false
).
collect
(
Collectors
.
toList
());
List
<
CarTrackModel
>
trackList
=
new
ArrayList
<>();
for
(
CrossFrameModel
crossFrameModel
:
list
)
{
trackList
.
addAll
(
crossFrameModel
.
getTrackList
());
}
Map
<
Integer
,
List
<
CarTrackModel
>>
groupById
=
trackList
.
stream
().
collect
(
Collectors
.
groupingBy
(
o
->
o
.
getId
()));
//=====================================================================================//
long
windowStartTime
=
context
.
window
().
getStart
();
long
windowEndTime
=
context
.
window
().
getEnd
();
String
startTime
=
DateUtil
.
toDateTime
(
windowStartTime
,
DateUtil
.
YYYY_MM_DD_HH_MM_SS
);
String
endTime
=
DateUtil
.
toDateTime
(
windowEndTime
,
DateUtil
.
YYYY_MM_DD_HH_MM_SS
);
Map
<
String
,
TurnResultModel
>
turnResultModelMap
=
new
HashMap
<>();
//检测每辆车从哪个进口道驶入路口,而后进入到出口道时,作为转向的一个流量
for
(
Map
.
Entry
<
Integer
,
List
<
CarTrackModel
>>
entry
:
groupById
.
entrySet
())
{
List
<
CarTrackModel
>
value
=
entry
.
getValue
();
value
=
value
.
stream
().
sorted
(
Comparator
.
comparing
(
o
->
o
.
getGlobalTimeStamp
())).
collect
(
Collectors
.
toList
());
CarTrackModel
tmp
=
null
;
for
(
CarTrackModel
model
:
value
)
{
String
rid
=
model
.
getRoadnet
().
getRid
();
Integer
type
=
model
.
getRoadnet
().
getLaneType
();
if
(
tmp
!=
null
&&
Objects
.
equals
(
tmp
.
getRoadnet
().
getLaneType
(),
2
)
&&
Objects
.
equals
(
type
,
3
))
{
//从路口范围进入到出口道
String
inRid
=
tmp
.
getRoadnet
().
getRid
();
String
outRid
=
rid
;
Integer
turn
=
tmp
.
getCarTurn
();
List
<
BaseCrossTurnInfo
>
turnList
=
model
.
getRoadnet
().
getTurnRelationList
();
if
(
turnList
!=
null
)
{
Optional
<
BaseCrossTurnInfo
>
optional
=
turnList
.
stream
().
filter
(
o
->
o
.
getInRid
().
equals
(
inRid
)).
findFirst
();
if
(
optional
.
isPresent
())
{
String
turnType
=
optional
.
get
().
getTurnType
();
turn
=
Integer
.
valueOf
(
turnType
);
}
}
//进口道+转向
String
key
=
inRid
+
"_"
+
turn
;
// if (key.equals("13NF80B5QN013NGH0B5RC00_1")){
// System.out.println();
// }
TurnResultModel
resultModel
=
turnResultModelMap
.
get
(
key
);
if
(
resultModel
==
null
)
{
resultModel
=
new
TurnResultModel
();
}
resultModel
.
setInRid
(
tmp
.
getRoadnet
().
getRid
());
resultModel
.
setInRidDir
(
tmp
.
getRoadnet
().
getRidDir8
());
resultModel
.
setOutRid
(
outRid
);
resultModel
.
setTurnDirNo
(
turn
);
resultModel
.
setFlow
(
resultModel
.
getFlow
()+
1
);
resultModel
.
setSpeed
((
resultModel
.
getSpeed
()+
model
.
getSpeed
())/
resultModel
.
getFlow
());
resultModel
.
getTrackIdList
().
add
(
entry
.
getKey
());
turnResultModelMap
.
put
(
key
,
resultModel
);
break
;
}
tmp
=
model
;
}
}
//输出转向流量
List
<
TurnResultModel
>
outList
=
new
ArrayList
<>(
turnResultModelMap
.
values
());
if
(!
list
.
isEmpty
())
{
CrossTurnResultModel
crossTurnResultModel
=
new
CrossTurnResultModel
();
crossTurnResultModel
.
setStartTime
(
startTime
);
crossTurnResultModel
.
setEndTime
(
endTime
);
crossTurnResultModel
.
setTimestamp
(
context
.
window
().
getStart
());
crossTurnResultModel
.
setCrossId
(
groupKey
);
crossTurnResultModel
.
setTurnDataList
(
outList
);
crossTurnResultModel
.
setGranularity
(
TimeGranularityEnum
.
FIVE_MINUTE
.
getType
());
out
.
collect
(
crossTurnResultModel
);
}
}
}
wj-realtime-computing/src/main/java/com/wanji/indicators/task/turnIndicators/model/CrossTurnResultModel.java
0 → 100644
View file @
6c992aae
package
com
.
wanji
.
indicators
.
task
.
turnIndicators
.
model
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.ToString
;
import
java.io.Serializable
;
import
java.util.List
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ToString
public
class
CrossTurnResultModel
implements
Serializable
{
private
String
crossId
;
//周期开始时间
private
String
startTime
;
//周期截止时间
private
String
endTime
;
private
Long
timestamp
;
private
List
<
TurnResultModel
>
turnDataList
;
private
String
granularity
;
}
wj-realtime-computing/src/main/java/com/wanji/indicators/task/turnIndicators/model/TurnResultModel.java
0 → 100644
View file @
6c992aae
package
com
.
wanji
.
indicators
.
task
.
turnIndicators
.
model
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.ToString
;
import
java.io.Serializable
;
import
java.util.ArrayList
;
import
java.util.List
;
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@ToString
public
class
TurnResultModel
implements
Serializable
{
private
String
inRid
;
private
Integer
inRidDir
;
private
String
outRid
;
private
int
turnDirNo
;
private
int
flow
;
private
double
speed
;
private
List
<
Integer
>
trackIdList
=
new
ArrayList
<>();
}
wj-realtime-computing/src/main/java/com/wanji/indicators/task/turnIndicators/sink/TurnIndicationSinkFunction.java
0 → 100644
View file @
6c992aae
package
com
.
wanji
.
indicators
.
task
.
turnIndicators
.
sink
;
import
com.wanji.indicators.constant.TimeGranularityEnum
;
import
com.wanji.indicators.entity.CrossStateData
;
import
com.wanji.indicators.entity.TurnIndicatorData
;
import
com.wanji.indicators.mapper.TurnIndicatorsDataMapper
;
import
com.wanji.indicators.service.CrossStateDataService
;
import
com.wanji.indicators.service.impl.CrossStateDataServiceImpl
;
import
com.wanji.indicators.task.turnIndicators.model.CrossTurnResultModel
;
import
com.wanji.indicators.task.turnIndicators.model.TurnResultModel
;
import
com.wanji.indicators.util.DateUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.flink.configuration.Configuration
;
import
org.apache.flink.streaming.api.functions.sink.RichSinkFunction
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.support.ClassPathXmlApplicationContext
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* @author fengyi
* @date 2024/1/23
* @description
*/
@Slf4j
public
class
TurnIndicationSinkFunction
extends
RichSinkFunction
<
CrossTurnResultModel
>
{
TurnIndicatorsDataMapper
turnIndicatorsDataMapper
;
@Override
public
void
open
(
Configuration
parameters
)
throws
Exception
{
super
.
open
(
parameters
);
ApplicationContext
beanConf
=
new
ClassPathXmlApplicationContext
(
"spring-container.xml"
);
turnIndicatorsDataMapper
=
beanConf
.
getBean
(
TurnIndicatorsDataMapper
.
class
);
}
@Override
public
void
invoke
(
CrossTurnResultModel
value
,
Context
context
)
throws
Exception
{
try
{
List
<
TurnResultModel
>
turnDataList
=
value
.
getTurnDataList
();
List
<
TurnIndicatorData
>
outDataList
=
new
ArrayList
<>();
for
(
TurnResultModel
model
:
turnDataList
)
{
TurnIndicatorData
data
=
new
TurnIndicatorData
();
data
.
setCrossId
(
value
.
getCrossId
());
data
.
setFRid
(
model
.
getInRid
());
data
.
setFRidDir
(
model
.
getInRidDir
());
data
.
setTRid
(
model
.
getOutRid
());
data
.
setTurnDirNo
(
model
.
getTurnDirNo
());
data
.
setGranularity
(
value
.
getGranularity
());
data
.
setWindowStartTime
(
DateUtil
.
stringToDate
(
value
.
getStartTime
(),
"yyyy-MM-dd HH:mm:ss"
));
data
.
setWindowEndTime
(
DateUtil
.
stringToDate
(
value
.
getEndTime
(),
"yyyy-MM-dd HH:mm:ss"
));
data
.
setFlow
(
model
.
getFlow
());
data
.
setSpeed
(
model
.
getSpeed
());
String
dt
=
value
.
getStartTime
().
substring
(
0
,
value
.
getStartTime
().
indexOf
(
" "
));
dt
=
dt
.
replaceAll
(
"-"
,
""
);
data
.
setDt
(
Integer
.
valueOf
(
dt
));
outDataList
.
add
(
data
);
}
turnIndicatorsDataMapper
.
batchInsert
(
outDataList
);
}
catch
(
Exception
e
)
{
log
.
error
(
this
.
getClass
().
getName
()
+
".invoke()执行失败"
,
e
);
}
}
}
wj-realtime-computing/src/main/resources/config.properties
View file @
6c992aae
config_name
=
config_mz.properties
\ No newline at end of file
config_name
=
config_dev.properties
\ No newline at end of file
wj-realtime-computing/src/main/resources/config_dev.properties
View file @
6c992aae
#
本地文件数据目录路径
data.file.path
=
/data/
jinan
/
#
\u672C\u5730\u6587\u4EF6\u6570\u636E\u76EE\u5F55\u8DEF\u5F84
data.file.path
=
/data/
dev
/
#kafka settings kafka1:9092,kafka2:9092,kafka3:9092 192.168.11.102:9092
#bootstrap.servers=10.102.1.182:9092
...
...
@@ -23,7 +23,7 @@ elasticsearch.server=10.102.1.182:9200
elasticsearch.username
=
elastic
elasticsearch.password
=
Wanji300552
#redis
配置
#redis
\u914D\u7F6E
#redis.host=10.102.1.182
redis.host
=
10.102.1.182
redis.password
=
Wanji300552
...
...
@@ -35,74 +35,74 @@ check.point.uri=file:///data/projects/savepoint
alarm.feishu.url
=
https://open.feishu.cn/open-apis/bot/v2/hook/0840f036-299e-4595-8a34-dea1c4ba6942
signal.status.url
=
ws://37.12.182.29:9000/utc/signalStatus/{crossId},stateMonitor
#
区域路口列表
#
\u533A\u57DF\u8DEF\u53E3\u5217\u8868
full.area.cross.list
=
13NI00B5RM0,13NGH0B5RC0,13NF80B5QN0,13NID0B5RM0
#
区域指标分析数据
#
\u533A\u57DF\u6307\u6807\u5206\u6790\u6570\u636E
area.analysis.data.topic
=
analysis.area.indicators
#
路段参与者影响分析
#
\u8DEF\u6BB5\u53C2\u4E0E\u8005\u5F71\u54CD\u5206\u6790
rid.participant.analysis.data.topic
=
analysis.participant.effect
#
事件监测数据
#
\u4E8B\u4EF6\u76D1\u6D4B\u6570\u636E
cross.event.data.topic
=
analysis.cross.event
#
车牌开头地区简写
plate.prefix
=
鲁
#
路段默认自由流速度配置值
km/h
#
\u8F66\u724C\u5F00\u5934\u5730\u533A\u7B80\u5199
plate.prefix
=
\u
9C81
#
\u8DEF\u6BB5\u9ED8\u8BA4\u81EA\u7531\u6D41\u901F\u5EA6\u914D\u7F6E\u503C
km/h
rid.default.free.speed
=
80
#
方向级别拥堵数据
#
\u65B9\u5411\u7EA7\u522B\u62E5\u5835\u6570\u636E
dir.congestion.index.topic
=
dir.congestion.index
#
路口事件数据
#
\u8DEF\u53E3\u4E8B\u4EF6\u6570\u636E
cross.event.index.topic
=
cross.event.index
#
非协调方向饱和度计算
#
\u975E\u534F\u8C03\u65B9\u5411\u9971\u548C\u5EA6\u8BA1\u7B97
rid.traffic.index.north.south.topic
=
rid.traffic.index.north.south.analysis
# rid
和终点路口进口方向
# rid
\u548C\u7EC8\u70B9\u8DEF\u53E3\u8FDB\u53E3\u65B9\u5411
rid.end.indir.list
=
13NED0B5Q9013NF80B5QN00:6,13NGH0B5RC013NF80B5QN00:2,13NI00B5RM013NGH0B5RC00:3,13NF80B5QN013NGH0B5RC00:6,13NGH0B5RC013NI00B5RM00:7,13NI00B5RM013NID0B5RM00:3,13NG40B5SK013NI00B5RM00:1,13NEH0B5RJ013NGH0B5RC00:1,13NEP0B5QJ013NGH0B5RC00:5,13NDG0B5RI013NF80B5QN00:1,13NDT0B5Q9013NF80B5QN00:4
# rid
和起点路口出口方向
# rid
\u548C\u8D77\u70B9\u8DEF\u53E3\u51FA\u53E3\u65B9\u5411
rid.start.outdir.list
=
13NF80B5QN013NED0B5Q900:6,13NF80B5QN013NGH0B5RC00:2,13NGH0B5RC013NI00B5RM00:3,13NGH0B5RC013NF80B5QN00:6,13NI00B5RM013NGH0B5RC00:7,13NI00B5RM013NID0B5RM00:3,13NI00B5RM013NG40B5SK00:1,13NGH0B5RC013NEH0B5RJ00:1,13NGH0B5RC013NEP0B5QJ00:5,13NF80B5QN013NDG0B5RI00:1,13NF80B5QN013NDT0B5Q900:4
#
路口ID-方向-转向对应的行人灯通过时长
#
\u8DEF\u53E3ID-\u65B9\u5411-\u8F6C\u5411\u5BF9\u5E94\u7684\u884C\u4EBA\u706F\u901A\u8FC7\u65F6\u957F
cross.dir.turn.ped.green
=
13NF80B5QN0-1-2:20,13NF80B5QN0-2-2:15,13NF80B5QN0-4-2:20,13NF80B5QN0-6-2:15,13NGH0B5RC0-1-2:30,13NGH0B5RC0-3-2:30,13NGH0B5RC0-5-2:30,13NGH0B5RC0-6-2:25,13NI00B5RM0-3-2:30,13NI00B5RM0-7-2:30,13NI00B5RM0-1-1:30
#
路口溢出评价指标
#
\u8DEF\u53E3\u6EA2\u51FA\u8BC4\u4EF7\u6307\u6807
road.overflow.avg.speed
=
5.0
road.overflow.duration
=
3000
road.overflow.deadlock.index.analysis.topic
=
crossroad.overflow.deadlock.index.analysis
#
路口失衡
topic
#
\u8DEF\u53E3\u5931\u8861
topic
road.unbalance.index.analysis.topic
=
road.unbalance.index.analysis
#
死锁评价指标
#
\u6B7B\u9501\u8BC4\u4EF7\u6307\u6807
cross.road.deadlock.car.number
=
10
cross.road.deadlock.avg.speed
=
5.0
#
相位灯的状态数据
#
\u76F8\u4F4D\u706F\u7684\u72B6\u6001\u6570\u636E
light.status.topic
=
cross_lights_status
#
虚拟路口区域
#
霞景路西,旅游路与回龙山路交叉口
#
\u865A\u62DF\u8DEF\u53E3\u533A\u57DF
#
\u971E\u666F\u8DEF\u897F\uFF0C\u65C5\u6E38\u8DEF\u4E0E\u56DE\u9F99\u5C71\u8DEF\u4EA4\u53C9\u53E3
virtual.crossroad1
=
13NED0B5Q90:117.08539278781757,36.641443918825374;117.08520035148655,36.64165623069265;117.08554192597296,36.641860821574866;117.08574398412043,36.64165623069265;117.08539278781757,36.641443918825374
#
福地街东,旅游路与隧道交叉口
#
\u798F\u5730\u8857\u4E1C\uFF0C\u65C5\u6E38\u8DEF\u4E0E\u96A7\u9053\u4EA4\u53C9\u53E3
virtual.crossroad2
=
13NH20B5RH0:117.09669255282627,36.644871615002884;117.09669985552095,36.645055610398025;117.09675474612689,36.64505324101935;117.09674606214631,36.64486930675771
#
相位空放
topic
#
\u76F8\u4F4D\u7A7A\u653E
topic
phase.emptiness.topic
=
phase.emptiness.analysis
#
无车牌默认车牌
default.plate.number
=
鲁
A00000
#
\u65E0\u8F66\u724C\u9ED8\u8BA4\u8F66\u724C
default.plate.number
=
\u
9C81
A00000
#
路段自由流时间
#
\u8DEF\u6BB5\u81EA\u7531\u6D41\u65F6\u95F4
rid.free.time
=
13NED0B5Q9013NF80B5QN00:5.0,13NF80B5QN013NGH0B5RC00:45.0,13NGH0B5RC013NI00B5RM00:29.0,13NI00B5RM013NID0B5RM00:35.0,13NID0B5RM013NH20B5RH00:4.4,13NH20B5RH013NID0B5RM00:4.4,13NID0B5RM013NI00B5RM00:5.0,13NI00B5RM013NGH0B5RC00:45.0,13NGH0B5RC013NF80B5QN00:26.0,13NF80B5QN013NED0B5Q900:5.0
#
方向车道数量
#
\u65B9\u5411\u8F66\u9053\u6570\u91CF
dir.lane.counts
=
13NF80B5QN0-1:1,13NF80B5QN0-2:3,13NF80B5QN0-4:1,13NF80B5QN0-6:3,13NGH0B5RC0-1:4,13NGH0B5RC0-3:4,13NGH0B5RC0-5:3,13NGH0B5RC0-6:4,13NI00B5RM0-1:3,13NI00B5RM0-3:3,13NI00B5RM0-7:4
#
路口方向
#
\u8DEF\u53E3\u65B9\u5411
cross.dirs
=
13NF80B5QN0:13NF80B5QN0-1,13NF80B5QN0-2,13NF80B5QN0-4,13NF80B5QN0-6;13NGH0B5RC0:13NGH0B5RC0-1,13NGH0B5RC0-3,13NGH0B5RC0-5,13NGH0B5RC0-6;13NI00B5RM0:13NI00B5RM0-1,13NI00B5RM0-3,13NI00B5RM0-7
#
忽略的路口
#
\u5FFD\u7565\u7684\u8DEF\u53E3
ignore.crosses
=
13NID0B5RM0
# MySQL IP
mysql.ip
=
37.12.182.29
# MySQL
数据库名
# MySQL
\u6570\u636E\u5E93\u540D
mysql.db.name
=
holo_roadnet
\ No newline at end of file
wj-realtime-computing/src/main/resources/data/dev/cross_exit_info.data
0 → 100644
View file @
6c992aae
wj-realtime-computing/src/main/resources/data/dev/gis-aqd.geojson
0 → 100644
View file @
6c992aae
{
"type": "FeatureCollection",
"name": "安全岛",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{"id":"49b0aa9f7f85f2ca1a990ef4d01a42b9","type":"Feature","properties":{"lkid": "13NI00B5RM0", "ldid": "13NG40B5SK013NI00B5RM00"},"geometry":{"coordinates":[[[117.09447779600657,36.64512094949285],[117.09445163823682,36.64507413092623],[117.0944248097527,36.64503646079385],[117.09439529842194,36.64502569789569],[117.09434633643934,36.645075207215584],[117.09439663984665,36.645139784540405],[117.09447779600657,36.64512094949285]]],"type":"Polygon"}},
{"id":"c5f29f79663b5fa998aa4357418025ea","type":"Feature","properties":{"lkid": "13NI00B5RM0", "ldid": "13NID0B5RM013NI00B5RM00"},"geometry":{"coordinates":[[[117.0948122252484,36.64516327013719],[117.0948249620765,36.645131267398256],[117.09483836925904,36.645100340382115],[117.09483568782184,36.645061614354034],[117.09491143842183,36.64505784932226],[117.09492752704534,36.64515681580525],[117.0948122252484,36.64516327013719]]],"type":"Polygon"}},
{"id":"eeed8dd0893d9d18bdf2455d0f07744f","type":"Feature","properties":{"lkid": "13NI00B5RM0", "ldid": "13NI00B5RM0XXXXXXXXXXX0"},"geometry":{"coordinates":[[[117.09478911481517,36.64486851191566],[117.0949080500709,36.64487112637444],[117.09489827457139,36.64474432502925],[117.09478911481517,36.64474301779774],[117.09478911481517,36.64486851191566]]],"type":"Polygon"}},
{"id":"4c7e4c538b02ea1f613ecfcb76f5af1d","type":"Feature","properties":{"lkid": "13NGH0B5RC0", "ldid": "13NEH0B5RJ013NGH0B5RC00"},"geometry":{"coordinates":[[[117.08972162767253,36.64416743809616],[117.08972296839113,36.64412924946721],[117.08974307917055,36.64404856920274],[117.08965660282394,36.644014145597254],[117.08958822617637,36.644131938808044],[117.08972162767253,36.64416743809616]]],"type":"Polygon"}},
{"id":"98feaf1a0c70c97390b3294cbece9390","type":"Feature","properties":{"lkid": "13NGH0B5RC0", "ldid": "13NI00B5RM013NGH0B5RC00"},"geometry":{"coordinates":[[[117.09005326091705,36.6442736740141],[117.0900834429608,36.6442349271894],[117.09009685720224,36.64420317630524],[117.09013877670682,36.644197525722326],[117.0901780133621,36.64419618034579],[117.09019679330089,36.644284437017376],[117.09005326091705,36.6442736740141]]],"type":"Polygon"}},
{"id":"2da5b183cf707fab493533574738a944","type":"Feature","properties":{"lkid": "13NGH0B5RC0", "ldid": "13NEP0B5QJ013NGH0B5RC00"},"geometry":{"coordinates":[[[117.090234843894,36.644005658941225],[117.09018990618546,36.64396260676327],[117.09015704129371,36.643891032463515],[117.09031734147857,36.64387596418145],[117.090234843894,36.644005658941225]]],"type":"Polygon"}},
{"id":"55c96056875c08ffd29c2d1fbc1edc4f","type":"Feature","properties":{"lkid": "13NGH0B5RC0", "ldid": "13NF80B5QN013NGH0B5RC00"},"geometry":{"coordinates":[[[117.08974117233481,36.643845535735764],[117.08978879289128,36.643855222492206],[117.08982434063108,36.64384715019493],[117.08986458335522,36.64381916622452],[117.08989946038338,36.64379064409012],[117.08976800081757,36.64375996932975],[117.08974117233481,36.643845535735764]]],"type":"Polygon"}},
{"id":"a1467a690a95b1d85d953e78ea2c1660","type":"Feature","properties":{"lkid": "13NF80B5QN0", "ldid": "13NDG0B5RI013NF80B5QN00"},"geometry":{"coordinates":[[[117.08577465910946,36.64204262077793],[117.08579209762354,36.64200118200064],[117.08579746331947,36.641969968361636],[117.08575118418634,36.641936602043614],[117.08569685650917,36.64200064383432],[117.08577465910946,36.64204262077793]]],"type":"Polygon"}},
{"id":"d37dd14ac611e33fa428025793c49236","type":"Feature","properties":{"lkid": "13NF80B5QN0", "ldid": "13NGH0B5RC013NF80B5QN00"},"geometry":{"coordinates":[[[117.08586181936806,36.64212390948036],[117.08588127001849,36.642087314236534],[117.08590809850119,36.6420668639456],[117.0859765111328,36.642094310387506],[117.08593224413596,36.64215566122219],[117.08586181936806,36.64212390948036]]],"type":"Polygon"}},
{"id":"efffedf794aa26a47d0b6a34d31e0740","type":"Feature","properties":{"lkid": "13NF80B5QN0", "ldid": "13NDT0B5Q9013NF80B5QN00"},"geometry":{"coordinates":[[[117.08610595856572,36.641937166144345],[117.08605766729619,36.64189734181086],[117.08606236228059,36.641851597618924],[117.08618107831796,36.64187527696852],[117.08610595856572,36.641937166144345]]],"type":"Polygon"}},
{"id":"6f7a9c1c2794c1c035ba526e86bf5127","type":"Feature","properties":{"lkid": "13NF80B5QN0", "ldid": "13NED0B5Q9013NF80B5QN00"},"geometry":{"coordinates":[[[117.0858256009405,36.641755803942175],[117.08587657505797,36.641785941332884],[117.08590675710172,36.641785941332884],[117.0859510240985,36.641749884096555],[117.08588395289166,36.64169445278907],[117.0858256009405,36.641755803942175]]],"type":"Polygon"}}
]
}
wj-realtime-computing/src/main/resources/data/dev/gis-rxhd.geojson
0 → 100644
View file @
6c992aae
{
"type": "FeatureCollection",
"name": "人行横道面",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": [
{"id":"4c99368c3f3d7b0704bf47f0fa97963c","type":"Feature","properties":{ "lkid": "13NI00B5RM0", "ldid": "13NG40B5SK013NI00B5RM00"},"geometry":{"coordinates":[[[117.09445767469771,36.64509888559614],[117.09445096757702,36.64505421959497],[117.094835285594,36.64507466909251],[117.09483394417066,36.64512094951424],[117.09445767469771,36.64509888559614]]],"type":"Polygon"}},
{"id":"e72686e60b998b875a32dfd077f2865f","type":"Feature","properties":{"lkid": "13NI00B5RM0", "ldid": "13NID0B5RM013NI00B5RM00"},"geometry":{"coordinates":[[[117.0948082022116,36.64505458796779],[117.09488060101268,36.64505942872276],[117.09487724921598,36.64487924485124],[117.09479881718119,36.64487547981112],[117.0948082022116,36.64505458796779]]],"type":"Polygon"}},
{"id":"b47e7d5c58b6457243e32ac895925e9d","type":"Feature","properties":{"lkid": "13NGH0B5RC0", "ldid": "13NEH0B5RJ013NGH0B5RC00"},"geometry":{"coordinates":[[[117.08972497789023,36.64413893088346],[117.08974240722995,36.64408084110846],[117.09009032369909,36.6441889525987],[117.09007021291967,36.64424596655698],[117.08972497789023,36.64413893088346]]],"type":"Polygon"}},
{"id":"6cd394b0199fbd31210ba2bfef580c7e","type":"Feature","properties":{"lkid": "13NGH0B5RC0", "ldid": "13NI00B5RM013NGH0B5RC00"},"geometry":{"coordinates":[[[117.09008947947598,36.64418703177006],[117.09015252641018,36.64420048553903],[117.09022898758712,36.64399544984329],[117.09016057495558,36.643976614515864],[117.09008947947598,36.64418703177006]]],"type":"Polygon"}},
{"id":"153550fce228447b2eb3a89490930ac8","type":"Feature","properties":{"lkid": "13NGH0B5RC0", "ldid": "13NEP0B5QJ013NGH0B5RC00"},"geometry":{"coordinates":[[[117.08983513591318,36.64386896815239],[117.08986062297123,36.64381515283016],[117.09001522210434,36.6438684299807],[117.09017183337369,36.64392493604748],[117.09015037058697,36.643980903901735],[117.08983513591318,36.64386896815239]]],"type":"Polygon"}},
{"id":"9f99ad7c4eda55dd7f83afc3f87a5897","type":"Feature","properties":{"lkid": "13NGH0B5RC0", "ldid": "13NF80B5QN013NGH0B5RC00"},"geometry":{"coordinates":[[[117.08968885679263,36.64402151162922],[117.08975123301514,36.64404303770529],[117.08983574273617,36.64387136708481],[117.08980623140542,36.643856836951684],[117.08977336651361,36.643865447401225],[117.08976330583317,36.64386813816647],[117.08968885679263,36.64402151162922]]],"type":"Polygon"}},
{"id":"26fe0e2949974fc52d2c93f1fd033b58","type":"Feature","properties":{"lkid": "13NF80B5QN0", "ldid": "13NDG0B5RI013NF80B5QN00"},"geometry":{"coordinates":[[[117.08580014616757,36.641997953003866],[117.08581490183354,36.64197642635736],[117.08590880152462,36.642037777285324],[117.08588264375209,36.64208136870478],[117.08578807335078,36.64201786514744],[117.08580014616757,36.641997953003866]]],"type":"Polygon"}},
{"id":"8edfdd75bfab05f287e5f0d477d0c8f2","type":"Feature","properties":{"lkid": "13NF80B5QN0", "ldid": "13NGH0B5RC013NF80B5QN00"},"geometry":{"coordinates":[[[117.08590611867521,36.64204638793824],[117.08595977564204,36.6420770633805],[117.0860838573742,36.641928529545226],[117.08603355396832,36.641886014373426],[117.08590477725056,36.64204208261192],[117.08590611867521,36.64204638793824]]],"type":"Polygon"}},
{"id":"252976b953585bc3b2b695ca66725aec","type":"Feature","properties":{"lkid": "13NF80B5QN0", "ldid": "13NDT0B5Q9013NF80B5QN00"},"geometry":{"coordinates":[[[117.08589937924768,36.641805315232205],[117.08593693912377,36.64177141067496],[117.08605766729619,36.64185590295537],[117.08602614382914,36.641891421975544],[117.08589937924768,36.641805315232205]]],"type":"Polygon"}},
{"id":"0c181daf73f6ccd6dfefc379e4c65c33","type":"Feature","properties":{"lkid": "13NF80B5QN0", "ldid": "13NED0B5Q9013NF80B5QN00"},"geometry":{"coordinates":[[[117.08576121258153,36.64193393727692],[117.0858155402587,36.641969456260554],[117.08590273282908,36.64180962070323],[117.08584505159087,36.64177517798049],[117.08576121258153,36.64193393727692]]],"type":"Polygon"}}
]
}
wj-realtime-computing/src/main/resources/mapper/TurnIndicatorsDataMapper.xml
0 → 100644
View file @
6c992aae
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.wanji.indicators.mapper.TurnIndicatorsDataMapper"
>
<!--批量插入-->
<insert
id=
"batchInsert"
parameterType=
"com.wanji.indicators.entity.TurnIndicatorData"
>
INSERT INTO t_analysis_rid_turn_indicators (
cross_id,
f_rid,
f_rid_dir,
t_rid,
turn_dir_no,
flow,
granularity,
window_start_time,
window_end_time ,
dt,
ruksj
)
VALUES
<foreach
collection=
"list"
item=
"item"
separator=
","
>
(
#{item.crossId}
,#{item.fRid}
,#{item.fRidDir}
,#{item.tRid}
,#{item.turnDirNo}
,#{item.flow}
,#{item.granularity}
,#{item.windowStartTime}
,#{item.windowEndTime}
,#{item.dt}
,now()
)
</foreach>
ON DUPLICATE KEY UPDATE
cross_id=values(cross_id),
f_rid=values(f_rid),
f_rid_dir=values(f_rid_dir),
t_rid=values(t_rid),
turn_dir_no=values(turn_dir_no),
flow=values(flow),
ruksj=values(ruksj),
window_start_time=values(window_start_time),
window_end_time=values(window_end_time) ,
dt=values(dt)
</insert>
</mapper>
wj-realtime-computing/src/main/resources/spring-mybatis.xml
View file @
6c992aae
...
...
@@ -10,7 +10,7 @@
<!-- 加载配置文件 -->
<!--<context:property-placeholder location="classpath:db.properties"/>-->
<context:property-placeholder
location=
"classpath:db/
mengzi
/db.properties"
/>
<context:property-placeholder
location=
"classpath:db/
dev
/db.properties"
/>
<!-- 配置数据源 -->
<bean
id=
"dataSource"
class=
"com.alibaba.druid.pool.DruidDataSource"
init-method=
"init"
destroy-method=
"close"
>
...
...
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