[新增]设备公里表长短链校正
This commit is contained in:
parent
12df28cc37
commit
1f0a114c8d
@ -34,6 +34,7 @@ message Repository {
|
|||||||
repeated Esb esbs = 27;
|
repeated Esb esbs = 27;
|
||||||
repeated Spks spkss = 28;
|
repeated Spks spkss = 28;
|
||||||
repeated AxleCountingSection axleCountingSections = 29; //计轴区段
|
repeated AxleCountingSection axleCountingSections = 29; //计轴区段
|
||||||
|
repeated KilometerCalibration kilometerCalibrations = 30; //公里标校准
|
||||||
//ISCS 编号[300,500]
|
//ISCS 编号[300,500]
|
||||||
//ISCS管线
|
//ISCS管线
|
||||||
repeated Pipe pipes = 300;
|
repeated Pipe pipes = 300;
|
||||||
@ -419,6 +420,12 @@ message KilometerConvert {
|
|||||||
bool sameTrend = 3; //相同趋势(同增同减)?
|
bool sameTrend = 3; //相同趋势(同增同减)?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//公里标校准
|
||||||
|
message KilometerCalibration {
|
||||||
|
Kilometer design = 1; //设计的公里标
|
||||||
|
Kilometer actual = 2; //实际的公里标
|
||||||
|
}
|
||||||
|
|
||||||
//左右行
|
//左右行
|
||||||
enum Direction {
|
enum Direction {
|
||||||
LEFT = 0;
|
LEFT = 0;
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -37,6 +37,7 @@ type Repository struct {
|
|||||||
xcjMap map[string]*Xcj
|
xcjMap map[string]*Xcj
|
||||||
esbMap map[string]*Esb
|
esbMap map[string]*Esb
|
||||||
spksMap map[string]*Spks
|
spksMap map[string]*Spks
|
||||||
|
kilometerCalibrationMap map[string][]*proto.KilometerCalibration //从大到小排序
|
||||||
|
|
||||||
PipeMap map[string]*Pipe //ISCS 管线
|
PipeMap map[string]*Pipe //ISCS 管线
|
||||||
PipeFittingMap map[string]*PipeFitting //ISCS 管件
|
PipeFittingMap map[string]*PipeFitting //ISCS 管件
|
||||||
@ -91,6 +92,7 @@ func newRepository(id string, version string) *Repository {
|
|||||||
xcjMap: make(map[string]*Xcj),
|
xcjMap: make(map[string]*Xcj),
|
||||||
esbMap: make(map[string]*Esb),
|
esbMap: make(map[string]*Esb),
|
||||||
spksMap: make(map[string]*Spks),
|
spksMap: make(map[string]*Spks),
|
||||||
|
kilometerCalibrationMap: make(map[string][]*proto.KilometerCalibration),
|
||||||
|
|
||||||
PipeMap: make(map[string]*Pipe), //ISCS 管线
|
PipeMap: make(map[string]*Pipe), //ISCS 管线
|
||||||
PipeFittingMap: make(map[string]*PipeFitting), //ISCS 管件
|
PipeFittingMap: make(map[string]*PipeFitting), //ISCS 管件
|
||||||
|
@ -3,13 +3,13 @@ package repository
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log/slog"
|
|
||||||
"math"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"joylink.club/rtsssimulation/repository/model/proto"
|
"joylink.club/rtsssimulation/repository/model/proto"
|
||||||
"joylink.club/rtsssimulation/util/number"
|
"joylink.club/rtsssimulation/util/number"
|
||||||
|
"log/slog"
|
||||||
|
"math"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
var repositoryMap = make(map[string]*Repository)
|
var repositoryMap = make(map[string]*Repository)
|
||||||
@ -55,6 +55,10 @@ func buildModels(source *proto.Repository, repository *Repository) error {
|
|||||||
for _, protoData := range source.KilometerConverts {
|
for _, protoData := range source.KilometerConverts {
|
||||||
repository.addKilometerConvert(protoData)
|
repository.addKilometerConvert(protoData)
|
||||||
}
|
}
|
||||||
|
err := buildKilometerCalibration(source, repository)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
for _, protoData := range source.Stations {
|
for _, protoData := range source.Stations {
|
||||||
m := NewStation(protoData.Id, protoData.Code)
|
m := NewStation(protoData.Id, protoData.Code)
|
||||||
_, ok := repository.stationMap[m.Id()]
|
_, ok := repository.stationMap[m.Id()]
|
||||||
@ -72,27 +76,37 @@ func buildModels(source *proto.Repository, repository *Repository) error {
|
|||||||
repository.axleCountingSectionMap[m.Id()] = m
|
repository.axleCountingSectionMap[m.Id()] = m
|
||||||
}
|
}
|
||||||
for _, protoData := range source.CheckPoints {
|
for _, protoData := range source.CheckPoints {
|
||||||
|
calibrationKilometer(protoData.Km, repository)
|
||||||
m := NewCheckPoint(protoData.Id, protoData.Km, protoData.Type)
|
m := NewCheckPoint(protoData.Id, protoData.Km, protoData.Type)
|
||||||
repository.checkPointMap[m.Id()] = m
|
repository.checkPointMap[m.Id()] = m
|
||||||
}
|
}
|
||||||
for _, protoData := range source.Turnouts {
|
for _, protoData := range source.Turnouts {
|
||||||
|
calibrationKilometer(protoData.Km, repository)
|
||||||
m := NewTurnout(protoData.Id, protoData.Km, protoData.SwitchMachineType)
|
m := NewTurnout(protoData.Id, protoData.Km, protoData.SwitchMachineType)
|
||||||
repository.turnoutMap[m.Id()] = m
|
repository.turnoutMap[m.Id()] = m
|
||||||
}
|
}
|
||||||
for _, protoData := range source.Signals {
|
for _, protoData := range source.Signals {
|
||||||
|
calibrationKilometer(protoData.Km, repository)
|
||||||
m := NewSignal(protoData.Id, protoData.Km, protoData.Code, protoData.Model)
|
m := NewSignal(protoData.Id, protoData.Km, protoData.Code, protoData.Model)
|
||||||
repository.signalMap[m.Id()] = m
|
repository.signalMap[m.Id()] = m
|
||||||
}
|
}
|
||||||
for _, protoData := range source.Transponders {
|
for _, protoData := range source.Transponders {
|
||||||
|
calibrationKilometer(protoData.Km, repository)
|
||||||
m := NewTransponder(protoData.Id, protoData.Km, protoData.FixedTelegram, protoData.FixedUserTelegram,
|
m := NewTransponder(protoData.Id, protoData.Km, protoData.FixedTelegram, protoData.FixedUserTelegram,
|
||||||
protoData.Type, protoData.LeuIndex, protoData.IndexInLeu)
|
protoData.Type, protoData.LeuIndex, protoData.IndexInLeu)
|
||||||
repository.responderMap[m.Id()] = m
|
repository.responderMap[m.Id()] = m
|
||||||
}
|
}
|
||||||
for _, protoData := range source.Slopes {
|
for _, protoData := range source.Slopes {
|
||||||
|
for _, km := range protoData.Kms {
|
||||||
|
calibrationKilometer(km, repository)
|
||||||
|
}
|
||||||
m := NewSlope(protoData.Id, protoData.Kms, protoData.Degree)
|
m := NewSlope(protoData.Id, protoData.Kms, protoData.Degree)
|
||||||
repository.slopeMap[m.Id()] = m
|
repository.slopeMap[m.Id()] = m
|
||||||
}
|
}
|
||||||
for _, protoData := range source.SectionalCurvatures {
|
for _, protoData := range source.SectionalCurvatures {
|
||||||
|
for _, km := range protoData.Kms {
|
||||||
|
calibrationKilometer(km, repository)
|
||||||
|
}
|
||||||
m := NewSectionalCurvature(protoData.Id, protoData.Kms, protoData.Radius)
|
m := NewSectionalCurvature(protoData.Id, protoData.Kms, protoData.Radius)
|
||||||
repository.sectionalCurvatureMap[m.Id()] = m
|
repository.sectionalCurvatureMap[m.Id()] = m
|
||||||
}
|
}
|
||||||
@ -151,7 +165,7 @@ func buildModels(source *proto.Repository, repository *Repository) error {
|
|||||||
m := NewCkmPsl(protoData.Id)
|
m := NewCkmPsl(protoData.Id)
|
||||||
repository.ckmPslMap[m.Id()] = m
|
repository.ckmPslMap[m.Id()] = m
|
||||||
}
|
}
|
||||||
err := repository.generateCoordinateInfo(source.MainCoordinateSystem)
|
err = repository.generateCoordinateInfo(source.MainCoordinateSystem)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -165,6 +179,7 @@ func buildModels(source *proto.Repository, repository *Repository) error {
|
|||||||
repository.spksMap[protoData.Id] = &Spks{Identity: identity{id: protoData.Id, deviceType: proto.DeviceType_DeviceType_Spks}}
|
repository.spksMap[protoData.Id] = &Spks{Identity: identity{id: protoData.Id, deviceType: proto.DeviceType_DeviceType_Spks}}
|
||||||
}
|
}
|
||||||
err = buildIscsModels(source, repository)
|
err = buildIscsModels(source, repository)
|
||||||
|
|
||||||
//
|
//
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -238,6 +253,29 @@ func buildModelRelationship(source *proto.Repository, repository *Repository) er
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func calibrationKilometer(km *proto.Kilometer, repository *Repository) {
|
||||||
|
params := repository.kilometerCalibrationMap[km.CoordinateSystem+km.Direction.String()]
|
||||||
|
for _, param := range params {
|
||||||
|
if param.Design.Value <= km.Value {
|
||||||
|
km.Value += param.Actual.Value - param.Design.Value
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildKilometerCalibration(source *proto.Repository, repository *Repository) error {
|
||||||
|
for _, protoData := range source.KilometerCalibrations {
|
||||||
|
key := protoData.Design.CoordinateSystem + protoData.Design.Direction.String()
|
||||||
|
repository.kilometerCalibrationMap[key] = append(repository.kilometerCalibrationMap[key], protoData)
|
||||||
|
}
|
||||||
|
for _, calibrations := range repository.kilometerCalibrationMap {
|
||||||
|
sort.Slice(calibrations, func(i, j int) bool {
|
||||||
|
return calibrations[i].Design.Value > calibrations[j].Design.Value
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func buildAxleCountingSectionRelationShip(source *proto.Repository, repository *Repository) error {
|
func buildAxleCountingSectionRelationShip(source *proto.Repository, repository *Repository) error {
|
||||||
turnout_physicalSection_map := make(map[string]*PhysicalSection)
|
turnout_physicalSection_map := make(map[string]*PhysicalSection)
|
||||||
for _, physicalSection := range repository.physicalSectionMap {
|
for _, physicalSection := range repository.physicalSectionMap {
|
||||||
|
Loading…
Reference in New Issue
Block a user