合并代码
@ -101,7 +101,7 @@
|
||||
"code": 2017,
|
||||
"name": "道路施工",
|
||||
"catch": true,
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"zoomMin": 15,
|
||||
"zoomMax": 17
|
||||
},
|
||||
@ -166,11 +166,38 @@
|
||||
"zoomMin": 15,
|
||||
"zoomMax": 17
|
||||
},
|
||||
"2070": {
|
||||
"table": "OMDB_LINK_SEPARATION",
|
||||
"code": 2070,
|
||||
"name": "设施分离",
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20,
|
||||
"filterData": true,
|
||||
"catch": true
|
||||
},
|
||||
"2071": {
|
||||
"table": "OMDB_LINK_MEDIAN",
|
||||
"code": 2071,
|
||||
"name": "中央隔离带",
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20,
|
||||
"isDependOnOtherTable": true,
|
||||
"filterData": true,
|
||||
"catch": true,
|
||||
"transformer": [
|
||||
{
|
||||
"k": "geometry",
|
||||
"v": "~",
|
||||
"klib": "geometry",
|
||||
"vlib": "generateLinkMedianToPolygon()"
|
||||
}
|
||||
]
|
||||
},
|
||||
"2083": {
|
||||
"table": "OMDB_RDBOUND_BOUNDARYTYPE",
|
||||
"code": 2083,
|
||||
"name": "道路边界类型",
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"filterData": true,
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20,
|
||||
@ -263,7 +290,7 @@
|
||||
"zoomMax": 20,
|
||||
"catch": true,
|
||||
"filterData": false,
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"transformer": [
|
||||
{
|
||||
"k": "geometry",
|
||||
@ -280,7 +307,7 @@
|
||||
"zoomMin": 15,
|
||||
"zoomMax": 20,
|
||||
"catch": true,
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"transformer": [
|
||||
{
|
||||
"k": "geometry",
|
||||
@ -297,14 +324,14 @@
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20,
|
||||
"catch": true,
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"transformer": []
|
||||
},
|
||||
"3003": {
|
||||
"table": "OMDB_OBJECT_SYMBOL",
|
||||
"code": 3003,
|
||||
"name": "符号",
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20,
|
||||
"catch": true,
|
||||
@ -314,7 +341,7 @@
|
||||
"table": "OMDB_OBJECT_ARROW",
|
||||
"code": 3004,
|
||||
"name": "箭头",
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20,
|
||||
"catch": true,
|
||||
@ -368,7 +395,7 @@
|
||||
"code": 3012,
|
||||
"name": "导流区",
|
||||
"catch": true,
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20
|
||||
},
|
||||
@ -377,7 +404,7 @@
|
||||
"code": 3014,
|
||||
"name": "人行横道",
|
||||
"catch": true,
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20
|
||||
},
|
||||
@ -385,7 +412,7 @@
|
||||
"table": "OMDB_OBJECT_STOPLOCATION",
|
||||
"code": 3016,
|
||||
"name": "停止位置",
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"filterData": true,
|
||||
"zoomMin": 18,
|
||||
"catch": true,
|
||||
@ -396,7 +423,7 @@
|
||||
"code": 3027,
|
||||
"name": "路口内交通岛",
|
||||
"catch": true,
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20
|
||||
},
|
||||
@ -641,6 +668,24 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
"4016": {
|
||||
"table": "OMDB_ZLEVEL",
|
||||
"code": 4016,
|
||||
"name": "立交",
|
||||
"zoomMin": 15,
|
||||
"zoomMax": 20,
|
||||
"filterData": true,
|
||||
"catch": true,
|
||||
"checkLinkId": true,
|
||||
"transformer": [
|
||||
{
|
||||
"k": "geometry",
|
||||
"v": "~",
|
||||
"klib": "geometry",
|
||||
"vlib": "obtainZLevelReference()"
|
||||
}
|
||||
]
|
||||
},
|
||||
"4022": {
|
||||
"table": "OMDB_TRAFFICLIGHT",
|
||||
"code": 4022,
|
||||
@ -697,7 +742,7 @@
|
||||
"name": "车道中心线",
|
||||
"catch": false,
|
||||
"isDependOnOtherTable": false,
|
||||
"checkLinkId": false,
|
||||
"checkLinkId": true,
|
||||
"zoomMin": 18,
|
||||
"zoomMax": 20,
|
||||
"transformer": [
|
||||
|
||||
@ -23,7 +23,13 @@ data class NaviRoute(
|
||||
var startIndexInPath: Int = -1,
|
||||
//当前link在整段路径中的终点
|
||||
var endIndexIntPath: Int = -1,
|
||||
var itemList: MutableList<NaviRouteItem>? = null
|
||||
var itemList: MutableList<NaviRouteItem>? = null,
|
||||
//种别
|
||||
var kind: String = "",
|
||||
//除导航退出线外的其他拓扑link
|
||||
var otherTopologyLinks: MutableList<String> = mutableListOf(),
|
||||
//线限速
|
||||
var speedLimit: String = "0"
|
||||
) {
|
||||
var pointList: MutableList<GeoPoint> = mutableListOf()
|
||||
get() {
|
||||
@ -39,5 +45,7 @@ data class NaviRouteItem(
|
||||
var index: Int,
|
||||
val data: RenderEntity,
|
||||
val linkId: String,
|
||||
var distance: Int = -1
|
||||
var distance: Int = -1,
|
||||
var voiceText: String = "",
|
||||
var isVoicePlayed: Boolean = false
|
||||
)
|
||||
|
||||
@ -232,7 +232,7 @@ class ImportOMDBHelper @AssistedInject constructor(
|
||||
OnComplete->{
|
||||
processIndex ++
|
||||
callback.onResult("$processIndex|$tableNum")
|
||||
Log.e("jingo", "安装==$processIndex===$tableNum")
|
||||
// Log.e("jingo", "安装==$processIndex===$tableNum")
|
||||
if(tableNum-processIndex==listDependOnEntry.size){
|
||||
for ((currentEntry, importConfig) in listDependOnEntry) {
|
||||
processIndex++
|
||||
@ -315,7 +315,7 @@ class ImportOMDBHelper @AssistedInject constructor(
|
||||
val cancellable= importData(f,unZipFiles,currentEntry,task,importConfig,hashMap,isEmit,object :MultiPathsCallback<String>{
|
||||
override fun onProgress(value: Int) {
|
||||
trySendBlocking(OnProgress(value))
|
||||
Log.e("jingo","=====$value")
|
||||
// Log.e("jingo","=====$value")
|
||||
}
|
||||
|
||||
override fun onError(t: Throwable) {
|
||||
@ -379,12 +379,12 @@ class ImportOMDBHelper @AssistedInject constructor(
|
||||
}
|
||||
newTime = System.currentTimeMillis()
|
||||
|
||||
if (elementIndex % 50 == 0) {
|
||||
Log.e(
|
||||
"jingo",
|
||||
"安装数据 ${currentConfig.table} $elementIndex ${listRenderEntity.size} ${newTime - time}"
|
||||
)
|
||||
}
|
||||
// if (elementIndex % 50 == 0) {
|
||||
// Log.e(
|
||||
// "jingo",
|
||||
// "安装数据 ${currentConfig.table} $elementIndex ${listRenderEntity.size} ${newTime - time}"
|
||||
// )
|
||||
// }
|
||||
|
||||
time = newTime
|
||||
|
||||
@ -805,10 +805,10 @@ class ImportOMDBHelper @AssistedInject constructor(
|
||||
}
|
||||
|
||||
if (listRenderEntity.size > 20000) {
|
||||
Log.e(
|
||||
"jingo",
|
||||
"安装数据 ${currentConfig.table} $elementIndex ${listRenderEntity.size}"
|
||||
)
|
||||
// Log.e(
|
||||
// "jingo",
|
||||
// "安装数据 ${currentConfig.table} $elementIndex ${listRenderEntity.size}"
|
||||
// )
|
||||
if (isEmit) {
|
||||
f.send(listRenderEntity)
|
||||
delay(20)
|
||||
@ -852,7 +852,7 @@ class ImportOMDBHelper @AssistedInject constructor(
|
||||
throw e
|
||||
}
|
||||
|
||||
Log.e("jingo", "完成 ${currentConfig.table}")
|
||||
// Log.e("jingo", "完成 ${currentConfig.table}")
|
||||
|
||||
callback?.onComplete()
|
||||
|
||||
|
||||
@ -194,7 +194,8 @@ class ImportPreProcess {
|
||||
val coord = Coordinate(point.getX() - dx, point.getY() - dy)
|
||||
|
||||
// 将这个点记录在数据中
|
||||
val geometryTranslate: Geometry = GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y))
|
||||
val geometryTranslate: Geometry =
|
||||
GeometryTools.createGeometry(doubleArrayOf(coord.x, coord.y))
|
||||
|
||||
renderEntity.geometry = geometryTranslate.toString()
|
||||
}
|
||||
@ -237,7 +238,8 @@ class ImportPreProcess {
|
||||
GeometryTools.createLineString(arrayOf<Coordinate>(pointStart, pointEnd)).toString()
|
||||
startEndReference.properties["qi_table"] = renderEntity.table
|
||||
startEndReference.properties["type"] = "s_2_e"
|
||||
startEndReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(startEndReference.properties))
|
||||
startEndReference.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(startEndReference.properties))
|
||||
renderEntity.referenceEntitys.add(startEndReference)
|
||||
}
|
||||
|
||||
@ -281,7 +283,8 @@ class ImportPreProcess {
|
||||
startReference.geometry =
|
||||
GeometryTools.createGeometry(GeoPoint(pointStart.y, pointStart.x)).toString()
|
||||
startReference.properties["qi_table"] = renderEntity.table
|
||||
startReference.properties["type"] = "s${if (renderEntity.properties["laneType"]!!.toInt() and (0b1000)>0) "_dec" else "_acc"}"
|
||||
startReference.properties["type"] =
|
||||
"s${if (renderEntity.properties["laneType"]!!.toInt() and (0b1000) > 0) "_dec" else "_acc"}"
|
||||
startReference.properties["geometry"] = startReference.geometry
|
||||
listResult.add(startReference)
|
||||
|
||||
@ -299,7 +302,8 @@ class ImportPreProcess {
|
||||
endReference.geometry =
|
||||
GeometryTools.createGeometry(GeoPoint(pointEnd.y, pointEnd.x)).toString()
|
||||
endReference.properties["qi_table"] = renderEntity.table
|
||||
endReference.properties["type"] = "e${if (renderEntity.properties["laneType"]!!.toInt() and (0b1000)>0) "_dec" else "_acc"}"
|
||||
endReference.properties["type"] =
|
||||
"e${if (renderEntity.properties["laneType"]!!.toInt() and (0b1000) > 0) "_dec" else "_acc"}"
|
||||
endReference.properties["geometry"] = endReference.geometry
|
||||
renderEntity.referenceEntitys.add(endReference)
|
||||
//listResult.add(endReference)
|
||||
@ -351,7 +355,8 @@ class ImportPreProcess {
|
||||
Log.e("qj", "generateS2EReferencePoint===${startReference.geometry}")
|
||||
|
||||
startReference.properties["geometry"] = startReference.geometry
|
||||
startReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(startReference.properties))
|
||||
startReference.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(startReference.properties))
|
||||
listResult.add(startReference)
|
||||
|
||||
Log.e("qj", "generateS2EReferencePoint===1")
|
||||
@ -385,7 +390,8 @@ class ImportPreProcess {
|
||||
Log.e("qj", "generateS2EReferencePoint===e_2_p${renderEntity.name}")
|
||||
}
|
||||
endReference.properties["geometry"] = endReference.geometry
|
||||
endReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(endReference.properties))
|
||||
endReference.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(endReference.properties))
|
||||
renderEntity.referenceEntitys.add(endReference)
|
||||
Log.e("qj", "generateS2EReferencePoint===4")
|
||||
}
|
||||
@ -482,7 +488,8 @@ class ImportPreProcess {
|
||||
WKTWriter(3).write(GeometryTools.createLineString(arrayOf(pointStart, coorEnd)))
|
||||
angleReference.properties["qi_table"] = renderEntity.table
|
||||
angleReference.properties["type"] = "angle"
|
||||
angleReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
|
||||
angleReference.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
|
||||
renderEntity.referenceEntitys.add(angleReference)
|
||||
}
|
||||
Log.e("qj", "generateDirectReferenceLine===1")
|
||||
@ -598,21 +605,21 @@ class ImportPreProcess {
|
||||
if (listResult.size > 0) {
|
||||
insertData(listResult)
|
||||
}
|
||||
}else if(boundaryType.toInt() == 9){//根据线型平分为点数据,用于渲染3D标
|
||||
} else if (boundaryType.toInt() == 9) {//根据线型平分为点数据,用于渲染3D标
|
||||
dengfenLineString(renderEntity)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun dengfenLineString(renderEntity: RenderEntity){
|
||||
if (renderEntity.code == DataCodeEnum.OMDB_LANE_MARK_BOUNDARYTYPE.code||renderEntity.code == DataCodeEnum.OMDB_RDBOUND_BOUNDARYTYPE.code){
|
||||
fun dengfenLineString(renderEntity: RenderEntity) {
|
||||
if (renderEntity.code == DataCodeEnum.OMDB_LANE_MARK_BOUNDARYTYPE.code || renderEntity.code == DataCodeEnum.OMDB_RDBOUND_BOUNDARYTYPE.code) {
|
||||
val boundaryType = renderEntity.properties["boundaryType"]
|
||||
if (boundaryType != null) {
|
||||
if(boundaryType.toInt()==9){
|
||||
Log.e("qj","杆状物转换开始")
|
||||
val geopointList = GeometryTools.getLineToDengGeoPints(renderEntity.wkt,5.0)
|
||||
geopointList.forEach{
|
||||
if (boundaryType.toInt() == 9) {
|
||||
Log.e("qj", "杆状物转换开始")
|
||||
val geopointList = GeometryTools.getLineToDengGeoPints(renderEntity.wkt, 5.0)
|
||||
geopointList.forEach {
|
||||
val referenceEntity = ReferenceEntity()
|
||||
referenceEntity.name = "${renderEntity.name}线转点坐标"
|
||||
referenceEntity.table = renderEntity.table
|
||||
@ -625,10 +632,11 @@ class ImportPreProcess {
|
||||
referenceEntity.zoomMax = renderEntity.zoomMax
|
||||
referenceEntity.taskId = renderEntity.taskId
|
||||
referenceEntity.enable = renderEntity.enable
|
||||
referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties))
|
||||
referenceEntity.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties))
|
||||
renderEntity.referenceEntitys.add(referenceEntity)
|
||||
}
|
||||
Log.e("qj","杆状物转换结束")
|
||||
Log.e("qj", "杆状物转换结束")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -673,6 +681,14 @@ class ImportPreProcess {
|
||||
referenceEntity.properties["img-src"] = if(referenceEntity.properties["img-src"].isNullOrEmpty()) symbol else "${referenceEntity.properties["img-src"]}|${symbol}"
|
||||
|
||||
//listResult.add(referenceEntity)
|
||||
// if (referenceEntity.properties["currentType"] == "0") "normal" else if (referenceEntity.properties["currentType"] == "1") "extend" else "bus"
|
||||
// referenceEntity.properties["symbol"] =
|
||||
// "assets:omdb/4601/${type}/1301_${referenceEntity.properties["currentDirect"]}.svg"
|
||||
// Log.d("unpackingLaneInfo", referenceEntity.properties["symbol"].toString())
|
||||
// referenceEntity.propertiesDb =
|
||||
// DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties))
|
||||
// renderEntity.referenceEntitys.add(referenceEntity)
|
||||
// Log.e("qj", "车信===插入车信箭头")
|
||||
}
|
||||
referenceEntity.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(referenceEntity.properties))
|
||||
renderEntity.referenceEntitys?.add(referenceEntity)
|
||||
@ -681,9 +697,10 @@ class ImportPreProcess {
|
||||
//将主表线转化为单个点,按点要素实现捕捉
|
||||
if (Geometry.TYPENAME_LINESTRING == renderEntity.wkt?.geometryType) {
|
||||
var coordinates = renderEntity.wkt?.coordinates
|
||||
if(coordinates!=null){
|
||||
if (coordinates != null) {
|
||||
val p1: Coordinate = coordinates[0]
|
||||
renderEntity.geometry = GeometryTools.createGeometry(GeoPoint(p1.y,p1.x)).toString()
|
||||
renderEntity.geometry =
|
||||
GeometryTools.createGeometry(GeoPoint(p1.y, p1.x)).toString()
|
||||
}
|
||||
}
|
||||
|
||||
@ -775,30 +792,79 @@ class ImportPreProcess {
|
||||
* 生成车道中心线面宽度
|
||||
* */
|
||||
fun generateAddWidthLine(renderEntity: RenderEntity) {
|
||||
var newTime = 0L
|
||||
// 添加车道中心面渲染原则,根据车道宽度进行渲染
|
||||
val angleReference = ReferenceEntity()
|
||||
// angleReference.renderEntityId = renderEntity.id
|
||||
angleReference.name = "${renderEntity.name}车道中线面"
|
||||
angleReference.table = renderEntity.table
|
||||
angleReference.code = renderEntity.code
|
||||
Log.e("jingo", "几何转换开始")
|
||||
//angleReference.geometry = renderEntity.geometry
|
||||
angleReference.geometry = GeometryTools.computeLine(0.000035,0.000035,renderEntity.geometry)
|
||||
Log.e("jingo", "几何转换结束")
|
||||
angleReference.geometry =
|
||||
GeometryTools.computeLine(0.000035, 0.000035, renderEntity.geometry)
|
||||
angleReference.properties["qi_table"] = renderEntity.table
|
||||
angleReference.properties["widthProperties"] = "3"
|
||||
angleReference.zoomMin = renderEntity.zoomMin
|
||||
angleReference.zoomMax = renderEntity.zoomMax
|
||||
angleReference.taskId = renderEntity.taskId
|
||||
angleReference.enable = renderEntity.enable
|
||||
val listResult = mutableListOf<ReferenceEntity>()
|
||||
angleReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
|
||||
angleReference.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
|
||||
renderEntity.referenceEntitys.add(angleReference)
|
||||
//listResult.add(angleReference)
|
||||
//insertData(listResult)
|
||||
}
|
||||
|
||||
/**
|
||||
* 中央隔离带根据线几何生成面
|
||||
* */
|
||||
fun generateLinkMedianToPolygon(renderEntity: RenderEntity) {
|
||||
if (renderEntity.code == DataCodeEnum.OMDB_LINK_MEDIAN.code) {
|
||||
if (renderEntity.properties.containsKey("side") && renderEntity.properties.containsKey("median") && renderEntity.properties.containsKey(
|
||||
"medianSurface"
|
||||
) && renderEntity.properties.containsKey("medianWidth")&& renderEntity.properties.containsKey("direct")
|
||||
) {
|
||||
//基于通行方向左右 0 左侧 1 右侧 (双方向不制作)
|
||||
val side = renderEntity.properties["side"]
|
||||
//1有中央隔离带,不与任何护栏共存 2有中央隔离带,与非固定护栏共存
|
||||
val median = renderEntity.properties["median"]?.toInt()
|
||||
//0 未铺设 1 铺设 2 混合
|
||||
var medianSurface = renderEntity.properties["medianSurface"]?.toInt()
|
||||
if(median==2){
|
||||
medianSurface = 3 + medianSurface!!
|
||||
}
|
||||
//宽度
|
||||
val medianWidth = renderEntity.properties["medianWidth"]?.toDouble()
|
||||
// 添加车道中心面渲染原则,根据车道宽度进行渲染
|
||||
val angleReference = ReferenceEntity()
|
||||
//方向 0\1\2顺方向 3逆方向
|
||||
when(renderEntity.properties["direct"]?.toInt()){
|
||||
0,1,2->{
|
||||
if (medianWidth != null) {
|
||||
angleReference.geometry =
|
||||
GeometryTools.computeLine(medianWidth/100000000, 0.0, renderEntity.geometry)
|
||||
Log.e("qj","width==${medianWidth/100000000}")
|
||||
}
|
||||
}
|
||||
3->{
|
||||
if (medianWidth != null) {
|
||||
angleReference.geometry =
|
||||
GeometryTools.computeLine(0.0, medianWidth/100000000, renderEntity.geometry)
|
||||
Log.e("qj","width==${medianWidth/100000000}")
|
||||
}
|
||||
}
|
||||
}
|
||||
angleReference.name = "${renderEntity.name}面"
|
||||
angleReference.table = renderEntity.table
|
||||
angleReference.code = renderEntity.code
|
||||
angleReference.properties["qi_table"] = renderEntity.table
|
||||
angleReference.properties["medianSurface"] = medianSurface.toString()
|
||||
angleReference.zoomMin = renderEntity.zoomMin
|
||||
angleReference.zoomMax = renderEntity.zoomMax
|
||||
angleReference.taskId = renderEntity.taskId
|
||||
angleReference.enable = renderEntity.enable
|
||||
angleReference.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(angleReference.properties))
|
||||
renderEntity.referenceEntitys.add(angleReference)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成默认路口数据的参考数据
|
||||
@ -825,7 +891,8 @@ class ImportPreProcess {
|
||||
GeometryTools.createGeometry(nodeJSONObject["geometry"].toString()).toString()
|
||||
intersectionReference.properties["qi_table"] = renderEntity.table
|
||||
intersectionReference.properties["type"] = "node"
|
||||
intersectionReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(intersectionReference.properties))
|
||||
intersectionReference.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(intersectionReference.properties))
|
||||
renderEntity.referenceEntitys.add(intersectionReference)
|
||||
//listResult.add(intersectionReference)
|
||||
}
|
||||
@ -838,13 +905,13 @@ class ImportPreProcess {
|
||||
* */
|
||||
fun sortGeometry(renderEntity: RenderEntity) {
|
||||
// 路口数据的其他点位,是保存在nodeList对应的数组下
|
||||
/* if (renderEntity.properties.containsKey("linkPid")) {
|
||||
val linkList = renderEntity.properties["linkPid"]?.split(",")
|
||||
//几何较少时需要判断是否要计算判断长短边
|
||||
if(linkList!=null&&linkList.size<3){
|
||||
/* if (renderEntity.properties.containsKey("linkPid")) {
|
||||
val linkList = renderEntity.properties["linkPid"]?.split(",")
|
||||
//几何较少时需要判断是否要计算判断长短边
|
||||
if(linkList!=null&&linkList.size<3){
|
||||
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
@ -1011,7 +1078,8 @@ class ImportPreProcess {
|
||||
dynamicSrcReference.properties["type"] = "dynamicSrc"
|
||||
val code = renderEntity.properties[codeName]
|
||||
dynamicSrcReference.properties["src"] = "${prefix}${code}${suffix}"
|
||||
dynamicSrcReference.propertiesDb = DeflaterUtil.zipString(JSON.toJSONString(dynamicSrcReference.properties))
|
||||
dynamicSrcReference.propertiesDb =
|
||||
DeflaterUtil.zipString(JSON.toJSONString(dynamicSrcReference.properties))
|
||||
renderEntity.referenceEntitys.add(dynamicSrcReference)
|
||||
//listResult.add(dynamicSrcReference)
|
||||
}
|
||||
@ -1120,7 +1188,8 @@ class ImportPreProcess {
|
||||
fun generateLaneAccessType(renderEntity: RenderEntity): Boolean {
|
||||
if (renderEntity.properties.containsKey("accessCharacteristic")) {
|
||||
// 解析accessCharacteristic,判断是否存在指定属性
|
||||
val accessCharacteristic = renderEntity.properties["accessCharacteristic"].toString().toInt()
|
||||
val accessCharacteristic =
|
||||
renderEntity.properties["accessCharacteristic"].toString().toInt()
|
||||
var str = ""
|
||||
if (accessCharacteristic.and(0b100)>0) {
|
||||
str += "公"
|
||||
@ -1155,8 +1224,9 @@ class ImportPreProcess {
|
||||
* 生成车道点限速的名称
|
||||
* */
|
||||
fun obtainLaneSpeedLimitName(renderEntity: RenderEntity) {
|
||||
if (renderEntity.properties.containsKey("maxSpeed")&&renderEntity.properties.containsKey("minSpeed")) {
|
||||
renderEntity.properties["ref"] = "${renderEntity.properties["maxSpeed"]}|${renderEntity.properties["minSpeed"]}"
|
||||
if (renderEntity.properties.containsKey("maxSpeed") && renderEntity.properties.containsKey("minSpeed")) {
|
||||
renderEntity.properties["ref"] =
|
||||
"${renderEntity.properties["maxSpeed"]}|${renderEntity.properties["minSpeed"]}"
|
||||
}
|
||||
}
|
||||
|
||||
@ -1164,7 +1234,7 @@ class ImportPreProcess {
|
||||
* 生成立交的辅助图层数据
|
||||
* */
|
||||
fun obtainZLevelReference(renderEntity: RenderEntity) {
|
||||
if(renderEntity!=null&&renderEntity.properties.containsKey("zlevelList")) {
|
||||
if (renderEntity != null && renderEntity.properties.containsKey("zlevelList")) {
|
||||
// 获取ZLevelList数据
|
||||
val zLevelList = JSONArray(renderEntity.properties["zlevelList"])
|
||||
for (i in 0 until zLevelList.length()) {
|
||||
@ -1173,7 +1243,8 @@ class ImportPreProcess {
|
||||
val startEnd = zLevelObject.optInt("startEnd", 0)
|
||||
val zLevel = zLevelObject.optInt("zlevel", 0)
|
||||
val shpSeqNum = zLevelObject.optInt("shpSeqNum", 0)
|
||||
val linkGeometry = GeometryTools.createGeometry(zLevelObject.optString("linkGeometry"))
|
||||
val linkGeometry =
|
||||
GeometryTools.createGeometry(zLevelObject.optString("linkGeometry"))
|
||||
val coordinates = linkGeometry!!.coordinates
|
||||
val referenceEntityList = mutableListOf<ReferenceEntity>()
|
||||
// 判断当前数据的startEnd,如果是0则向前和向后都绘制线,如果是1(起点)则只绘制前两个点组成的线,如果是2(终点)则只绘制后两个点组成的线
|
||||
@ -1182,35 +1253,47 @@ class ImportPreProcess {
|
||||
zLevelReference.properties["type"] = "zlevelLine"
|
||||
// zLevelReference.properties["name"] = zLevel.toString()
|
||||
// 根据shpSeqNum获取对应的点位
|
||||
if (shpSeqNum < coordinates.size-1) {
|
||||
if (shpSeqNum < coordinates.size - 1) {
|
||||
val currentCoordinate = coordinates[shpSeqNum]
|
||||
var nextCoordinate = coordinates[shpSeqNum+1]
|
||||
var nextCoordinate = coordinates[shpSeqNum + 1]
|
||||
// 计算两个点的距离,如果小于指定阈值,程序按照方向计算延长线
|
||||
// if (GeometryTools.getDistance(currentCoordinate.y, currentCoordinate.x, nextCoordinate.y, nextCoordinate.x) < 3.0) {
|
||||
// 获取当前点到下一个点的线方向
|
||||
val angle = Angle.angle(currentCoordinate, nextCoordinate)
|
||||
// 计算偏移距离
|
||||
val dx: Double = GeometryTools.convertDistanceToDegree(
|
||||
3.0,
|
||||
currentCoordinate.y!!
|
||||
) * Math.cos(angle)
|
||||
val dy: Double = GeometryTools.convertDistanceToDegree(
|
||||
3.0,
|
||||
currentCoordinate.y!!
|
||||
) * Math.sin(angle)
|
||||
// 获取当前点到下一个点的线方向
|
||||
val angle = Angle.angle(currentCoordinate, nextCoordinate)
|
||||
// 计算偏移距离
|
||||
val dx: Double = GeometryTools.convertDistanceToDegree(
|
||||
3.0,
|
||||
currentCoordinate.y!!
|
||||
) * Math.cos(angle)
|
||||
val dy: Double = GeometryTools.convertDistanceToDegree(
|
||||
3.0,
|
||||
currentCoordinate.y!!
|
||||
) * Math.sin(angle)
|
||||
|
||||
// 计算偏移后的点
|
||||
nextCoordinate =
|
||||
Coordinate(currentCoordinate.getX() + dx, currentCoordinate.getY() + dy)
|
||||
// 计算偏移后的点
|
||||
nextCoordinate =
|
||||
Coordinate(currentCoordinate.getX() + dx, currentCoordinate.getY() + dy)
|
||||
// }
|
||||
zLevelReference.geometry = GeometryTools.createLineString(arrayListOf(GeoPoint(currentCoordinate.y, currentCoordinate.x), GeoPoint(nextCoordinate.y, nextCoordinate.x))).toString()
|
||||
zLevelReference.geometry = GeometryTools.createLineString(
|
||||
arrayListOf(
|
||||
GeoPoint(
|
||||
currentCoordinate.y,
|
||||
currentCoordinate.x
|
||||
), GeoPoint(nextCoordinate.y, nextCoordinate.x)
|
||||
)
|
||||
).toString()
|
||||
|
||||
referenceEntityList.add(zLevelReference)
|
||||
|
||||
val zLevelNameReference = createZLevelReference(renderEntity)
|
||||
zLevelNameReference.properties["type"] = "zlevelName"
|
||||
zLevelNameReference.properties["name"] = zLevel.toString()
|
||||
zLevelNameReference.geometry = GeometryTools.createGeometry(GeoPoint(nextCoordinate.y, nextCoordinate.x)).toString()
|
||||
zLevelNameReference.geometry = GeometryTools.createGeometry(
|
||||
GeoPoint(
|
||||
nextCoordinate.y,
|
||||
nextCoordinate.x
|
||||
)
|
||||
).toString()
|
||||
referenceEntityList.add(zLevelNameReference)
|
||||
}
|
||||
}
|
||||
@ -1220,34 +1303,43 @@ class ImportPreProcess {
|
||||
zLevelReference.properties["type"] = "zlevelLine"
|
||||
// zLevelReference.properties["name"] = zLevel.toString()
|
||||
// 根据shpSeqNum获取对应的点位
|
||||
if (shpSeqNum < coordinates.size&&shpSeqNum>0) {
|
||||
if (shpSeqNum < coordinates.size && shpSeqNum > 0) {
|
||||
val currentCoordinate = coordinates[shpSeqNum]
|
||||
var preCoordinate = coordinates[shpSeqNum-1]
|
||||
var preCoordinate = coordinates[shpSeqNum - 1]
|
||||
// 计算两个点的距离,如果小于指定阈值,程序按照方向计算延长线
|
||||
// if (GeometryTools.getDistance(currentCoordinate.y, currentCoordinate.x, preCoordinate.y, preCoordinate.x) < 3.0) {
|
||||
// 获取当前点到下一个点的线方向
|
||||
val angle = Angle.angle(currentCoordinate, preCoordinate)
|
||||
// 计算偏移距离
|
||||
val dx: Double = GeometryTools.convertDistanceToDegree(
|
||||
3.0,
|
||||
currentCoordinate.y!!
|
||||
) * Math.cos(angle)
|
||||
val dy: Double = GeometryTools.convertDistanceToDegree(
|
||||
3.0,
|
||||
currentCoordinate.y!!
|
||||
) * Math.sin(angle)
|
||||
// 获取当前点到下一个点的线方向
|
||||
val angle = Angle.angle(currentCoordinate, preCoordinate)
|
||||
// 计算偏移距离
|
||||
val dx: Double = GeometryTools.convertDistanceToDegree(
|
||||
3.0,
|
||||
currentCoordinate.y!!
|
||||
) * Math.cos(angle)
|
||||
val dy: Double = GeometryTools.convertDistanceToDegree(
|
||||
3.0,
|
||||
currentCoordinate.y!!
|
||||
) * Math.sin(angle)
|
||||
|
||||
// 计算偏移后的点
|
||||
preCoordinate =
|
||||
Coordinate(currentCoordinate.getX() + dx, currentCoordinate.getY() + dy)
|
||||
// 计算偏移后的点
|
||||
preCoordinate =
|
||||
Coordinate(currentCoordinate.getX() + dx, currentCoordinate.getY() + dy)
|
||||
// }
|
||||
zLevelReference.geometry = GeometryTools.createLineString(arrayListOf(GeoPoint(currentCoordinate.y, currentCoordinate.x), GeoPoint(preCoordinate.y, preCoordinate.x))).toString()
|
||||
zLevelReference.geometry = GeometryTools.createLineString(
|
||||
arrayListOf(
|
||||
GeoPoint(
|
||||
currentCoordinate.y,
|
||||
currentCoordinate.x
|
||||
), GeoPoint(preCoordinate.y, preCoordinate.x)
|
||||
)
|
||||
).toString()
|
||||
referenceEntityList.add(zLevelReference)
|
||||
|
||||
val zLevelNameReference = createZLevelReference(renderEntity)
|
||||
zLevelNameReference.properties["type"] = "zlevelName"
|
||||
zLevelNameReference.properties["name"] = zLevel.toString()
|
||||
zLevelNameReference.geometry = GeometryTools.createGeometry(GeoPoint(preCoordinate.y, preCoordinate.x)).toString()
|
||||
zLevelNameReference.geometry =
|
||||
GeometryTools.createGeometry(GeoPoint(preCoordinate.y, preCoordinate.x))
|
||||
.toString()
|
||||
referenceEntityList.add(zLevelNameReference)
|
||||
}
|
||||
}
|
||||
@ -1261,6 +1353,7 @@ class ImportPreProcess {
|
||||
|
||||
private fun createZLevelReference(renderEntity: RenderEntity): ReferenceEntity {
|
||||
val zLevelReference = ReferenceEntity()
|
||||
// zLevelReference.renderEntityId = renderEntity.id
|
||||
//zLevelReference.renderEntityId = renderEntity.id
|
||||
zLevelReference.name = "${renderEntity.name}参考点"
|
||||
zLevelReference.code = renderEntity.code
|
||||
|
||||
@ -162,7 +162,7 @@ class OfflineMapDownloadScope(
|
||||
withContext(Dispatchers.Main) {
|
||||
downloadManager.mapController.layerManagerHandler.loadBaseMap()
|
||||
}
|
||||
}catch (e:Throwable){
|
||||
} catch (e: Throwable) {
|
||||
Log.e("jingo", "下载离线地图 load map ${e.message}")
|
||||
}
|
||||
|
||||
|
||||
@ -125,10 +125,13 @@ class TaskDownloadScope(
|
||||
it.errMsg = taskBean.errMsg
|
||||
//赋值时间,用于查询过滤
|
||||
it.operationTime = taskBean.operationTime
|
||||
Log.e("jingo","文件下载1,状态 ${it.status}")
|
||||
r.copyToRealmOrUpdate(it)
|
||||
taskBean = realm.copyFromRealm(it)
|
||||
Log.e("jingo","文件下载2,状态 ${taskBean.status}")
|
||||
}
|
||||
}
|
||||
realm.refresh()
|
||||
realm.close()
|
||||
}
|
||||
}
|
||||
@ -165,7 +168,7 @@ class TaskDownloadScope(
|
||||
this,
|
||||
object : MultiPathsCallback<String> {
|
||||
override fun onProgress(value: Int) {
|
||||
Log.e("jingo", "安装====$value")
|
||||
// Log.e("jingo", "安装====$value")
|
||||
}
|
||||
|
||||
override fun onError(t: Throwable) {
|
||||
@ -189,10 +192,13 @@ class TaskDownloadScope(
|
||||
it.errMsg = taskBean.errMsg
|
||||
//赋值时间,用于查询过滤
|
||||
it.operationTime = taskBean.operationTime
|
||||
Log.e("jingo","文件下载安装1,状态 ${it.status}")
|
||||
r.copyToRealmOrUpdate(it)
|
||||
taskBean = realm.copyFromRealm(it)
|
||||
Log.e("jingo","文件下载安装2,状态 ${taskBean.status}")
|
||||
}
|
||||
}
|
||||
realm.refresh()
|
||||
realm.close()
|
||||
}
|
||||
|
||||
|
||||
@ -95,6 +95,7 @@ class TaskUploadScope(
|
||||
it.errMsg = taskBean.errMsg
|
||||
//赋值时间,用于查询过滤
|
||||
it.operationTime = taskBean.operationTime
|
||||
Log.e("jingo","数据安装状态 ${it.status}")
|
||||
r.copyToRealmOrUpdate(it)
|
||||
taskBean = realm.copyFromRealm(it)
|
||||
}
|
||||
|
||||
@ -34,7 +34,7 @@ class LoginActivity : CheckPermissionsActivity() {
|
||||
binding.lifecycleOwner = this
|
||||
binding.activity = this
|
||||
initView()
|
||||
Log.e("jingo", getScreenParams())
|
||||
// Log.e("jingo", getScreenParams())
|
||||
UMConfigure.init(
|
||||
this,
|
||||
"650bece7b2f6fa00ba573c7a",
|
||||
|
||||
@ -51,9 +51,7 @@ import io.realm.Realm
|
||||
import io.realm.RealmConfiguration
|
||||
import io.realm.RealmSet
|
||||
import kotlinx.coroutines.*
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.flow.*
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import org.locationtech.jts.geom.Geometry
|
||||
import org.oscim.core.GeoPoint
|
||||
@ -184,6 +182,9 @@ class MainViewModel @Inject constructor(
|
||||
//状态
|
||||
val liveIndoorToolsCommand: MutableLiveData<IndoorToolsCommand> = MutableLiveData()
|
||||
|
||||
//播报语音流
|
||||
private var voiceFlow = MutableSharedFlow<String>()
|
||||
|
||||
/**
|
||||
* 是不是线选择模式
|
||||
*/
|
||||
@ -257,7 +258,7 @@ class MainViewModel @Inject constructor(
|
||||
//导航信息
|
||||
private var naviEngine: NaviEngine? = null
|
||||
|
||||
private var naviEngineNew: NaviEngineNew = NaviEngineNew(realmOperateHelper)
|
||||
// private var naviEngineNew: NaviEngineNew = NaviEngineNew(realmOperateHelper)
|
||||
|
||||
// 0:不导航 1:导航 2:暂停
|
||||
private var naviEngineStatus = 0
|
||||
@ -290,10 +291,10 @@ class MainViewModel @Inject constructor(
|
||||
mapController.mMapView.addOnNIMapClickListener(TAG,
|
||||
//处理地图点击操作
|
||||
object : OnGeoPointClickListener {
|
||||
override fun onMapClick(tag: String, point: GeoPoint) {
|
||||
override fun onMapClick(tag: String, point: GeoPoint, other: String) {
|
||||
if (tag == TAG) {
|
||||
//数据安装时不允许操作数据
|
||||
if(Constant.INSTALL_DATA){
|
||||
if (Constant.INSTALL_DATA) {
|
||||
return
|
||||
}
|
||||
if (bMeasuringTool) {
|
||||
@ -370,38 +371,32 @@ class MainViewModel @Inject constructor(
|
||||
.schemaVersion(2).build()
|
||||
MapParamUtils.setTaskConfig(Constant.currentSelectTaskConfig)
|
||||
socketServer = SocketServer(mapController, traceDataBase, sharedPreferences)
|
||||
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
|
||||
naviTestFlow().collect { point ->
|
||||
if (naviEngineStatus == 1) {
|
||||
naviEngineNew.let {
|
||||
// naviMutex.lock()
|
||||
if (testRealm == null)
|
||||
testRealm = realmOperateHelper.getSelectTaskRealmInstance()
|
||||
if (currentTaskBean != null) {
|
||||
naviEngineNew.bindingRoute(
|
||||
taskBean = currentTaskBean!!,
|
||||
geoPoint = point,
|
||||
realm = testRealm!!
|
||||
)
|
||||
}
|
||||
// it.bindingRoute(null, point)
|
||||
// naviMutex.unlock()
|
||||
}
|
||||
}
|
||||
//模拟定位,取屏幕中心点
|
||||
// viewModelScope.launch(Dispatchers.IO) {
|
||||
//
|
||||
// naviTestFlow().collect { point ->
|
||||
// if (naviEngineStatus == 1) {
|
||||
// naviMutex.lock()
|
||||
// naviEngine?.bindingRoute(null, point)
|
||||
// naviMutex.unlock()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
viewModelScope.launch(Dispatchers.Main) {
|
||||
voiceFlow.collect {
|
||||
speakMode?.speakText(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun naviTestFlow(): Flow<GeoPoint> = flow {
|
||||
|
||||
while (true) {
|
||||
emit(mapController.mMapView.vtmMap.mapPosition.geoPoint)
|
||||
delay(5000)
|
||||
}
|
||||
}
|
||||
// fun naviTestFlow(): Flow<GeoPoint> = flow {
|
||||
//
|
||||
// while (true) {
|
||||
// emit(mapController.mMapView.vtmMap.mapPosition.geoPoint)
|
||||
// delay(1000)
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* 获取当前任务
|
||||
@ -412,6 +407,7 @@ class MainViewModel @Inject constructor(
|
||||
val res = realm.where(TaskBean::class.java).equalTo("id", id).findFirst()
|
||||
if (res != null) {
|
||||
currentTaskBean = realm.copyFromRealm(res)
|
||||
Log.e("jingo", "获取任务 状态 ${currentTaskBean!!.status}")
|
||||
}
|
||||
realm.close()
|
||||
}
|
||||
@ -424,6 +420,23 @@ class MainViewModel @Inject constructor(
|
||||
naviMutex.lock()
|
||||
getTaskBean()
|
||||
if (currentTaskBean != null && currentTaskBean!!.status == FileManager.Companion.FileDownloadStatus.DONE) {
|
||||
if (currentTaskBean!!.navInfo == null) {
|
||||
liveDataMessage.postValue("还没有设置路径的起终点,请先设置")
|
||||
naviMutex.unlock()
|
||||
return@launch
|
||||
} else {
|
||||
currentTaskBean!!.navInfo?.let {
|
||||
if (it.naviStartLinkId.isEmpty() || it.naviStartNode.isEmpty()) {
|
||||
liveDataMessage.postValue("还没有设置路径的起点,请先设置")
|
||||
naviMutex.unlock()
|
||||
return@launch
|
||||
} else if (it.naviEndLinkId.isEmpty() || it.naviEndNode.isEmpty()) {
|
||||
liveDataMessage.postValue("还没有设置路径的终点,请先设置")
|
||||
naviMutex.unlock()
|
||||
return@launch
|
||||
}
|
||||
}
|
||||
}
|
||||
val naviOption = NaviOption(
|
||||
deviationCount = sharedPreferences.getInt(
|
||||
Constant.NAVI_DEVIATION_COUNT,
|
||||
@ -443,21 +456,19 @@ class MainViewModel @Inject constructor(
|
||||
naviOption = naviOption,
|
||||
callback = object : OnNaviEngineCallbackListener {
|
||||
|
||||
override fun planningPathStatus(
|
||||
status: NaviStatus, linkdId: String?,
|
||||
geometry: String?
|
||||
) {
|
||||
when (status) {
|
||||
override suspend fun planningPathStatus(code: NaviStatus, message: String, linkId: String?, geometry: String?) {
|
||||
Log.e("jingo", "路径计算 ${currentTaskBean!!.id} $code $message $linkId,$geometry")
|
||||
when (code) {
|
||||
NaviStatus.NAVI_STATUS_PATH_PLANNING -> naviEngineStatus = 0
|
||||
NaviStatus.NAVI_STATUS_PATH_ERROR_NODE -> naviEngineStatus = 0
|
||||
NaviStatus.NAVI_STATUS_PATH_ERROR_DIRECTION -> naviEngineStatus = 0
|
||||
NaviStatus.NAVI_STATUS_PATH_ERROR_BLOCKED -> naviEngineStatus = 0
|
||||
NaviStatus.NAVI_STATUS_PATH_SUCCESS -> naviEngineStatus = 1
|
||||
NaviStatus.NAVI_STATUS_DISTANCE_OFF -> {
|
||||
}
|
||||
NaviStatus.NAVI_STATUS_DISTANCE_OFF -> {}
|
||||
NaviStatus.NAVI_STATUS_DIRECTION_OFF -> {}
|
||||
NaviStatus.NAVI_STATUS_DATA_ERROR, NaviStatus.NAVI_STATUS_PATH_ERROR_BLOCKED, NaviStatus.NAVI_STATUS_NO_START_OR_END -> {
|
||||
naviEngineStatus = 0
|
||||
liveDataMessage.postValue("$message:$linkId")
|
||||
}
|
||||
}
|
||||
liveDataNaviStatus.postValue(status)
|
||||
liveDataNaviStatus.postValue(code)
|
||||
if (geometry != null) {
|
||||
viewModelScope.launch(Dispatchers.Main) {
|
||||
|
||||
@ -469,7 +480,6 @@ class MainViewModel @Inject constructor(
|
||||
envelope.minX,
|
||||
envelope.minY
|
||||
)
|
||||
|
||||
mapController.lineHandler.showLine(geometry)
|
||||
}
|
||||
}
|
||||
@ -496,6 +506,20 @@ class MainViewModel @Inject constructor(
|
||||
}
|
||||
liveDataSignList.postValue(signList)
|
||||
}
|
||||
|
||||
override suspend fun voicePlay(text: String): Boolean {
|
||||
speakMode?.let {
|
||||
if (it.isSpeaking()) {
|
||||
return false
|
||||
} else {
|
||||
withContext(Dispatchers.Main) {
|
||||
it.speakText(text)
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
})
|
||||
naviEngine!!.planningPath(currentTaskBean!!)
|
||||
} else {
|
||||
@ -587,14 +611,14 @@ class MainViewModel @Inject constructor(
|
||||
for (location in list) {
|
||||
Constant.TRACE_COUNT++
|
||||
|
||||
if(Constant.TRACE_COUNT%Constant.TRACE_COUNT_MORE_TIME==0){
|
||||
if (Constant.TRACE_COUNT % Constant.TRACE_COUNT_MORE_TIME == 0) {
|
||||
mapController.markerHandle.addNiLocationMarkerItemRough(location)
|
||||
Log.e("qj","${Constant.TRACE_COUNT}===轨迹")
|
||||
Log.e("qj", "${Constant.TRACE_COUNT}===轨迹")
|
||||
}
|
||||
|
||||
if(Constant.TRACE_COUNT%Constant.TRACE_COUNT_TIME==0){
|
||||
if (Constant.TRACE_COUNT % Constant.TRACE_COUNT_TIME == 0) {
|
||||
mapController.markerHandle.addNiLocationMarkerItemSimple(location)
|
||||
Log.e("qj","${Constant.TRACE_COUNT}===轨迹")
|
||||
Log.e("qj", "${Constant.TRACE_COUNT}===轨迹")
|
||||
}
|
||||
|
||||
mapController.markerHandle.addNiLocationMarkerItem(location)
|
||||
@ -607,7 +631,7 @@ class MainViewModel @Inject constructor(
|
||||
* 初始化定位信息
|
||||
*/
|
||||
private fun initLocation() {
|
||||
var gson = Gson();
|
||||
val gson = Gson();
|
||||
|
||||
//用于定位点存储到数据库
|
||||
viewModelScope.launch(Dispatchers.Default) {
|
||||
@ -663,21 +687,21 @@ class MainViewModel @Inject constructor(
|
||||
}
|
||||
//室内整理工具时不能进行轨迹存储,判断轨迹间隔要超过6并小于60米
|
||||
if (Constant.INDOOR_IP.isEmpty() && (disance == 0.0 || (disance > 6.0 && disance < 60))) {
|
||||
Log.e("jingo", "轨迹插入开始")
|
||||
CMLog.writeLogtoFile(MainViewModel::class.java.name,"insertTrace","开始")
|
||||
// Log.e("jingo", "轨迹插入开始")
|
||||
CMLog.writeLogtoFile(MainViewModel::class.java.name, "insertTrace", "开始")
|
||||
traceDataBase.niLocationDao.insert(location)
|
||||
mapController.markerHandle.addNiLocationMarkerItem(location)
|
||||
|
||||
if(Constant.TRACE_COUNT%Constant.TRACE_COUNT_TIME==0){
|
||||
if (Constant.TRACE_COUNT % Constant.TRACE_COUNT_TIME == 0) {
|
||||
mapController.markerHandle.addNiLocationMarkerItemSimple(location)
|
||||
}
|
||||
if(Constant.TRACE_COUNT%Constant.TRACE_COUNT_MORE_TIME==0){
|
||||
if (Constant.TRACE_COUNT % Constant.TRACE_COUNT_MORE_TIME == 0) {
|
||||
mapController.markerHandle.addNiLocationMarkerItemRough(location)
|
||||
}
|
||||
mapController.mMapView.vtmMap.updateMap(true)
|
||||
lastNiLocaion = location
|
||||
CMLog.writeLogtoFile(MainViewModel::class.java.name,"insertTrace",gson.toJson(location))
|
||||
Log.e("jingo", "轨迹插入结束")
|
||||
CMLog.writeLogtoFile(MainViewModel::class.java.name, "insertTrace", gson.toJson(location))
|
||||
// Log.e("jingo", "轨迹插入结束")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -836,10 +860,10 @@ class MainViewModel @Inject constructor(
|
||||
liveDataTopSignList.postValue(topSignList.distinctBy { it.name }
|
||||
.sortedBy { it.index })
|
||||
|
||||
val speechText = SignUtil.getRoadSpeechText(topSignList)
|
||||
withContext(Dispatchers.Main) {
|
||||
speakMode?.speakText(speechText)
|
||||
}
|
||||
// val speechText = SignUtil.getRoadSpeechText(topSignList)
|
||||
// withContext(Dispatchers.Main) {
|
||||
// speakMode?.speakText(speechText)
|
||||
// }
|
||||
linkIdCache = route.linkId ?: ""
|
||||
realm.close()
|
||||
}
|
||||
@ -854,7 +878,7 @@ class MainViewModel @Inject constructor(
|
||||
*/
|
||||
private suspend fun captureLink(point: GeoPoint) {
|
||||
|
||||
if (captureLinkState||Constant.INSTALL_DATA) {
|
||||
if (captureLinkState || Constant.INSTALL_DATA) {
|
||||
return
|
||||
}
|
||||
|
||||
@ -1037,10 +1061,10 @@ class MainViewModel @Inject constructor(
|
||||
.sortedBy { it.index })
|
||||
|
||||
liveDataSignList.postValue(signList.sortedBy { it.distance })
|
||||
val speechText = SignUtil.getRoadSpeechText(topSignList)
|
||||
withContext(Dispatchers.Main) {
|
||||
speakMode?.speakText(speechText)
|
||||
}
|
||||
// val speechText = SignUtil.getRoadSpeechText(topSignList)
|
||||
// withContext(Dispatchers.Main) {
|
||||
// speakMode?.speakText(speechText)
|
||||
// }
|
||||
linkIdCache = linkId ?: ""
|
||||
}
|
||||
} else {
|
||||
@ -1069,7 +1093,7 @@ class MainViewModel @Inject constructor(
|
||||
mapPosition.setBearing(0f) // 锁定角度,自动将地图旋转到正北方向
|
||||
mapController.mMapView.vtmMap.mapPosition = mapPosition
|
||||
mapController.locationLayerHandler.animateToCurrentPosition()
|
||||
naviEngineStatus = 1
|
||||
// naviEngineStatus = 1
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -139,7 +139,7 @@ class EvaluationResultViewModel @Inject constructor(
|
||||
|
||||
init {
|
||||
mapController.mMapView.addOnNIMapClickListener(TAG, object : OnGeoPointClickListener {
|
||||
override fun onMapClick(tag: String, point: GeoPoint) {
|
||||
override fun onMapClick(tag: String, point: GeoPoint,other:String) {
|
||||
if (tag == TAG) {
|
||||
liveDataQsRecordBean.value!!.geometry =
|
||||
GeometryTools.createGeometry(point).toText()
|
||||
|
||||
@ -1,30 +1,63 @@
|
||||
package com.navinfo.omqs.ui.fragment.tasklist
|
||||
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.navinfo.collect.library.data.entity.HadLinkDvoBean
|
||||
import com.navinfo.collect.library.data.entity.TaskBean
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.databinding.AdapterTaskBinding
|
||||
import com.navinfo.omqs.db.RealmOperateHelper
|
||||
import com.navinfo.omqs.ui.other.BaseRecyclerViewAdapter
|
||||
import com.navinfo.omqs.ui.other.BaseViewHolder
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
|
||||
interface TaskAdapterCallback {
|
||||
/**
|
||||
* 点击整体item
|
||||
*/
|
||||
fun itemOnClick(bean: HadLinkDvoBean)
|
||||
|
||||
/**
|
||||
* 点击编辑不作业理由按钮
|
||||
*/
|
||||
fun editOnClick(position: Int, bean: HadLinkDvoBean)
|
||||
|
||||
/**
|
||||
* 地图点击link,定位到项目条
|
||||
*/
|
||||
fun scrollPosition(position: Int)
|
||||
|
||||
/**
|
||||
* 设置起点
|
||||
*/
|
||||
fun setNaviStart(position: Int, bean: HadLinkDvoBean)
|
||||
|
||||
/**
|
||||
* 设置终点
|
||||
*/
|
||||
fun setNaviEnd(position: Int, bean: HadLinkDvoBean)
|
||||
|
||||
/**
|
||||
* 设置不参与路径计算的link
|
||||
*/
|
||||
fun setNavSkipLink(position: Int, bean: HadLinkDvoBean)
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前任务适配器
|
||||
*/
|
||||
class TaskAdapter(
|
||||
private val realmOperateHelper: RealmOperateHelper,
|
||||
private val coroutineScope: CoroutineScope,
|
||||
private val callback: TaskAdapterCallback
|
||||
) : BaseRecyclerViewAdapter<HadLinkDvoBean>() {
|
||||
private var selectPosition = -1
|
||||
|
||||
private lateinit var taskBean: TaskBean
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
|
||||
val viewBinding =
|
||||
@ -39,29 +72,47 @@ class TaskAdapter(
|
||||
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
|
||||
val binding: AdapterTaskBinding =
|
||||
holder.viewBinding as AdapterTaskBinding
|
||||
val context = binding.root.context
|
||||
val bean = data[position]
|
||||
if (bean.linkStatus == 1) {
|
||||
binding.taskHead.background =
|
||||
binding.root.context.getDrawable(R.drawable.selector_task_head)
|
||||
context.getDrawable(R.drawable.selector_task_head)
|
||||
} else {
|
||||
binding.taskHead.background =
|
||||
binding.root.context.getDrawable(R.drawable.selector_task_head_add_link)
|
||||
context.getDrawable(R.drawable.selector_task_head_add_link)
|
||||
}
|
||||
|
||||
if (taskBean.navInfo != null && taskBean.navInfo!!.naviStartLinkId == bean.linkPid) {
|
||||
binding.taskNaviIcon.visibility = View.VISIBLE
|
||||
binding.taskNaviIcon.background = context.getDrawable(R.drawable.navi_start_icon)
|
||||
} else if (taskBean.navInfo != null && taskBean.navInfo!!.naviEndLinkId == bean.linkPid) {
|
||||
binding.taskNaviIcon.visibility = View.VISIBLE
|
||||
binding.taskNaviIcon.background = context.getDrawable(R.drawable.navi_end_icon)
|
||||
} else if (!bean.isNavi) {
|
||||
binding.taskNaviIcon.visibility = View.VISIBLE
|
||||
binding.taskNaviIcon.background = context.getDrawable(R.drawable.navi_skip)
|
||||
} else {
|
||||
binding.taskNaviIcon.visibility = View.GONE
|
||||
}
|
||||
|
||||
|
||||
binding.taskLinkPid.text = "PID:${bean.linkPid}"
|
||||
binding.taskMesh.text = "mesh:${bean.mesh}"
|
||||
binding.root.isSelected = selectPosition == position
|
||||
binding.root.setOnClickListener {
|
||||
val pos = holder.adapterPosition
|
||||
if (selectPosition != pos) {
|
||||
val lastPos = selectPosition
|
||||
selectPosition = pos
|
||||
if (lastPos > -1 && lastPos < itemCount) {
|
||||
notifyItemChanged(lastPos)
|
||||
}
|
||||
binding.root.isSelected = true
|
||||
callback.itemOnClick(bean)
|
||||
//当前被选中
|
||||
if (selectPosition != position) {
|
||||
binding.naviLayout.visibility = View.GONE
|
||||
} else {
|
||||
binding.naviLayout.visibility = View.VISIBLE
|
||||
if (bean.isNavi) {
|
||||
binding.naviRouteSetSkip.text = "不参与路径计算"
|
||||
} else {
|
||||
binding.naviRouteSetSkip.text = "参与路径计算"
|
||||
}
|
||||
}
|
||||
binding.root.setOnClickListener {
|
||||
callback.itemOnClick(bean)
|
||||
}
|
||||
if (bean.reason == "") {
|
||||
binding.taskBadge.visibility = View.GONE
|
||||
} else {
|
||||
@ -70,6 +121,19 @@ class TaskAdapter(
|
||||
binding.taskEdit.setOnClickListener {
|
||||
callback.editOnClick(position, bean)
|
||||
}
|
||||
binding.naviRouteSetStartLink.setOnClickListener() {
|
||||
callback.setNaviStart(position, bean)
|
||||
}
|
||||
|
||||
binding.naviRouteSetEndLink.setOnClickListener() {
|
||||
callback.setNaviEnd(position, bean)
|
||||
}
|
||||
binding.naviRouteSetSkip.setOnClickListener(){
|
||||
bean.isNavi = !bean.isNavi
|
||||
callback.setNavSkipLink(position,bean)
|
||||
notifyItemChanged(position)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -80,9 +144,10 @@ class TaskAdapter(
|
||||
fun setSelectTag(tag: String) {
|
||||
for (i in data.indices) {
|
||||
if (data[i].linkPid == tag) {
|
||||
if (selectPosition > -1)
|
||||
notifyItemChanged(selectPosition)
|
||||
val lastPosition = selectPosition
|
||||
selectPosition = i
|
||||
if (lastPosition > -1)
|
||||
notifyItemChanged(lastPosition)
|
||||
notifyItemChanged(i)
|
||||
if (callback != null) {
|
||||
callback.scrollPosition(i)
|
||||
@ -91,6 +156,11 @@ class TaskAdapter(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun setTaskBean(taskBean: TaskBean) {
|
||||
this.taskBean = taskBean
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.EditText
|
||||
import android.widget.Toast
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
@ -16,6 +17,8 @@ import com.google.android.material.tabs.TabLayout
|
||||
import com.navinfo.collect.library.data.entity.HadLinkDvoBean
|
||||
import com.navinfo.omqs.R
|
||||
import com.navinfo.omqs.databinding.FragmentTaskBinding
|
||||
import com.navinfo.omqs.db.RealmOperateHelper
|
||||
import com.navinfo.omqs.ui.activity.map.MainViewModel
|
||||
import com.navinfo.omqs.ui.fragment.BaseFragment
|
||||
import com.navinfo.omqs.ui.other.shareViewModels
|
||||
import com.yanzhenjie.recyclerview.SwipeMenuBridge
|
||||
@ -24,6 +27,7 @@ import com.yanzhenjie.recyclerview.SwipeMenuItem
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.launch
|
||||
import org.videolan.vlc.Util
|
||||
import javax.inject.Inject
|
||||
|
||||
/**
|
||||
* 当前任务的道路列表
|
||||
@ -37,9 +41,14 @@ class TaskFragment : BaseFragment() {
|
||||
* 和[TaskManagerFragment],[TaskListFragment],[TaskFragment]共用同一个viewModel
|
||||
*/
|
||||
private val viewModel by shareViewModels<TaskViewModel>("Task")
|
||||
private val mainViewModel by activityViewModels<MainViewModel>()
|
||||
|
||||
@Inject
|
||||
lateinit var realmOperateHelper: RealmOperateHelper
|
||||
|
||||
private val binding get() = _binding!!
|
||||
private val adapter: TaskAdapter by lazy {
|
||||
TaskAdapter(object : TaskAdapterCallback {
|
||||
TaskAdapter(realmOperateHelper, lifecycleScope, object : TaskAdapterCallback {
|
||||
override fun itemOnClick(bean: HadLinkDvoBean) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
viewModel.showCurrentLink(bean)
|
||||
@ -51,7 +60,19 @@ class TaskFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
override fun scrollPosition(position: Int) {
|
||||
binding.taskRecyclerview.scrollToPosition(position)
|
||||
binding.taskRecyclerview.scrollToPosition(position)
|
||||
}
|
||||
|
||||
override fun setNaviStart(position: Int, bean: HadLinkDvoBean) {
|
||||
viewModel.setNaviStartOrEnd(bean,true)
|
||||
}
|
||||
|
||||
override fun setNaviEnd(position: Int, bean: HadLinkDvoBean) {
|
||||
viewModel.setNaviStartOrEnd(bean,false)
|
||||
}
|
||||
|
||||
override fun setNavSkipLink(position: Int, bean: HadLinkDvoBean) {
|
||||
viewModel.setSkipLink(bean)
|
||||
}
|
||||
})
|
||||
}
|
||||
@ -76,11 +97,11 @@ class TaskFragment : BaseFragment() {
|
||||
binding.taskAddLink.isSelected = it
|
||||
}
|
||||
|
||||
viewModel.liveDataAddLinkDialog.observe(viewLifecycleOwner){
|
||||
viewModel.addTaskLink(requireContext(),it)
|
||||
viewModel.liveDataAddLinkDialog.observe(viewLifecycleOwner) {
|
||||
viewModel.addTaskLink(requireContext(), it)
|
||||
}
|
||||
viewModel.liveDataUpdateTask.observe(viewLifecycleOwner) {
|
||||
|
||||
adapter.setTaskBean(it)
|
||||
}
|
||||
|
||||
//注意:使用滑动菜单不能开启滑动删除,否则只有滑动删除没有滑动菜单
|
||||
@ -132,8 +153,8 @@ class TaskFragment : BaseFragment() {
|
||||
}
|
||||
|
||||
})
|
||||
viewModel.liveDataSelectLink.observe(viewLifecycleOwner){
|
||||
adapter.setSelectTag(it)
|
||||
viewModel.liveDataSelectLink.observe(viewLifecycleOwner) {
|
||||
adapter.setSelectTag(it.linkPid)
|
||||
}
|
||||
}
|
||||
|
||||
@ -152,7 +173,7 @@ class TaskFragment : BaseFragment() {
|
||||
requireContext()
|
||||
).setTitle("标记原因").setView(view)
|
||||
var editText = view.findViewById<EditText>(R.id.dialog_edittext)
|
||||
view.findViewById<TabLayout>(R.id.search_tab_layout).visibility=View.GONE
|
||||
view.findViewById<TabLayout>(R.id.search_tab_layout).visibility = View.GONE
|
||||
editText.setText(bean.reason)
|
||||
inputDialog.setNegativeButton("取消") { dialog, _ ->
|
||||
dialog.dismiss()
|
||||
|
||||
@ -325,13 +325,13 @@ class TaskListAdapter(
|
||||
if (binding.taskProgressText.visibility != View.VISIBLE) binding.taskProgressText.visibility =
|
||||
View.VISIBLE
|
||||
binding.taskDownloadBtn.setText("安装中")
|
||||
Log.e("jingo", "更新进度条 ${taskBean.message}")
|
||||
// Log.e("jingo", "更新进度条 ${taskBean.message}")
|
||||
val split = taskBean.message.split("/")
|
||||
if (split.size == 2) {
|
||||
try {
|
||||
val index = split[0].toInt()
|
||||
val count = split[1].toInt()
|
||||
Log.e("jingo", "更新进度条 $index====$count")
|
||||
// Log.e("jingo", "更新进度条 $index====$count")
|
||||
binding.taskProgressText.text = "${index * 100 / count}%"
|
||||
} catch (e: Exception) {
|
||||
Log.e("jingo", "更新进度条 $e")
|
||||
|
||||
@ -136,7 +136,7 @@ class TaskListFragment : BaseFragment() {
|
||||
|
||||
viewModel.liveDataTaskList.observe(viewLifecycleOwner) {
|
||||
loadFinish()
|
||||
adapter.initSelectTask(it, viewModel.currentSelectTaskBean?.id)
|
||||
adapter.initSelectTask(it, viewModel.liveDataUpdateTask.value?.id)
|
||||
var position = adapter.getSelectTaskPosition()
|
||||
if(position<0){
|
||||
position = 0
|
||||
|
||||
@ -13,6 +13,7 @@ import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.navinfo.collect.library.data.dao.impl.TraceDataBase
|
||||
import com.navinfo.collect.library.data.entity.*
|
||||
import com.navinfo.collect.library.enums.DataCodeEnum
|
||||
import com.navinfo.collect.library.map.NIMapController
|
||||
import com.navinfo.collect.library.map.OnGeoPointClickListener
|
||||
import com.navinfo.collect.library.utils.GeometryTools
|
||||
@ -120,12 +121,12 @@ class TaskViewModel @Inject constructor(
|
||||
/**
|
||||
* 点击地图选中的link
|
||||
*/
|
||||
val liveDataSelectLink = MutableLiveData<String>()
|
||||
val liveDataSelectLink = MutableLiveData<HadLinkDvoBean>()
|
||||
|
||||
/**
|
||||
* 当前选中的任务
|
||||
*/
|
||||
var currentSelectTaskBean: TaskBean? = null
|
||||
// var currentSelectTaskBean: TaskBean? = null
|
||||
|
||||
/**
|
||||
* 任务列表查询协程
|
||||
@ -134,6 +135,17 @@ class TaskViewModel @Inject constructor(
|
||||
|
||||
private var filterTaskJob: Job? = null
|
||||
|
||||
/**
|
||||
* 是否正在选择导航起点
|
||||
*/
|
||||
private var isSelectNaviStartPoint = false
|
||||
|
||||
/**
|
||||
* 是否正在选择导航终点
|
||||
*/
|
||||
private var isSelectNaviEndPoint = false
|
||||
|
||||
|
||||
/**
|
||||
* 是否开启了道路选择
|
||||
*/
|
||||
@ -148,12 +160,14 @@ class TaskViewModel @Inject constructor(
|
||||
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
|
||||
mapController.mMapView.addOnNIMapClickListener(TAG, object : OnGeoPointClickListener {
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
override fun onMapClick(tag: String, point: GeoPoint) {
|
||||
override fun onMapClick(tag: String, point: GeoPoint, other: String) {
|
||||
if (tag == TAG) {
|
||||
if (liveDataSelectNewLink.value == true) {
|
||||
if ((isSelectNaviStartPoint || isSelectNaviEndPoint) && other.isNotEmpty()) {
|
||||
updateTaskNavInfo(other)
|
||||
} else if (liveDataSelectNewLink.value == true) {
|
||||
viewModelScope.launch(Dispatchers.Default) {
|
||||
val realm = realmOperateHelper.getSelectTaskRealmInstance()
|
||||
if (currentSelectTaskBean == null) {
|
||||
if (liveDataUpdateTask.value == null) {
|
||||
liveDataToastMessage.postValue("还没有开启任何任务")
|
||||
} else {
|
||||
val links = realmOperateHelper.queryLink(
|
||||
@ -162,7 +176,7 @@ class TaskViewModel @Inject constructor(
|
||||
)
|
||||
if (links.isNotEmpty()) {
|
||||
val l = links[0]
|
||||
for (link in currentSelectTaskBean!!.hadLinkDvoList) {
|
||||
for (link in liveDataUpdateTask.value!!.hadLinkDvoList) {
|
||||
if (link.linkPid == l.linkPid) {
|
||||
return@launch
|
||||
}
|
||||
@ -181,13 +195,17 @@ class TaskViewModel @Inject constructor(
|
||||
)
|
||||
if (links.isNotEmpty()) {
|
||||
val l = links[0]
|
||||
for (link in currentSelectTaskBean!!.hadLinkDvoList) {
|
||||
if (link.linkPid == l.linkPid) {
|
||||
liveDataSelectLink.postValue(link.linkPid)
|
||||
mapController.lineHandler.showLine(link.geometry)
|
||||
break
|
||||
liveDataUpdateTask.value?.let { value->
|
||||
for (link in value.hadLinkDvoList) {
|
||||
if (link.linkPid == l.linkPid) {
|
||||
|
||||
liveDataSelectLink.postValue(link)
|
||||
mapController.lineHandler.showLine(link.geometry)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
realm.close()
|
||||
}
|
||||
@ -312,10 +330,10 @@ class TaskViewModel @Inject constructor(
|
||||
if (id > -1) {
|
||||
for (item in taskList) {
|
||||
if (item.id == id) {
|
||||
currentSelectTaskBean = item
|
||||
liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList)
|
||||
liveDataUpdateTask.postValue(item)
|
||||
liveDataTaskLinks.postValue(item.hadLinkDvoList)
|
||||
withContext(Dispatchers.Main) {
|
||||
showTaskLinks(currentSelectTaskBean!!)
|
||||
showTaskLinks(liveDataUpdateTask.value!!)
|
||||
}
|
||||
break
|
||||
}
|
||||
@ -331,14 +349,14 @@ class TaskViewModel @Inject constructor(
|
||||
|
||||
sharedPreferences.edit().putInt(Constant.SELECT_TASK_ID, taskBean.id).apply()
|
||||
|
||||
currentSelectTaskBean = taskBean
|
||||
liveDataUpdateTask.value = taskBean
|
||||
|
||||
liveDataTaskLinks.value = taskBean.hadLinkDvoList
|
||||
|
||||
liveDataLoadTask.postValue(TaskLoadStatus.TASK_LOAD_STATUS_BEGIN)
|
||||
|
||||
showTaskLinks(taskBean)
|
||||
|
||||
mapController.lineHandler.removeLine()
|
||||
//重新加载轨迹
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
Constant.TRACE_COUNT = 0
|
||||
@ -347,13 +365,13 @@ class TaskViewModel @Inject constructor(
|
||||
).niLocationDao.findToTaskIdAll(taskBean.id.toString())
|
||||
list!!.forEach {
|
||||
|
||||
Constant.TRACE_COUNT ++
|
||||
Constant.TRACE_COUNT++
|
||||
|
||||
if(Constant.TRACE_COUNT%Constant.TRACE_COUNT_MORE_TIME==0){
|
||||
if (Constant.TRACE_COUNT % Constant.TRACE_COUNT_MORE_TIME == 0) {
|
||||
mapController.markerHandle.addNiLocationMarkerItemRough(it)
|
||||
}
|
||||
|
||||
if(Constant.TRACE_COUNT%Constant.TRACE_COUNT_TIME==0){
|
||||
if (Constant.TRACE_COUNT % Constant.TRACE_COUNT_TIME == 0) {
|
||||
mapController.markerHandle.addNiLocationMarkerItemSimple(it)
|
||||
}
|
||||
|
||||
@ -361,7 +379,7 @@ class TaskViewModel @Inject constructor(
|
||||
|
||||
}
|
||||
liveDataLoadTask.postValue(TaskLoadStatus.TASK_LOAD_STATUS_FISISH)
|
||||
withContext(Dispatchers.Main){
|
||||
withContext(Dispatchers.Main) {
|
||||
MapParamUtils.setTaskId(taskBean.id)
|
||||
Constant.currentSelectTaskFolder = File(Constant.USER_DATA_PATH + "/${taskBean.id}")
|
||||
Constant.currentSelectTaskConfig =
|
||||
@ -427,24 +445,193 @@ class TaskViewModel @Inject constructor(
|
||||
* 高亮当前选中的link
|
||||
*/
|
||||
fun showCurrentLink(link: HadLinkDvoBean) {
|
||||
isSelectNaviStartPoint = false
|
||||
isSelectNaviEndPoint = false
|
||||
liveDataSelectLink.value = link
|
||||
mapController.markerHandle.removeNaviMarkerLayer()
|
||||
mapController.lineHandler.showLine(link.geometry)
|
||||
// mapController.lineHandler.omdbTaskLinkLayer.showSelectLine(link)
|
||||
val geometry = GeometryTools.createGeometry(link.geometry)
|
||||
if (geometry != null) {
|
||||
val envelope = geometry.envelopeInternal
|
||||
mapController.animationHandler.animateToBox(
|
||||
maxX = envelope.maxX,
|
||||
maxY = envelope.maxY,
|
||||
minX = envelope.minX,
|
||||
minY = envelope.minY
|
||||
maxX = envelope.maxX + 0.0005,
|
||||
maxY = envelope.maxY + 0.0005,
|
||||
minX = envelope.minX - 0.0005,
|
||||
minY = envelope.minY - 0.0005
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
fun setSkipLink(bean: HadLinkDvoBean) {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val realm = realmOperateHelper.getRealmDefaultInstance()
|
||||
realm.executeTransaction{
|
||||
realm.copyToRealmOrUpdate(bean)
|
||||
}
|
||||
realm.close()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置导航路径起始link
|
||||
*/
|
||||
fun setNaviStartOrEnd(bean: HadLinkDvoBean, bStart: Boolean) {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val realm = realmOperateHelper.getSelectTaskRealmInstance()
|
||||
|
||||
val resDir = realm.where(RenderEntity::class.java)
|
||||
.equalTo("linkPid", bean.linkPid)
|
||||
.equalTo("table", DataCodeEnum.OMDB_LINK_DIRECT.name).findFirst()
|
||||
if (resDir == null) {
|
||||
realm.close()
|
||||
liveDataToastMessage.postValue("link属性数据缺失,请先下载数据")
|
||||
return@launch
|
||||
}
|
||||
val direct = resDir.properties["direct"]
|
||||
val resRd = realm.where(RenderEntity::class.java)
|
||||
.equalTo("linkPid", bean.linkPid)
|
||||
.equalTo("table", DataCodeEnum.OMDB_RD_LINK.name).findFirst()
|
||||
|
||||
var sNodeId: String? = null
|
||||
var eNodeId: String? = null
|
||||
resRd?.let { rd ->
|
||||
sNodeId = rd.linkRelation!!.sNodeId
|
||||
eNodeId = rd.linkRelation!!.eNodeId
|
||||
}
|
||||
realm.close()
|
||||
if (sNodeId == null || eNodeId == null) {
|
||||
liveDataToastMessage.postValue("link属性数据缺失,请先下载数据")
|
||||
return@launch
|
||||
}
|
||||
when (direct) {
|
||||
"2" -> {
|
||||
liveDataUpdateTask.value?.let { taskBean ->
|
||||
if (taskBean.navInfo == null)
|
||||
taskBean.navInfo = NavInfo(taskBean.id)
|
||||
taskBean.navInfo?.let { navInfo ->
|
||||
if (bStart) {
|
||||
navInfo.naviStartLinkId = bean.linkPid
|
||||
navInfo.naviStartNode = sNodeId!!
|
||||
if (navInfo.naviEndLinkId == bean.linkPid) {
|
||||
navInfo.naviEndLinkId = ""
|
||||
navInfo.naviEndNode = ""
|
||||
}
|
||||
} else {
|
||||
navInfo.naviEndLinkId = bean.linkPid
|
||||
navInfo.naviEndNode = eNodeId!!
|
||||
if (navInfo.naviStartLinkId == bean.linkPid) {
|
||||
navInfo.naviStartLinkId = ""
|
||||
navInfo.naviStartNode = ""
|
||||
}
|
||||
}
|
||||
val realm = realmOperateHelper.getRealmDefaultInstance()
|
||||
realm.executeTransaction {
|
||||
it.copyToRealmOrUpdate(taskBean)
|
||||
}
|
||||
realm.close()
|
||||
liveDataUpdateTask.postValue(taskBean)
|
||||
}
|
||||
}
|
||||
}
|
||||
"3" -> {
|
||||
liveDataUpdateTask.value?.let { taskBean ->
|
||||
if (taskBean.navInfo == null)
|
||||
taskBean.navInfo = NavInfo(taskBean.id)
|
||||
taskBean.navInfo?.let { navInfo ->
|
||||
if (bStart) {
|
||||
navInfo.naviStartLinkId = bean.linkPid
|
||||
navInfo.naviStartNode = eNodeId!!
|
||||
if (navInfo.naviEndLinkId == bean.linkPid) {
|
||||
navInfo.naviEndLinkId = ""
|
||||
navInfo.naviEndNode = ""
|
||||
}
|
||||
} else {
|
||||
navInfo.naviEndLinkId = bean.linkPid
|
||||
navInfo.naviEndNode = sNodeId!!
|
||||
if (navInfo.naviStartLinkId == bean.linkPid) {
|
||||
navInfo.naviStartLinkId = ""
|
||||
navInfo.naviStartNode = ""
|
||||
}
|
||||
}
|
||||
val realm = realmOperateHelper.getRealmDefaultInstance()
|
||||
realm.executeTransaction {
|
||||
it.copyToRealmOrUpdate(taskBean)
|
||||
}
|
||||
realm.close()
|
||||
liveDataUpdateTask.postValue(taskBean)
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
liveDataToastMessage.postValue("当前link为双方向道路,不能自动确定起终点,请选择")
|
||||
val list = GeometryTools.getGeoPoints(bean.geometry)
|
||||
withContext(Dispatchers.Main) {
|
||||
if (bStart) {
|
||||
isSelectNaviStartPoint = true
|
||||
isSelectNaviEndPoint = false
|
||||
} else {
|
||||
isSelectNaviStartPoint = false
|
||||
isSelectNaviEndPoint = true
|
||||
}
|
||||
mapController.markerHandle.showNaviStartOrEndLayer(list.first(), list.last(), sNodeId!!, eNodeId!!, bStart)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*更新导航配置信息
|
||||
*/
|
||||
fun updateTaskNavInfo(nodeId: String) {
|
||||
liveDataSelectLink.value?.let { linkBean ->
|
||||
liveDataUpdateTask.value?.let { taskBean ->
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
if (taskBean.navInfo == null)
|
||||
taskBean.navInfo = NavInfo(taskBean.id)
|
||||
taskBean.navInfo?.let { navInfo ->
|
||||
if (isSelectNaviStartPoint) {
|
||||
navInfo.naviStartLinkId = linkBean.linkPid
|
||||
navInfo.naviStartNode = nodeId
|
||||
if (navInfo.naviEndLinkId == linkBean.linkPid) {
|
||||
navInfo.naviEndLinkId = ""
|
||||
navInfo.naviEndNode = ""
|
||||
}
|
||||
} else if (isSelectNaviEndPoint) {
|
||||
navInfo.naviEndLinkId = linkBean.linkPid
|
||||
navInfo.naviEndNode = nodeId
|
||||
if (navInfo.naviStartLinkId == linkBean.linkPid) {
|
||||
navInfo.naviStartLinkId = ""
|
||||
navInfo.naviStartNode = ""
|
||||
}
|
||||
}
|
||||
val realm = realmOperateHelper.getRealmDefaultInstance()
|
||||
realm.executeTransaction {
|
||||
it.copyToRealmOrUpdate(taskBean)
|
||||
}
|
||||
realm.close()
|
||||
liveDataUpdateTask.postValue(taskBean)
|
||||
}
|
||||
|
||||
withContext(Dispatchers.Main) {
|
||||
mapController.markerHandle.removeNaviMarkerLayer()
|
||||
}
|
||||
isSelectNaviEndPoint = false
|
||||
isSelectNaviStartPoint = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
mapController.mMapView.removeOnNIMapClickListener(TAG)
|
||||
mapController.lineHandler.removeAllLine()
|
||||
mapController.markerHandle.removeNaviMarkerLayer()
|
||||
sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
|
||||
super.onCleared()
|
||||
}
|
||||
@ -454,7 +641,7 @@ class TaskViewModel @Inject constructor(
|
||||
*/
|
||||
suspend fun saveLinkReason(bean: HadLinkDvoBean, text: String) {
|
||||
withContext(Dispatchers.IO) {
|
||||
currentSelectTaskBean?.let {
|
||||
liveDataUpdateTask.value?.let {
|
||||
for (item in it.hadLinkDvoList) {
|
||||
if (item.linkPid == bean.linkPid) {
|
||||
item.reason = text
|
||||
@ -489,13 +676,13 @@ class TaskViewModel @Inject constructor(
|
||||
* 筛选link
|
||||
*/
|
||||
fun filterTask(pidKey: String) {
|
||||
if (currentSelectTaskBean == null) return
|
||||
if (liveDataUpdateTask.value == null) return
|
||||
|
||||
if (filterTaskJob != null) filterTaskJob!!.cancel()
|
||||
filterTaskJob = viewModelScope.launch(Dispatchers.Default) {
|
||||
delay(500)
|
||||
val list = mutableListOf<HadLinkDvoBean>()
|
||||
for (item in currentSelectTaskBean!!.hadLinkDvoList) {
|
||||
for (item in liveDataUpdateTask.value!!.hadLinkDvoList) {
|
||||
if (item.linkPid.contains(pidKey)) list.add(item)
|
||||
}
|
||||
liveDataTaskLinks.postValue(list)
|
||||
@ -547,7 +734,7 @@ class TaskViewModel @Inject constructor(
|
||||
realm.close()
|
||||
liveDataCloseTask.postValue(TaskDelStatus.TASK_DEL_STATUS_SUCCESS)
|
||||
withContext(Dispatchers.Main) {
|
||||
if (taskBean.id == currentSelectTaskBean?.id ?: 0) {
|
||||
if (taskBean.id == liveDataUpdateTask.value?.id ?: 0) {
|
||||
mapController.layerManagerHandler.updateOMDBVectorTileLayer()
|
||||
} else {
|
||||
setSelectTaskBean(taskBean)
|
||||
@ -717,18 +904,18 @@ class TaskViewModel @Inject constructor(
|
||||
dialog.dismiss()
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
val hadLinkDvoBean = HadLinkDvoBean(
|
||||
taskId = currentSelectTaskBean!!.id,
|
||||
taskId = liveDataUpdateTask.value!!.id,
|
||||
linkPid = data.linkPid,
|
||||
geometry = data.geometry,
|
||||
linkStatus = 2
|
||||
)
|
||||
currentSelectTaskBean!!.hadLinkDvoList.add(
|
||||
liveDataUpdateTask.value!!.hadLinkDvoList.add(
|
||||
hadLinkDvoBean
|
||||
)
|
||||
val realm = realmOperateHelper.getRealmDefaultInstance()
|
||||
realm.executeTransaction { r ->
|
||||
r.copyToRealmOrUpdate(hadLinkDvoBean)
|
||||
r.copyToRealmOrUpdate(currentSelectTaskBean!!)
|
||||
r.copyToRealmOrUpdate(liveDataUpdateTask.value!!)
|
||||
}
|
||||
//根据Link数据查询对应数据上要素,对要素进行显示重置
|
||||
data.linkPid.let {
|
||||
@ -742,7 +929,7 @@ class TaskViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
}
|
||||
liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList)
|
||||
liveDataTaskLinks.postValue(liveDataUpdateTask.value!!.hadLinkDvoList)
|
||||
mapController.lineHandler.addTaskLink(hadLinkDvoBean)
|
||||
mapController.layerManagerHandler.updateOMDBVectorTileLayer()
|
||||
mapController.mMapView.vtmMap.updateMap(true)
|
||||
@ -804,9 +991,9 @@ class TaskViewModel @Inject constructor(
|
||||
}
|
||||
|
||||
realm.executeTransaction {
|
||||
for (link in currentSelectTaskBean!!.hadLinkDvoList) {
|
||||
for (link in liveDataUpdateTask.value!!.hadLinkDvoList) {
|
||||
if (link.linkPid == hadLinkDvoBean.linkPid) {
|
||||
currentSelectTaskBean!!.hadLinkDvoList.remove(link)
|
||||
liveDataUpdateTask.value!!.hadLinkDvoList.remove(link)
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -823,9 +1010,9 @@ class TaskViewModel @Inject constructor(
|
||||
markers.deleteAllFromRealm()
|
||||
}
|
||||
|
||||
realm.copyToRealmOrUpdate(currentSelectTaskBean)
|
||||
realm.copyToRealmOrUpdate(liveDataUpdateTask.value)
|
||||
mapController.lineHandler.removeTaskLink(hadLinkDvoBean.linkPid)
|
||||
liveDataTaskLinks.postValue(currentSelectTaskBean!!.hadLinkDvoList)
|
||||
liveDataTaskLinks.postValue(liveDataUpdateTask.value!!.hadLinkDvoList)
|
||||
}
|
||||
realm.close()
|
||||
}
|
||||
@ -838,4 +1025,6 @@ class TaskViewModel @Inject constructor(
|
||||
mDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1,9 +1,7 @@
|
||||
package com.navinfo.omqs.util
|
||||
|
||||
import android.util.Log
|
||||
import com.navinfo.collect.library.data.entity.NiLocation
|
||||
import com.navinfo.collect.library.data.entity.RenderEntity
|
||||
import com.navinfo.collect.library.data.entity.TaskBean
|
||||
import com.navinfo.collect.library.data.entity.*
|
||||
import com.navinfo.collect.library.enums.DataCodeEnum
|
||||
import com.navinfo.collect.library.map.NIMapController
|
||||
import com.navinfo.collect.library.utils.GeometryTools
|
||||
@ -11,27 +9,27 @@ import com.navinfo.omqs.bean.NaviRoute
|
||||
import com.navinfo.omqs.bean.NaviRouteItem
|
||||
import com.navinfo.omqs.db.RealmOperateHelper
|
||||
import io.realm.Realm
|
||||
import org.locationtech.jts.geom.Geometry
|
||||
import org.locationtech.jts.geom.LineString
|
||||
import org.locationtech.jts.geom.Point
|
||||
import org.oscim.core.GeoPoint
|
||||
|
||||
interface OnNaviEngineCallbackListener {
|
||||
fun planningPathStatus(code: NaviStatus, linkdId: String? = null, geometry: String? = null)
|
||||
suspend fun planningPathStatus(code: NaviStatus, message: String = "", linkId: String? = null, geometry: String? = null)
|
||||
|
||||
// fun planningPathError(errorCode: NaviStatus, errorMessage: String)
|
||||
suspend fun bindingResults(route: NaviRoute?, list: List<NaviRouteItem>)
|
||||
|
||||
suspend fun voicePlay(text: String): Boolean
|
||||
}
|
||||
|
||||
enum class NaviStatus {
|
||||
NAVI_STATUS_PATH_PLANNING, //路径规划中
|
||||
NAVI_STATUS_PATH_ERROR_NODE,//node点缺失
|
||||
NAVI_STATUS_PATH_ERROR_DIRECTION,//缺少方向
|
||||
NAVI_STATUS_PATH_ERROR_BLOCKED,//路径不通
|
||||
NAVI_STATUS_PATH_SUCCESS,//路径规划成功
|
||||
NAVI_STATUS_DISTANCE_OFF,//距离偏离
|
||||
NAVI_STATUS_DIRECTION_OFF,//方向偏离
|
||||
NAVI_STATUS_DATA_ERROR,//数据错误
|
||||
NAVI_STATUS_NO_START_OR_END,//没有设置起终点
|
||||
}
|
||||
|
||||
|
||||
@ -88,6 +86,8 @@ class NaviEngine(
|
||||
DataCodeEnum.OMDB_RD_LINK.name,
|
||||
DataCodeEnum.OMDB_LINK_DIRECT.name,
|
||||
DataCodeEnum.OMDB_LINK_NAME.name,
|
||||
DataCodeEnum.OMDB_RD_LINK_KIND.name,
|
||||
DataCodeEnum.OMDB_LINK_SPEEDLIMIT.name
|
||||
)
|
||||
|
||||
// /**
|
||||
@ -143,12 +143,12 @@ class NaviEngine(
|
||||
/**
|
||||
* 整条路的几何
|
||||
*/
|
||||
var geometry: LineString? = null
|
||||
private var geometry: LineString? = null
|
||||
|
||||
/**
|
||||
* 临时路径
|
||||
*/
|
||||
var tempGeometry: LineString? = null
|
||||
private var tempGeometry: LineString? = null
|
||||
|
||||
/**
|
||||
* 定位点集合
|
||||
@ -158,13 +158,14 @@ class NaviEngine(
|
||||
/**
|
||||
* 局部匹配时的路段
|
||||
*/
|
||||
var tempRoutList = mutableListOf<NaviRoute>()
|
||||
private var tempRoutList = mutableListOf<NaviRoute>()
|
||||
|
||||
private var currentRoadName = ""
|
||||
|
||||
/**
|
||||
* 所有路段集合
|
||||
*/
|
||||
var routeList = mutableListOf<NaviRoute>()
|
||||
private var routeList = mutableListOf<NaviRoute>()
|
||||
get() {
|
||||
return field
|
||||
}
|
||||
@ -201,6 +202,109 @@ class NaviEngine(
|
||||
field = value
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询,反转link
|
||||
*/
|
||||
private suspend fun findNaviRouteByLinkId(realm: Realm, linkId: String, startNodeId: String? = null, endNodeId: String? = null): NaviRoute? {
|
||||
val res = realm.where(RenderEntity::class.java).`in`("table", QUERY_KEY_LINK_INFO_LIST)
|
||||
.equalTo("linkPid", linkId).findAll()
|
||||
if (res != null) {
|
||||
/**
|
||||
* 是不是有node点
|
||||
*/
|
||||
var bHasNode = false
|
||||
var bHasDir = false
|
||||
var bHasName = false
|
||||
var bHasKind = false
|
||||
val route = NaviRoute(
|
||||
linkId = linkId,
|
||||
)
|
||||
|
||||
for (entity in res) {
|
||||
when (entity.code) {
|
||||
DataCodeEnum.OMDB_RD_LINK.code -> {
|
||||
bHasNode = true
|
||||
val snodePid = entity.properties["snodePid"]
|
||||
if (snodePid != null) {
|
||||
route.sNode = snodePid
|
||||
} else {
|
||||
bHasNode = false
|
||||
}
|
||||
val enodePid = entity.properties["enodePid"]
|
||||
if (enodePid != null) {
|
||||
route.eNode = enodePid
|
||||
} else {
|
||||
bHasNode = false
|
||||
}
|
||||
route.pointList = GeometryTools.getGeoPoints(entity.geometry)
|
||||
}
|
||||
DataCodeEnum.OMDB_LINK_DIRECT.code -> {
|
||||
val direct = entity.properties["direct"]
|
||||
if (direct != null) {
|
||||
bHasDir = true
|
||||
route.direct = direct.toInt()
|
||||
}
|
||||
}
|
||||
DataCodeEnum.OMDB_LINK_NAME.code -> {
|
||||
bHasName = true
|
||||
route.name = realm.copyFromRealm(entity)
|
||||
}
|
||||
DataCodeEnum.OMDB_LINK_SPEEDLIMIT.code -> {
|
||||
route.speedLimit = "${entity.properties["maxSpeed"]}"
|
||||
}
|
||||
DataCodeEnum.OMDB_RD_LINK_KIND.code -> {
|
||||
val kind = entity.properties["kind"]
|
||||
if (kind != null) {
|
||||
bHasKind = true
|
||||
route.kind = kind
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!bHasNode) {
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_DATA_ERROR, "link缺少node数据", linkId)
|
||||
return null
|
||||
}
|
||||
if (!bHasDir) {
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_DATA_ERROR, "link缺少方向数据", linkId)
|
||||
return null
|
||||
}
|
||||
if (!bHasKind) {
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_DATA_ERROR, "link缺少种别数据", linkId)
|
||||
return null
|
||||
}
|
||||
//根据起终点反转方向
|
||||
if (startNodeId != null) {
|
||||
if (startNodeId == route.eNode) {
|
||||
//顺方向,起点和终点还不一致的
|
||||
if (route.direct == 2) {
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_DATA_ERROR, "link为顺方向,与行进方向不符,请检查数据", linkId)
|
||||
return null
|
||||
} else {
|
||||
route.pointList.reverse()
|
||||
route.eNode = route.sNode
|
||||
route.sNode = startNodeId
|
||||
}
|
||||
}
|
||||
} else if (endNodeId != null) {
|
||||
if (endNodeId == route.sNode) {
|
||||
//顺方向,起点和终点还不一致的
|
||||
if (route.direct == 2) {
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_DATA_ERROR, "link为顺方向,与行进方向不符,请检查数据", linkId)
|
||||
return null
|
||||
} else {
|
||||
route.pointList.reverse()
|
||||
val tempNode = route.sNode
|
||||
route.sNode = route.eNode
|
||||
route.eNode = tempNode
|
||||
}
|
||||
}
|
||||
}
|
||||
return route
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算路径
|
||||
*/
|
||||
@ -208,169 +312,127 @@ class NaviEngine(
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_PATH_PLANNING)
|
||||
val pathList = mutableListOf<NaviRoute>()
|
||||
val realm = realmOperateHelper.getSelectTaskRealmInstance()
|
||||
Log.e("jingo", "路径计算 条数 ${taskBean.hadLinkDvoList.size}")
|
||||
for (i in 0 until taskBean.hadLinkDvoList.size) {
|
||||
val link = taskBean.hadLinkDvoList[i]
|
||||
Log.e("jingo","获取 S E $i 总共 ${taskBean.hadLinkDvoList.size}")
|
||||
//测线不参与导航
|
||||
if (link!!.linkStatus == 3) {
|
||||
continue
|
||||
//没有设置起终点
|
||||
if (taskBean.navInfo == null || (taskBean.navInfo!!.naviStartLinkId.isEmpty() || taskBean.navInfo!!.naviEndLinkId.isEmpty())) {
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_NO_START_OR_END)
|
||||
return
|
||||
}
|
||||
/**
|
||||
* 是否起算路径结束
|
||||
*/
|
||||
var bFullPath = true
|
||||
|
||||
/**
|
||||
* 起点线在哪个位置
|
||||
*/
|
||||
var pathImportIndex = 0
|
||||
val hadLinkDvoListTemp: MutableList<HadLinkDvoBean> = taskBean.hadLinkDvoList.toMutableList()
|
||||
while (bFullPath) {
|
||||
if (pathList.isEmpty()) {
|
||||
val startRoute =
|
||||
findNaviRouteByLinkId(realm = realm, linkId = taskBean.navInfo!!.naviStartLinkId, startNodeId = taskBean.navInfo!!.naviStartNode)
|
||||
?: return
|
||||
pathList.add(startRoute)
|
||||
pathImportIndex = pathList.size
|
||||
|
||||
val endRoute =
|
||||
findNaviRouteByLinkId(realm = realm, linkId = taskBean.navInfo!!.naviEndLinkId, endNodeId = taskBean.navInfo!!.naviEndNode)
|
||||
?: return
|
||||
pathList.add(endRoute)
|
||||
}
|
||||
val route = NaviRoute(
|
||||
linkId = link.linkPid,
|
||||
)
|
||||
val leftRoute = pathList[pathImportIndex - 1]
|
||||
val rightRout = pathList[pathImportIndex]
|
||||
//如果左侧nodeid和右侧nodeid 一直了,说明整个路径联通了
|
||||
if (leftRoute.eNode == rightRout.sNode) {
|
||||
bFullPath = false
|
||||
break
|
||||
} else {
|
||||
//查询左侧node的拓扑link
|
||||
val nodeLinks = realm.where(LinkRelation::class.java)
|
||||
.beginGroup()
|
||||
.equalTo("sNodeId", leftRoute.eNode).or()
|
||||
.equalTo("eNodeId", leftRoute.eNode)
|
||||
.endGroup().notEqualTo("linkPid", leftRoute.linkId).findAll()
|
||||
val leftNodeLinks = nodeLinks.toMutableList()
|
||||
if (leftNodeLinks.isEmpty()) {
|
||||
callback.planningPathStatus(
|
||||
NaviStatus.NAVI_STATUS_PATH_ERROR_BLOCKED,
|
||||
"该link终点方向,没有拓扑link,请检查数据",
|
||||
leftRoute.linkId,
|
||||
GeometryTools.getLineString(leftRoute.pointList)
|
||||
)
|
||||
bFullPath = false
|
||||
return
|
||||
} else {
|
||||
/**
|
||||
* 是否起点和终点已经闭合,规划结束
|
||||
*/
|
||||
var bPathOver = false
|
||||
|
||||
route.pointList = GeometryTools.getGeoPoints(link.geometry)
|
||||
/**
|
||||
* 任务link中,是不是有这段路的下一条link
|
||||
*/
|
||||
var bHasNextLink = false
|
||||
for (link in leftNodeLinks) {
|
||||
if (link!!.linkPid == rightRout.linkId) {
|
||||
bPathOver = true
|
||||
} else {
|
||||
//记录其他拓扑关系
|
||||
leftRoute.otherTopologyLinks.add(link.linkPid)
|
||||
}
|
||||
|
||||
val res = realm.where(RenderEntity::class.java).`in`("table", QUERY_KEY_LINK_INFO_LIST)
|
||||
.equalTo("linkPid", link.linkPid).findAll()
|
||||
var bHasNode = false
|
||||
var bHasDir = false
|
||||
var bHasName = false
|
||||
if (res != null) {
|
||||
for (entity in res) {
|
||||
when (entity.code) {
|
||||
DataCodeEnum.OMDB_RD_LINK.code -> {
|
||||
bHasNode = true
|
||||
val snodePid = entity.properties["snodePid"]
|
||||
if (snodePid != null) {
|
||||
route.sNode = snodePid
|
||||
} else {
|
||||
bHasNode = false
|
||||
}
|
||||
val enodePid = entity.properties["enodePid"]
|
||||
if (enodePid != null) {
|
||||
route.eNode = enodePid
|
||||
} else {
|
||||
bHasNode = false
|
||||
//找出哪条拓扑link是下一条
|
||||
if (!bPathOver && !bHasNextLink) {
|
||||
val iterator = hadLinkDvoListTemp.iterator()
|
||||
while (iterator.hasNext()) {
|
||||
val linkBean = iterator.next()
|
||||
if (!linkBean.isNavi) {
|
||||
iterator.remove()
|
||||
continue
|
||||
}
|
||||
if (linkBean.linkPid == link.linkPid) {
|
||||
bHasNextLink = true
|
||||
val route = findNaviRouteByLinkId(realm = realm, linkId = linkBean.linkPid, startNodeId = leftRoute.eNode)
|
||||
if (route == null) {
|
||||
return
|
||||
} else {
|
||||
//插入左侧最后一根
|
||||
pathList.add(pathImportIndex, route)
|
||||
pathImportIndex++
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
DataCodeEnum.OMDB_LINK_DIRECT.code -> {
|
||||
val direct = entity.properties["direct"]
|
||||
if (direct != null) {
|
||||
bHasDir = true
|
||||
route.direct = direct.toInt()
|
||||
}
|
||||
}
|
||||
DataCodeEnum.OMDB_LINK_NAME.code -> {
|
||||
bHasName = true
|
||||
route.name = realm.copyFromRealm(entity)
|
||||
}
|
||||
}
|
||||
if (!bHasNextLink) {
|
||||
callback.planningPathStatus(
|
||||
code = NaviStatus.NAVI_STATUS_PATH_ERROR_BLOCKED,
|
||||
"路径不通,找不到下一根link",
|
||||
leftRoute.linkId,
|
||||
GeometryTools.getLineString(leftRoute.pointList)
|
||||
)
|
||||
bFullPath = false
|
||||
return
|
||||
}
|
||||
if (bPathOver) {
|
||||
bFullPath = false
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!bHasNode) {
|
||||
callback.planningPathStatus(
|
||||
NaviStatus.NAVI_STATUS_PATH_ERROR_NODE,
|
||||
link.linkPid,
|
||||
link.geometry
|
||||
)
|
||||
return
|
||||
}
|
||||
if (!bHasDir) {
|
||||
callback.planningPathStatus(
|
||||
NaviStatus.NAVI_STATUS_PATH_ERROR_DIRECTION,
|
||||
link!!.linkPid,
|
||||
link.geometry
|
||||
)
|
||||
return
|
||||
}
|
||||
pathList.add(route)
|
||||
}
|
||||
//用来存储最终的导航路径
|
||||
val newRouteList = mutableListOf<NaviRoute>()
|
||||
|
||||
//比对路径排序用的
|
||||
val tempRouteList = pathList.toMutableList()
|
||||
//先找到一根有方向的link,确定起终点
|
||||
var routeStart: NaviRoute? = null
|
||||
for (i in tempRouteList.indices) {
|
||||
val route = pathList[i]
|
||||
//只要时单方向的就行
|
||||
if (route.direct == 2 || route.direct == 3) {
|
||||
routeStart = route
|
||||
tempRouteList.removeAt(i)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (routeStart == null) {
|
||||
routeStart = tempRouteList[0]
|
||||
tempRouteList.removeAt(0)
|
||||
}
|
||||
|
||||
var sNode = ""
|
||||
var eNode = ""
|
||||
//如果sNode,eNode是顺方向,geometry 不动,否则反转
|
||||
if (routeStart.direct == 3) {
|
||||
routeStart.pointList.reverse()
|
||||
sNode = routeStart.eNode
|
||||
eNode = routeStart.sNode
|
||||
} else {
|
||||
sNode = routeStart.sNode
|
||||
eNode = routeStart.eNode
|
||||
}
|
||||
newRouteList.add(routeStart)
|
||||
var bBreak = true
|
||||
while (bBreak) {
|
||||
//先找其实link的后续link
|
||||
var bHasNext = false
|
||||
for (route in tempRouteList) {
|
||||
//如果是link 的e 对下个link的s,方向不用动,否则下个link的geometry反转
|
||||
if (route.sNode != "" && eNode == route.sNode) {
|
||||
newRouteList.add(route)
|
||||
tempRouteList.remove(route)
|
||||
eNode = route.eNode
|
||||
bHasNext = true
|
||||
break
|
||||
} else if (route.eNode != "" && eNode == route.eNode) {
|
||||
route.pointList.reverse()
|
||||
newRouteList.add(route)
|
||||
tempRouteList.remove(route)
|
||||
eNode = route.sNode
|
||||
bHasNext = true
|
||||
break
|
||||
}
|
||||
}
|
||||
//先找其实link的起始link
|
||||
var bHasLast = false
|
||||
for (route in tempRouteList) {
|
||||
//如果是link 的s 对上个link的e,方向不用动,否则下个link的geometry反转
|
||||
if (route.eNode != "" && sNode == route.eNode) {
|
||||
newRouteList.add(0, route)
|
||||
tempRouteList.remove(route)
|
||||
sNode = route.sNode
|
||||
bHasLast = true
|
||||
break
|
||||
} else if (route.sNode != "" && sNode == route.sNode) {
|
||||
route.pointList.reverse()
|
||||
newRouteList.add(0, route)
|
||||
tempRouteList.remove(route)
|
||||
sNode = route.eNode
|
||||
bHasLast = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if (tempRouteList.size == 0) {
|
||||
bBreak = false
|
||||
} else {
|
||||
if (!bHasLast && !bHasNext) {
|
||||
bBreak = false
|
||||
callback.planningPathStatus(
|
||||
NaviStatus.NAVI_STATUS_PATH_ERROR_BLOCKED,
|
||||
tempRouteList[0].linkId,
|
||||
GeometryTools.getLineString(tempRouteList[0].pointList)
|
||||
)
|
||||
realm.close()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val itemMap: MutableMap<GeoPoint, MutableList<RenderEntity>> = mutableMapOf()
|
||||
//查询每根link上的关联要素
|
||||
for (i in newRouteList.indices) {
|
||||
val route = newRouteList[i]
|
||||
Log.e("jingo","获取 插入要素 $i 总共 ${newRouteList.size}")
|
||||
for (i in pathList.indices) {
|
||||
val route = pathList[i]
|
||||
Log.e("jingo", "获取 插入要素 $i 总共 ${pathList.size}")
|
||||
itemMap.clear()
|
||||
//常规点限速
|
||||
val res = realm.where(RenderEntity::class.java)
|
||||
@ -403,9 +465,17 @@ class NaviEngine(
|
||||
}
|
||||
}
|
||||
realm.close()
|
||||
routeList = newRouteList
|
||||
routeList = pathList
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_PATH_SUCCESS)
|
||||
|
||||
// val pointList = mutableListOf<GeoPoint>()
|
||||
// for (l in pathList) {
|
||||
// pointList.addAll(l.pointList)
|
||||
// }
|
||||
// withContext(Dispatchers.IO) {
|
||||
// niMapController.lineHandler.showLine(GeometryTools.getLineString(pointList))
|
||||
// }
|
||||
// callback.planningPathStatus(NaviStatus.NAVI_STATUS_PATH_SUCCESS)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -551,6 +621,7 @@ class NaviEngine(
|
||||
//下一个要素的起点游标
|
||||
var tempIndex = footIndex - tempRoutList[0].startIndexInPath + 1
|
||||
var currentRoute: NaviRoute? = null
|
||||
var bGoToPlay = false
|
||||
for (route in tempRoutList) {
|
||||
// if (route.itemList != null) {
|
||||
// Log.e("jingo", "${route.linkId}我有${route.itemList!!.size}个要素 ")
|
||||
@ -559,7 +630,11 @@ class NaviEngine(
|
||||
continue
|
||||
if (route.indexInPath == routeIndex) {
|
||||
currentRoute = route
|
||||
val voice = createRoadInfoVoiceText(route)
|
||||
if (voice != null)
|
||||
callback.voicePlay(voice)
|
||||
}
|
||||
|
||||
if (route.itemList != null && route.itemList!!.isNotEmpty()) {
|
||||
for (naviItem in route.itemList!!) {
|
||||
// Log.e(
|
||||
@ -577,6 +652,13 @@ class NaviEngine(
|
||||
// Log.e("jingo", "我的距离${distance} 下一个${tempIndex} 位置${rightI}")
|
||||
if (distance < naviOption.farthestDisplayDistance && distance > -1) {
|
||||
naviItem.distance = distance.toInt()
|
||||
if (!naviItem.isVoicePlayed && !bGoToPlay) {
|
||||
naviItem.voiceText = createRenderEntityVoiceText(naviItem.data, naviItem.distance)
|
||||
if (naviItem.voiceText.isNotEmpty() && callback.voicePlay(naviItem.voiceText)) {
|
||||
naviItem.isVoicePlayed = true
|
||||
bGoToPlay = true
|
||||
}
|
||||
}
|
||||
bindingItemList.add(naviItem)
|
||||
} else {
|
||||
break
|
||||
@ -588,6 +670,7 @@ class NaviEngine(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
callback.bindingResults(currentRoute, bindingItemList)
|
||||
}
|
||||
}
|
||||
@ -639,7 +722,7 @@ class NaviEngine(
|
||||
/**
|
||||
* 判断是否完全偏离
|
||||
*/
|
||||
private fun deviationUp() {
|
||||
private suspend fun deviationUp() {
|
||||
errorCount++
|
||||
if (errorCount >= naviOption.deviationCount) {
|
||||
callback.planningPathStatus(NaviStatus.NAVI_STATUS_DISTANCE_OFF)
|
||||
@ -665,4 +748,69 @@ class NaviEngine(
|
||||
locationList.clear()
|
||||
}
|
||||
|
||||
/**
|
||||
* 道路属性语音
|
||||
*/
|
||||
private fun createRoadInfoVoiceText(route: NaviRoute): String? {
|
||||
if (route.name != null && route.name!!.properties["name"] != currentRoadName) {
|
||||
currentRoadName = "${route.name!!.properties["name"]}"
|
||||
return "进入${currentRoadName},限速${route.speedLimit}"
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 要素语音内容
|
||||
*/
|
||||
private fun createRenderEntityVoiceText(renderEntity: RenderEntity, distance: Int): String {
|
||||
val stringBuffer = StringBuffer()
|
||||
stringBuffer.append("前方")
|
||||
if (distance < 50) {
|
||||
|
||||
} else if (distance < 150) {
|
||||
stringBuffer.append("100米")
|
||||
} else if (distance < 200) {
|
||||
stringBuffer.append("150米")
|
||||
} else if (distance < 250) {
|
||||
stringBuffer.append("200米")
|
||||
} else if (distance < 350) {
|
||||
stringBuffer.append("300米")
|
||||
} else if (distance < 450) {
|
||||
stringBuffer.append("400米")
|
||||
} else if (distance < 550) {
|
||||
stringBuffer.append("500米")
|
||||
} else if (distance < 1500) {
|
||||
stringBuffer.append("1公里")
|
||||
} else {
|
||||
val number = distance % 1000.0
|
||||
stringBuffer.append("${"0.1f".format(number)}公里")
|
||||
}
|
||||
when (renderEntity.code) {
|
||||
DataCodeEnum.OMDB_ELECTRONICEYE.code -> {
|
||||
val maxSpeed = renderEntity.properties["maxSpeed"]
|
||||
stringBuffer.append("有限速${maxSpeed}标牌")
|
||||
}
|
||||
DataCodeEnum.OMDB_SPEEDLIMIT.code,
|
||||
DataCodeEnum.OMDB_SPEEDLIMIT_COND.code,
|
||||
DataCodeEnum.OMDB_SPEEDLIMIT_VAR.code -> {
|
||||
val maxSpeed = renderEntity.properties["maxSpeed"]
|
||||
stringBuffer.append("有限速${maxSpeed}标牌")
|
||||
}
|
||||
DataCodeEnum.OMDB_WARNINGSIGN.code -> {
|
||||
val typeCode = renderEntity.properties["typeCode"]
|
||||
stringBuffer.append(typeCode)
|
||||
}
|
||||
DataCodeEnum.OMDB_TOLLGATE.code -> {
|
||||
stringBuffer.append("经过收费站")
|
||||
}
|
||||
else -> {
|
||||
stringBuffer.append("有")
|
||||
stringBuffer.append("${DataCodeEnum.findTableNameByCode(renderEntity.code)}")
|
||||
}
|
||||
}
|
||||
|
||||
return stringBuffer.toString()
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,84 +1,183 @@
|
||||
package com.navinfo.omqs.util
|
||||
|
||||
import com.navinfo.collect.library.data.entity.HadLinkDvoBean
|
||||
import com.navinfo.collect.library.data.entity.NiLocation
|
||||
import com.navinfo.collect.library.data.entity.RenderEntity
|
||||
import com.navinfo.collect.library.data.entity.TaskBean
|
||||
import com.navinfo.collect.library.enums.DataCodeEnum
|
||||
import com.navinfo.collect.library.utils.GeometryTools
|
||||
import com.navinfo.omqs.db.RealmOperateHelper
|
||||
import io.realm.Realm
|
||||
import org.oscim.core.GeoPoint
|
||||
|
||||
class NaviEngineNew(
|
||||
private val realmOperateHelper: RealmOperateHelper,
|
||||
) {
|
||||
/**
|
||||
* 要查询的link基本信息列表
|
||||
*/
|
||||
private val QUERY_KEY_LINK_INFO_LIST = arrayOf(
|
||||
DataCodeEnum.OMDB_RD_LINK.name,
|
||||
DataCodeEnum.OMDB_LINK_DIRECT.name,
|
||||
DataCodeEnum.OMDB_LINK_NAME.name,
|
||||
)
|
||||
|
||||
// private latestRoute
|
||||
// private
|
||||
|
||||
private val locationList = mutableListOf<NiLocation>()
|
||||
|
||||
|
||||
suspend fun bindingRoute(
|
||||
niLocation: NiLocation? = null,
|
||||
taskBean: TaskBean,
|
||||
geoPoint: GeoPoint,
|
||||
realm:Realm
|
||||
) {
|
||||
var latestRoute: HadLinkDvoBean? = null
|
||||
var lastDis = -1.0
|
||||
|
||||
for (link in taskBean.hadLinkDvoList) {
|
||||
val linkGeometry = GeometryTools.createGeometry(link.geometry)
|
||||
val footAndDistance = GeometryTools.pointToLineDistance(geoPoint, linkGeometry)
|
||||
val meterD = footAndDistance.getMeterDistance()
|
||||
if (meterD < 15 && (lastDis < 0 || lastDis > meterD)) {
|
||||
latestRoute = link
|
||||
lastDis = meterD
|
||||
}
|
||||
}
|
||||
|
||||
latestRoute?.let {
|
||||
|
||||
val res2 =
|
||||
realm.where(RenderEntity::class.java).`in`("table", QUERY_KEY_LINK_INFO_LIST)
|
||||
.equalTo("linkPid", it.linkPid).findAll()
|
||||
if (res2 != null) {
|
||||
for (entity in res2) {
|
||||
when (entity.code) {
|
||||
DataCodeEnum.OMDB_RD_LINK.code -> {
|
||||
val snodePid = entity.properties["snodePid"]
|
||||
if (snodePid != null) {
|
||||
} else {
|
||||
}
|
||||
val enodePid = entity.properties["enodePid"]
|
||||
if (enodePid != null) {
|
||||
} else {
|
||||
}
|
||||
}
|
||||
DataCodeEnum.OMDB_LINK_DIRECT.code -> {
|
||||
val direct = entity.properties["direct"]
|
||||
if (direct != null) {
|
||||
}
|
||||
}
|
||||
DataCodeEnum.OMDB_LINK_NAME.code -> {
|
||||
// var name = realm.copyFromRealm(res4)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//package com.navinfo.omqs.util
|
||||
//
|
||||
//import android.util.Log
|
||||
//import com.navinfo.collect.library.data.entity.*
|
||||
//import com.navinfo.collect.library.enums.DataCodeEnum
|
||||
//import com.navinfo.collect.library.utils.GeometryTools
|
||||
//import com.navinfo.omqs.bean.NaviRoute
|
||||
//import com.navinfo.omqs.db.RealmOperateHelper
|
||||
//import io.realm.Realm
|
||||
//import org.oscim.core.GeoPoint
|
||||
//
|
||||
//class NaviEngineNew(
|
||||
// private val realmOperateHelper: RealmOperateHelper,
|
||||
// var naviOption: NaviOption = NaviOption()
|
||||
//) {
|
||||
// /**
|
||||
// * 要查询的link基本信息列表
|
||||
// */
|
||||
// private val QUERY_KEY_LINK_INFO_LIST = arrayOf(
|
||||
// DataCodeEnum.OMDB_RD_LINK.name,
|
||||
// DataCodeEnum.OMDB_LINK_DIRECT.name,
|
||||
// DataCodeEnum.OMDB_LINK_NAME.name,
|
||||
// )
|
||||
//
|
||||
// var latestRoute: HadLinkDvoBean? = null
|
||||
//
|
||||
// private val locationList = mutableListOf<NiLocation>()
|
||||
// var lastDis = 9999999.0
|
||||
//
|
||||
// /**
|
||||
// * 局部匹配时的路段
|
||||
// */
|
||||
// var tempRoutList = mutableListOf<NaviRoute>()
|
||||
//
|
||||
// suspend fun bindingRoute(
|
||||
// niLocation: NiLocation? = null,
|
||||
// taskBean: TaskBean,
|
||||
// geoPoint: GeoPoint,
|
||||
// ): Boolean {
|
||||
// val realm = realmOperateHelper.getSelectTaskRealmInstance()
|
||||
// if (latestRoute == null) {
|
||||
//
|
||||
// val time = System.currentTimeMillis()
|
||||
// for (link in taskBean.hadLinkDvoList) {
|
||||
// val linkGeometry = GeometryTools.createGeometry(link.geometry)
|
||||
// val footAndDistance = GeometryTools.pointToLineDistance(geoPoint, linkGeometry)
|
||||
// val meterD = footAndDistance.getMeterDistance()
|
||||
// if (lastDis > meterD) {
|
||||
// if (meterD < 15)
|
||||
// latestRoute = link
|
||||
// lastDis = meterD
|
||||
// }
|
||||
// }
|
||||
// Log.e("jingo", "定位匹配 ${System.currentTimeMillis() - time} $lastDis")
|
||||
// latestRoute?.let {
|
||||
// val naviRoute = getNaviRouteByLinkPid(realm, it.linkPid)
|
||||
// if (naviRoute != null) {
|
||||
// tempRoutList.add(naviRoute)
|
||||
// var bDirectOk = false
|
||||
// //反方向调转方向
|
||||
// if (naviRoute.direct == 2) {
|
||||
// bDirectOk = true
|
||||
// }
|
||||
// if (naviRoute.direct == 3) {
|
||||
// bDirectOk = true
|
||||
// naviRoute.pointList.reverse()
|
||||
// val sNode = naviRoute.eNode
|
||||
// naviRoute.eNode = naviRoute.sNode
|
||||
// naviRoute.sNode = sNode
|
||||
// }
|
||||
// var length = naviRoute.length
|
||||
// //是不是没有能连接的路了
|
||||
// var bHisNextNode = true
|
||||
// while (length < naviOption.farthestDisplayDistance + 2000 && bHisNextNode) {
|
||||
// val currentRoute = tempRoutList.last()
|
||||
// if (bDirectOk) {
|
||||
// val listPid =
|
||||
// realm.where(LinkRelation::class.java)
|
||||
// .beginGroup()
|
||||
// .equalTo("sNodeId", currentRoute.eNode).or()
|
||||
// .equalTo("eNodeId", currentRoute.eNode)
|
||||
// .endGroup().notEqualTo("linkPid", currentRoute.linkId).findAll()
|
||||
// if (listPid.isNotEmpty()) {
|
||||
// var bHisNextNode2 = false
|
||||
// for (linkPid in listPid) {
|
||||
// val nextRoute = getNaviRouteByLinkPid(realm, linkPid as String)
|
||||
// if (nextRoute != null) {
|
||||
// //顺方向,snode 链接 enode
|
||||
// if (nextRoute.sNode == currentRoute.eNode && nextRoute.direct == 2) {
|
||||
// var bInHadList = false
|
||||
// for (link in taskBean.hadLinkDvoList) {
|
||||
// if (link.linkPid == nextRoute.linkId) {
|
||||
// bInHadList = true
|
||||
// tempRoutList.add(nextRoute)
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// if (bInHadList) {
|
||||
// break
|
||||
// }
|
||||
// } else if (nextRoute.eNode == currentRoute.eNode && nextRoute.direct == 3) {
|
||||
// var bInHadList = false
|
||||
// for (link in taskBean.hadLinkDvoList) {
|
||||
// if (link.linkPid == nextRoute.linkId) {
|
||||
// bInHadList = true
|
||||
// nextRoute.pointList.reverse()
|
||||
// val sNode = nextRoute.eNode
|
||||
// nextRoute.eNode = nextRoute.sNode
|
||||
// nextRoute.sNode = sNode
|
||||
// tempRoutList.add(nextRoute)
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// if (bInHadList) {
|
||||
// break
|
||||
// }
|
||||
// } else {
|
||||
// if (nextRoute.sNode == currentRoute.eNode) {
|
||||
//
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// bHisNextNode = false
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// "查询不到link的基础属性 ${it.linkPid}"
|
||||
// realm.close()
|
||||
// return false
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// realm.close()
|
||||
// return true
|
||||
// }
|
||||
//
|
||||
// private fun getNaviRouteByLinkPid(realm: Realm, linkPid: String): NaviRoute? {
|
||||
// val naviRoute = NaviRoute(linkId = linkPid)
|
||||
// val res2 =
|
||||
// realm.where(RenderEntity::class.java).`in`("table", QUERY_KEY_LINK_INFO_LIST)
|
||||
// .equalTo("linkPid", linkPid).findAll()
|
||||
// if (res2 != null) {
|
||||
// for (entity in res2) {
|
||||
// when (entity.code) {
|
||||
// //获取snode enode
|
||||
// DataCodeEnum.OMDB_RD_LINK.code -> {
|
||||
// if (entity.linkRelation != null) {
|
||||
// if (entity.linkRelation!!.eNodeId == null || entity.linkRelation!!.sNodeId == null) {
|
||||
// "读取不到link的Node点,${linkPid}"
|
||||
// return null
|
||||
// } else {
|
||||
// naviRoute.eNode = entity.linkRelation!!.eNodeId!!
|
||||
// naviRoute.sNode = entity.linkRelation!!.sNodeId!!
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// //获取方向,geometry
|
||||
// DataCodeEnum.OMDB_LINK_DIRECT.code -> {
|
||||
// val direct = entity.properties["direct"]
|
||||
// if (direct != null)
|
||||
// naviRoute.direct = direct.toInt()
|
||||
// else {
|
||||
// "读取不到link的方向,${linkPid}"
|
||||
// return null
|
||||
// }
|
||||
// naviRoute.pointList = GeometryTools.getGeoPoints(entity.geometry)
|
||||
// naviRoute.length = GeometryTools.getDistance(naviRoute.pointList)
|
||||
// }
|
||||
// //获取名称
|
||||
// DataCodeEnum.OMDB_LINK_NAME.code -> {
|
||||
// naviRoute.name = realm.copyFromRealm(entity)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// return null
|
||||
// }
|
||||
// return naviRoute
|
||||
// }
|
||||
//}
|
||||
@ -627,7 +627,7 @@ class SignUtil {
|
||||
)
|
||||
}
|
||||
//杆状物
|
||||
DataCodeEnum.OMDB_POLE.code ->{
|
||||
DataCodeEnum.OMDB_POLE.code -> {
|
||||
list.add(
|
||||
TwoItemAdapterItem(
|
||||
title = "对象号码",
|
||||
@ -672,7 +672,7 @@ class SignUtil {
|
||||
)
|
||||
}
|
||||
//箭头
|
||||
DataCodeEnum.OMDB_OBJECT_ARROW.code ->{
|
||||
DataCodeEnum.OMDB_OBJECT_ARROW.code -> {
|
||||
list.add(
|
||||
TwoItemAdapterItem(
|
||||
title = "对象号码",
|
||||
@ -718,7 +718,8 @@ class SignUtil {
|
||||
)
|
||||
)
|
||||
}
|
||||
DataCodeEnum.OMDB_FILL_AREA.code->{
|
||||
//导流区
|
||||
DataCodeEnum.OMDB_FILL_AREA.code -> {
|
||||
list.add(
|
||||
TwoItemAdapterItem(
|
||||
title = "对象号码",
|
||||
@ -740,6 +741,61 @@ class SignUtil {
|
||||
)
|
||||
)
|
||||
}
|
||||
//物理车道数
|
||||
DataCodeEnum.OMDB_PHY_LANENUM.code -> {
|
||||
list.add(
|
||||
TwoItemAdapterItem(
|
||||
title = "linkPid", text = "${data.linkPid}"
|
||||
)
|
||||
)
|
||||
|
||||
list.add(
|
||||
TwoItemAdapterItem(
|
||||
title = "要素类型", text = when (data.properties["featureType"]) {
|
||||
"1" -> "HAD_LINK"
|
||||
"2" -> "HAD_LINK_PA"
|
||||
else -> ""
|
||||
}
|
||||
)
|
||||
)
|
||||
list.add(
|
||||
TwoItemAdapterItem(title = "顺方向车道数", text = "${data.properties["laneS2e"]}")
|
||||
)
|
||||
list.add(
|
||||
TwoItemAdapterItem(title = "逆方向车道数", text = "${data.properties["laneE2s"]}")
|
||||
)
|
||||
}
|
||||
//车道点限速
|
||||
DataCodeEnum.OMDB_LANE_SPEEDLIMIT.code -> {
|
||||
list.add(TwoItemAdapterItem(title = "限速ID", text = "${data.properties["speedId"]}"))
|
||||
list.add(TwoItemAdapterItem(title = "NodeId", text = "${data.properties["laneNodePid"]}"))
|
||||
list.add(TwoItemAdapterItem(title = "最高限速", text = "${data.properties["maxSpeed"]}km/h"))
|
||||
list.add(TwoItemAdapterItem(title = "最低限速", text = "${data.properties["minSpeed"]}km/h"))
|
||||
}
|
||||
//立交
|
||||
DataCodeEnum.OMDB_ZLEVEL.code -> {
|
||||
list.add(TwoItemAdapterItem(title = "linkPid", text = "${data.linkPid}"))
|
||||
list.add(TwoItemAdapterItem(title = "立交号码", text = "${data.properties["zlevelId"]}"))
|
||||
list.add(TwoItemAdapterItem(title = "要素号码", text = "${data.properties["featurePid"]}"))
|
||||
list.add(
|
||||
TwoItemAdapterItem(
|
||||
title = "要素类型", text = when (data.properties["featureType"]) {
|
||||
"1" -> "HAD_LINK"
|
||||
"2" -> "RW_LINK"
|
||||
else -> ""
|
||||
}
|
||||
)
|
||||
)
|
||||
list.add(TwoItemAdapterItem(title = "形状点号", text = "${data.properties["shpSeqNum"]}"))
|
||||
list.add(TwoItemAdapterItem(title = "起终点标识", text = "${data.properties["startEnd"]}"))
|
||||
list.add(TwoItemAdapterItem(title = "高度层次", text = "${data.properties["zlevel"]}"))
|
||||
}
|
||||
//车道类型
|
||||
DataCodeEnum.OMDB_LANE_TYPE_ACCESS.code -> {
|
||||
list.add(TwoItemAdapterItem(title = "车道中心线ID", text = "${data.properties["laneLinkPid"]}"))
|
||||
|
||||
list.add(TwoItemAdapterItem(title = "车道类型", text = getLaneType(data)))
|
||||
}
|
||||
}
|
||||
adapter.data = list
|
||||
return adapter
|
||||
@ -1130,6 +1186,45 @@ class SignUtil {
|
||||
return list
|
||||
}
|
||||
|
||||
/**
|
||||
* 车道类型
|
||||
*/
|
||||
|
||||
private fun getLaneType(data: RenderEntity): String {
|
||||
val stringBuffer = StringBuffer()
|
||||
val dependent = data.properties["laneType"]
|
||||
dependent?.let {
|
||||
val dependentInt = it.toInt()
|
||||
for (i in 31 downTo 0) {
|
||||
val bit = (dependentInt shr i) and 1
|
||||
if (bit == 1) {
|
||||
when (i) {
|
||||
0 -> stringBuffer.append("常规车道 ")
|
||||
1 -> stringBuffer.append("复合车道 ")
|
||||
2 -> stringBuffer.append("加速车道 ")
|
||||
3 -> stringBuffer.append("减速车道 ")
|
||||
4 -> stringBuffer.append("满载车道 ")
|
||||
6 -> stringBuffer.append("慢车道 ")
|
||||
8 -> stringBuffer.append("路肩车道 ")
|
||||
10 -> stringBuffer.append("管制车道 ")
|
||||
13 -> stringBuffer.append("可行使车道 ")
|
||||
14 -> stringBuffer.append("可行使路肩车道 ")
|
||||
17 -> stringBuffer.append("紧急停车道 ")
|
||||
18 -> stringBuffer.append("公交车道 ")
|
||||
19 -> stringBuffer.append("自行车道 ")
|
||||
20 -> stringBuffer.append("转向车道 ")
|
||||
21 -> stringBuffer.append("潮汐车道 ")
|
||||
23 -> stringBuffer.append("避险车道 ")
|
||||
24 -> stringBuffer.append("可变车道 ")
|
||||
25 -> stringBuffer.append("停车车道 ")
|
||||
26 -> stringBuffer.append("其他 ")
|
||||
28 -> stringBuffer.append("自动驾驶专用道 ")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return stringBuffer.toString()
|
||||
}
|
||||
|
||||
/**
|
||||
* 条件点限速文字
|
||||
@ -1852,6 +1947,10 @@ class SignUtil {
|
||||
*/
|
||||
fun getTrafficSignMoreInfo(renderEntity: RenderEntity): List<TwoItemAdapterItem> {
|
||||
val list = mutableListOf<TwoItemAdapterItem>()
|
||||
|
||||
list.add(TwoItemAdapterItem(title = "对象号码", text = "${renderEntity.properties["objectPid"]}"))
|
||||
|
||||
|
||||
val trafsignShape = when (renderEntity.properties["trafsignShape"]) {
|
||||
"1" -> "不规则形状"
|
||||
"2" -> "长方形"
|
||||
@ -1871,6 +1970,8 @@ class SignUtil {
|
||||
)
|
||||
}
|
||||
|
||||
list.add(TwoItemAdapterItem("类型", "${renderEntity.properties["signType"]}"))
|
||||
|
||||
val color = when (renderEntity.properties["color"]) {
|
||||
"0" -> "未验证"
|
||||
"1" -> "白色"
|
||||
@ -1890,9 +1991,10 @@ class SignUtil {
|
||||
)
|
||||
list.add(
|
||||
TwoItemAdapterItem(
|
||||
title = "正北夹角", text = "${renderEntity.properties["heading"]}"
|
||||
title = "朝向", text = "${renderEntity.properties["heading"]}"
|
||||
)
|
||||
)
|
||||
list.add(TwoItemAdapterItem("对象高", "${renderEntity.properties["signType"]}"))
|
||||
return list
|
||||
}
|
||||
|
||||
|
||||
@ -109,4 +109,8 @@ class SpeakMode(private val context: Context) : TextToSpeech.OnInitListener {
|
||||
stopSpeech()
|
||||
mTextToSpeech.shutdown()
|
||||
}
|
||||
|
||||
fun isSpeaking():Boolean{
|
||||
return mTextToSpeech.isSpeaking
|
||||
}
|
||||
}
|
||||
BIN
app/src/main/res/drawable-xhdpi/navi_skip.png
Normal file
|
After Width: | Height: | Size: 998 B |
BIN
app/src/main/res/drawable-xxhdpi/navi_end_icon.png
Normal file
|
After Width: | Height: | Size: 1.1 KiB |
BIN
app/src/main/res/drawable-xxhdpi/navi_start_icon.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
@ -42,6 +42,17 @@
|
||||
android:textColor="@color/selector_gray_blue_color"
|
||||
android:textSize="13sp" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/task_navi_icon"
|
||||
android:layout_width="16dp"
|
||||
android:layout_height="16dp"
|
||||
android:layout_alignTop="@id/task_mesh"
|
||||
android:layout_marginLeft="6dp"
|
||||
android:layout_marginTop="2dp"
|
||||
android:layout_marginRight="6dp"
|
||||
android:visibility="gone"
|
||||
android:background="@drawable/navi_start_icon" />
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/task_edit"
|
||||
android:layout_width="wrap_content"
|
||||
@ -54,10 +65,41 @@
|
||||
android:id="@+id/task_badge"
|
||||
android:layout_width="8dp"
|
||||
android:layout_height="8dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginRight="4dp"
|
||||
android:visibility="gone"
|
||||
android:layout_alignTop="@id/task_edit"
|
||||
android:layout_alignRight="@id/task_edit"
|
||||
android:background="@drawable/shape_oval_red_bg" />
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginRight="4dp"
|
||||
android:background="@drawable/shape_oval_red_bg"
|
||||
android:visibility="gone" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/navi_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/task_mesh"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone">
|
||||
|
||||
<Button
|
||||
android:id="@+id/navi_route_set_start_link"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:text="设置为起点link" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/navi_route_set_end_link"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:text="设置为终点link" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/navi_route_set_skip"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="2dp"
|
||||
android:text="不参与路径计算" />
|
||||
</LinearLayout>
|
||||
</RelativeLayout>
|
||||
@ -64,7 +64,7 @@
|
||||
<item
|
||||
android:id="@+id/personal_center_menu_version"
|
||||
android:icon="@drawable/ic_baseline_layers_24"
|
||||
android:title="版本:24QE1_V1.1.1_20231115_A" />
|
||||
android:title="版本:24QE1_V1.2.1_20231124_A" />
|
||||
</group>
|
||||
<group android:checkableBehavior="single">
|
||||
<item android:title="小标题">
|
||||
|
||||
@ -1618,12 +1618,34 @@
|
||||
</m>
|
||||
</m>
|
||||
|
||||
<!-- 中央隔离带 -->
|
||||
<m v="OMDB_LINK_MEDIAN">
|
||||
<m k="medianSurface" v="0">
|
||||
<area use="obj-area" stroke="#00000000" stroke-width="1" src="assets:omdb/icon_2071_0.svg"></area>
|
||||
</m>
|
||||
<m k="medianSurface" v="1">
|
||||
<area use="obj-area" stroke="#00000000" stroke-width="1" src="assets:omdb/icon_2071_1.svg"></area>
|
||||
</m>
|
||||
<m k="medianSurface" v="2">
|
||||
<area use="obj-area" stroke="#00000000" stroke-width="1" src="assets:omdb/icon_2071_2.svg"></area>
|
||||
</m>
|
||||
<m k="medianSurface" v="3">
|
||||
<area use="obj-area" stroke="#ffffff" stroke-width="1" src="assets:omdb/icon_2071_0.svg"></area>
|
||||
</m>
|
||||
<m k="medianSurface" v="4">
|
||||
<area use="obj-area" stroke="#ffffff" stroke-width="1" src="assets:omdb/icon_2071_1.svg"></area>
|
||||
</m>
|
||||
<m k="medianSurface" v="5">
|
||||
<area use="obj-area" stroke="#ffffff" stroke-width="1" src="assets:omdb/icon_2071_2.svg"></area>
|
||||
</m>
|
||||
</m>
|
||||
|
||||
<!-- 道路边界类型 -->
|
||||
<m v="OMDB_RDBOUND_BOUNDARYTYPE">
|
||||
<outline-layer id="boundaryType" stroke="#8e44ad" width="0.1" />
|
||||
<!--护栏-->
|
||||
<m k="boundaryType" v="4">
|
||||
<symbol repeat="true" repeat-gap="12" gland="true" repeat-start="0.01" src="assets:omdb/icon_2013_4.svg" symbol-width="16" symbol-height="36"></symbol>
|
||||
<symbol repeat="true" repeat-gap="36" gland="true" repeat-start="5" src="assets:omdb/icon_2013_4.svg" symbol-width="56" symbol-height="56"></symbol>
|
||||
</m>
|
||||
<!--路牙-->
|
||||
<m k="boundaryType" v="3">
|
||||
@ -1631,7 +1653,7 @@
|
||||
</m>
|
||||
<!--墙-->
|
||||
<m k="boundaryType" v="5">
|
||||
<symbol repeat="true" gland="true" repeat-gap="12" repeat-start="0.01" src="assets:omdb/icon_2013_3.svg" symbol-width="24" symbol-height="12"></symbol>
|
||||
<line stroke="#495462" use="boundaryType" width="0.2"/>
|
||||
</m>
|
||||
<!--铺设路面边缘-->
|
||||
<m k="boundaryType" v="6">
|
||||
@ -1650,7 +1672,7 @@
|
||||
|
||||
<!--护栏-->
|
||||
<m k="boundaryType" v="4">
|
||||
<symbol repeat="true" repeat-gap="12" gland="true" repeat-start="0.01" src="assets:omdb/icon_2013_4.svg" symbol-width="16" symbol-height="36"></symbol>
|
||||
<symbol repeat="true" repeat-gap="36" gland="true" repeat-start="5" src="assets:omdb/icon_2013_4.svg" symbol-width="56" symbol-height="56"></symbol>
|
||||
</m>
|
||||
<!--路牙-->
|
||||
<m k="boundaryType" v="3">
|
||||
@ -1658,7 +1680,7 @@
|
||||
</m>
|
||||
<!--墙-->
|
||||
<m k="boundaryType" v="5">
|
||||
<symbol repeat="true" gland="true" repeat-gap="12" repeat-start="0.01" src="assets:omdb/icon_2013_3.svg" symbol-width="24" symbol-height="12"></symbol>
|
||||
<line stroke="#495462" use="boundaryType" width="0.2"/>
|
||||
</m>
|
||||
<!--铺设路面边缘-->
|
||||
<m k="boundaryType" v="6">
|
||||
@ -1884,6 +1906,11 @@
|
||||
</m>
|
||||
</m>
|
||||
|
||||
<!-- 设施分离 -->
|
||||
<m v="OMDB_LINK_SEPARATION">
|
||||
<symbol repeat="true" repeat-gap="18" gland="true" repeat-start="0" src="assets:omdb/icon_2070_0.svg" symbol-width="32" symbol-height="32"></symbol>
|
||||
</m>
|
||||
|
||||
<!-- 停止位置 -->
|
||||
<m v="OMDB_OBJECT_STOPLOCATION">
|
||||
|
||||
@ -1921,7 +1948,7 @@
|
||||
</m>
|
||||
<m k="type" v="angle">
|
||||
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true" symbol-width="24"
|
||||
src="assets:omdb/icon_arrow_right.svg" ></symbol>
|
||||
src="assets:omdb/icon_arrow_right_bottom.svg" ></symbol>
|
||||
</m>
|
||||
<m k="type" v="s_2_e">
|
||||
<line use="s2e" />
|
||||
@ -1942,7 +1969,7 @@
|
||||
</m>
|
||||
<m k="type" v="angle">
|
||||
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true" symbol-width="24"
|
||||
src="assets:omdb/icon_arrow_right.svg" ></symbol>
|
||||
src="assets:omdb/icon_arrow_right_bottom.svg" ></symbol>
|
||||
</m>
|
||||
<m k="type" v="s_2_e">
|
||||
<line use="s2e" />
|
||||
@ -1989,7 +2016,7 @@
|
||||
</m>
|
||||
<m k="type" v="angle">
|
||||
<symbol repeat="false" repeat-gap="2000" repeat-start="0" rotate="true"
|
||||
src="assets:omdb/icon_arrow_right.svg" symbol-width="24"></symbol>
|
||||
src="assets:omdb/icon_arrow_right.svg" symbol-width="24" ></symbol>
|
||||
</m>
|
||||
<m k="type" v="s_2_e">
|
||||
<line use="s2e" />
|
||||
|
||||
@ -2,60 +2,95 @@
|
||||
<svg id="b" xmlns="http://www.w3.org/2000/svg" width="107.5" height="105.4"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 107.5 105.4">
|
||||
<defs>
|
||||
<style>.f{fill:url(#d);}.g{fill:url(#e);}.h{fill:none;}.i{fill:#fff;}</style>
|
||||
<linearGradient id="d" x1="640.3" y1="-514.6" x2="633.9" y2="-514.6"
|
||||
gradientTransform="translate(-610.3 579.1)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#989898" />
|
||||
<stop offset=".1" stop-color="#c1c1c1" />
|
||||
<stop offset=".3" stop-color="#e3e3e3" />
|
||||
<stop offset=".4" stop-color="#f7f7f7" />
|
||||
<style>
|
||||
.p{fill:none;}.p,.q,.r,.s,.t,.u,.v,.w,.x,.y,.z,.aa,.ab{stroke-width:0px;}.q{fill:url(#e);}.r{fill:url(#f);}.s{fill:url(#d);}.t{fill:url(#j);}.u{fill:url(#i);}.v{fill:url(#h);}.w{fill:url(#m);}.x{fill:url(#g);}.y{fill:url(#o);}.z{fill:url(#k);}.aa{fill:url(#n);}.ab{fill:url(#l);}
|
||||
</style>
|
||||
<linearGradient id="d" x1="48.3" y1="52.7" x2="49.7" y2="52.7"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#231815" />
|
||||
<stop offset="0" stop-color="#372d2a" />
|
||||
<stop offset="0" stop-color="#655d5b" />
|
||||
<stop offset=".1" stop-color="#8e8987" />
|
||||
<stop offset=".2" stop-color="#b1adac" />
|
||||
<stop offset=".2" stop-color="#cdcbca" />
|
||||
<stop offset=".3" stop-color="#e3e2e1" />
|
||||
<stop offset=".3" stop-color="#f2f2f2" />
|
||||
<stop offset=".4" stop-color="#fcfbfb" />
|
||||
<stop offset=".5" stop-color="#fff" />
|
||||
<stop offset=".6" stop-color="#fbfbfb" />
|
||||
<stop offset=".6" stop-color="#f1f2f2" />
|
||||
<stop offset=".7" stop-color="#e0e1e2" />
|
||||
<stop offset=".8" stop-color="#c9c9cb" />
|
||||
<stop offset=".8" stop-color="#aaabad" />
|
||||
<stop offset=".9" stop-color="#848689" />
|
||||
<stop offset="1" stop-color="#585b5e" />
|
||||
<stop offset="1" stop-color="#3f4246" />
|
||||
<stop offset=".7" stop-color="#fcfcfc" />
|
||||
<stop offset=".7" stop-color="#f5f5f5" />
|
||||
<stop offset=".8" stop-color="#e9e8e8" />
|
||||
<stop offset=".8" stop-color="#d8d6d6" />
|
||||
<stop offset=".9" stop-color="#c2bfbe" />
|
||||
<stop offset=".9" stop-color="#a6a2a1" />
|
||||
<stop offset=".9" stop-color="#85807e" />
|
||||
<stop offset="1" stop-color="#605957" />
|
||||
<stop offset="1" stop-color="#3a312f" />
|
||||
<stop offset="1" stop-color="#453d3b" />
|
||||
<stop offset="1" stop-color="#65605f" />
|
||||
<stop offset="1" stop-color="#7f7c7b" />
|
||||
<stop offset="1" stop-color="#91908f" />
|
||||
<stop offset="1" stop-color="#9c9c9b" />
|
||||
<stop offset="1" stop-color="#a0a0a0" />
|
||||
</linearGradient>
|
||||
<linearGradient id="e" x1="77.7" y1="64.5" x2="84.1" y2="64.5"
|
||||
gradientTransform="matrix(1, 0, 0, 1, 0, 0)" xlink:href="#d" />
|
||||
<linearGradient id="e" x1="38.4" x2="39.8" xlink:href="#d" />
|
||||
<linearGradient id="f" x1="68.2" x2="69.6" xlink:href="#d" />
|
||||
<linearGradient id="g" x1="58.3" x2="59.6" xlink:href="#d" />
|
||||
<linearGradient id="h" x1="101.9" y1="52.7" x2="103.3" y2="52.7" xlink:href="#d" />
|
||||
<linearGradient id="i" x1="92" y1="52.7" x2="93.3" y2="52.7" xlink:href="#d" />
|
||||
<linearGradient id="j" x1="14.4" y1="52.7" x2="15.8" y2="52.7" xlink:href="#d" />
|
||||
<linearGradient id="k" x1="4.5" y1="52.7" x2="5.8" y2="52.7" xlink:href="#d" />
|
||||
<linearGradient id="l" x1="407.3" y1="29.7" x2="408.6" y2="29.7"
|
||||
gradientTransform="translate(-354.2 15.6)" xlink:href="#d" />
|
||||
<linearGradient id="m" x1="392.6" y1="29.7" x2="393.9" y2="29.7"
|
||||
gradientTransform="translate(-339.5 30.3)" xlink:href="#d" />
|
||||
<linearGradient id="n" x1="406.7" y1="360.1" x2="411.5" y2="360.1"
|
||||
gradientTransform="translate(-382 -307.4)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#989898" />
|
||||
<stop offset="0" stop-color="#a3a3a3" />
|
||||
<stop offset=".1" stop-color="#c4c5c5" />
|
||||
<stop offset=".2" stop-color="#d8d9d9" />
|
||||
<stop offset=".3" stop-color="#e0e1e1" />
|
||||
<stop offset=".4" stop-color="#dbdcdc" />
|
||||
<stop offset=".5" stop-color="#cccece" />
|
||||
<stop offset=".6" stop-color="#b5b6b7" />
|
||||
<stop offset=".7" stop-color="#949697" />
|
||||
<stop offset=".8" stop-color="#6a6c6f" />
|
||||
<stop offset=".8" stop-color="#3f4246" />
|
||||
<stop offset="1" stop-color="#404247" />
|
||||
<stop offset="1" stop-color="#43434a" />
|
||||
</linearGradient>
|
||||
<linearGradient id="o" x1="78.5" y1="52.7" x2="83.3" y2="52.7"
|
||||
gradientTransform="matrix(1,0,0,1,0,0)" xlink:href="#n" />
|
||||
</defs>
|
||||
<g id="c">
|
||||
<g>
|
||||
<rect class="h" width="107.5" height="105.4" />
|
||||
<g>
|
||||
<g>
|
||||
<path class="i"
|
||||
d="M48.2,57.4h1.5c.1,0,.2,.1,.2,.2v14.6c0,0,0,.1-.1,.1h-1.8s0,0,0,0v-14.7c0-.1,.1-.2,.2-.2Z" />
|
||||
<path class="i"
|
||||
d="M38.3,57.4h1.5c.1,0,.2,.1,.2,.2v14.6c0,0,0,.1-.1,.1h-1.8s0,0,0,0v-14.7c0-.1,.1-.2,.2-.2Z" />
|
||||
<path class="i"
|
||||
d="M68.1,57.4h1.5c.1,0,.2,.1,.2,.2v14.6c0,0,0,.1-.1,.1h-1.8s0,0,0,0v-14.7c0-.1,.1-.2,.2-.2Z" />
|
||||
<path class="i"
|
||||
d="M58.2,57.4h1.5c.1,0,.2,.1,.2,.2v14.6c0,0,0,.1-.1,.1h-1.8s0,0,0,0v-14.7c0-.1,.1-.2,.2-.2Z" />
|
||||
<path class="i"
|
||||
d="M101.8,57.4h1.5c.1,0,.2,.1,.2,.2v14.6c0,0,0,.1-.1,.1h-1.8s0,0,0,0v-14.7c0-.1,.1-.2,.2-.2Z" />
|
||||
<path class="i"
|
||||
d="M91.9,57.4h1.5c.1,0,.2,.1,.2,.2v14.6c0,0,0,.1-.1,.1h-1.8s0,0,0,0v-14.7c0-.1,.1-.2,.2-.2Z" />
|
||||
<path class="i"
|
||||
d="M14.3,57.4h1.5c.1,0,.2,.1,.2,.2v14.6c0,0,0,.1-.1,.1h-1.8s0,0,0,0v-14.7c0-.1,.1-.2,.2-.2Z" />
|
||||
<path class="i"
|
||||
d="M4.4,57.4h1.5c.1,0,.2,.1,.2,.2v14.6c0,0,0,.1-.1,.1h-1.8s0,0,0,0v-14.7c0-.1,.1-.2,.2-.2Z" />
|
||||
<path class="i"
|
||||
d="M52.8,3.3h1.8c.1,0,.2,.1,.2,.2V110.7c0,0,0,.1-.1,.1h-2.1s0,0,0,0V3.5c0-.1,.1-.2,.2-.2Z"
|
||||
transform="translate(-3.3 110.8) rotate(-90)" />
|
||||
<path class="i"
|
||||
d="M52.8,18h1.8c.1,0,.2,.1,.2,.2V125.4c0,0,0,.1-.1,.1h-2.1s0,0,0,0V18.2c0-.1,.1-.2,.2-.2Z"
|
||||
transform="translate(-18 125.5) rotate(-90)" />
|
||||
</g>
|
||||
<path class="f"
|
||||
d="M24.5,52.3h4.9c.6,0,1.1,.5,1.1,1.1v22.3c0,.5-.4,1-1,1h-5.2c-.5,0-.9-.4-.9-.9v-22.3c0-.6,.5-1.1,1.1-1.1Z"
|
||||
transform="translate(54 129) rotate(180)" />
|
||||
<path class="g"
|
||||
d="M78.3,52.3h4.9c.6,0,1.1,.5,1.1,1.1v22.3c0,.5-.4,1-1,1h-5.2c-.5,0-.9-.4-.9-.9v-22.3c0-.6,.5-1.1,1.1-1.1Z" />
|
||||
</g>
|
||||
</g>
|
||||
<rect class="p" width="107.5" height="105.4" />
|
||||
<path class="s"
|
||||
d="m48.6,45.2h.9c.1,0,.2.1.2.2v14.6c0,0,0,.1-.1.1h-1.2s0,0,0,0v-14.7c0-.1.1-.2.2-.2Z" />
|
||||
<path class="q"
|
||||
d="m38.6,45.2h.9c.1,0,.2.1.2.2v14.6c0,0,0,.1-.1.1h-1.2s0,0,0,0v-14.7c0-.1.1-.2.2-.2Z" />
|
||||
<path class="r"
|
||||
d="m68.4,45.2h.9c.1,0,.2.1.2.2v14.6c0,0,0,.1-.1.1h-1.2s0,0,0,0v-14.7c0-.1.1-.2.2-.2Z" />
|
||||
<path class="x"
|
||||
d="m58.5,45.2h.9c.1,0,.2.1.2.2v14.6c0,0,0,.1-.1.1h-1.2s0,0,0,0v-14.7c0-.1.1-.2.2-.2Z" />
|
||||
<path class="v"
|
||||
d="m102.1,45.2h.9c.1,0,.2.1.2.2v14.6c0,0,0,.1-.1.1h-1.2s0,0,0,0v-14.7c0-.1.1-.2.2-.2Z" />
|
||||
<path class="u"
|
||||
d="m92.2,45.2h.9c.1,0,.2.1.2.2v14.6c0,0,0,.1-.1.1h-1.2s0,0,0,0v-14.7c0-.1.1-.2.2-.2Z" />
|
||||
<path class="t"
|
||||
d="m14.6,45.2h.9c.1,0,.2.1.2.2v14.6c0,0,0,.1-.1.1h-1.2s0,0,0,0v-14.7c0-.1.1-.2.2-.2Z" />
|
||||
<path class="z"
|
||||
d="m4.7,45.2h.9c.1,0,.2.1.2.2v14.6c0,0,0,.1-.1.1h-1.2s0,0,0,0v-14.7c0-.1.1-.2.2-.2Z" />
|
||||
<path class="ab"
|
||||
d="m53.3-8.4h.9c.1,0,.2.1.2.2v107.1c0,0,0,.1-.1.1h-1.1s0,0,0,0V-8.1c0-.1.1-.2.2-.2Z"
|
||||
transform="translate(8.4 99.1) rotate(-90)" />
|
||||
<path class="w"
|
||||
d="m53.3,6.3h.9c.1,0,.2.1.2.2v107.1c0,0,0,.1-.1.1h-1.1s0,0,0,0V6.6c0-.1.1-.2.2-.2Z"
|
||||
transform="translate(-6.3 113.8) rotate(-90)" />
|
||||
<path class="aa"
|
||||
d="m25.4,40.6h3.1c.6,0,1.1.5,1.1,1.1v22.3c0,.5-.4,1-1,1h-3.4c-.5,0-.9-.4-.9-.9v-22.3c0-.6.5-1.1,1.1-1.1Z"
|
||||
transform="translate(54 105.4) rotate(180)" />
|
||||
<path class="y"
|
||||
d="m79.2,40.6h3.1c.6,0,1.1.5,1.1,1.1v22.3c0,.5-.4,1-1,1h-3.4c-.5,0-.9-.4-.9-.9v-22.3c0-.6.5-1.1,1.1-1.1Z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 5.6 KiB |
43
collect-library/src/main/assets/omdb/icon_2013_5.svg
Normal file
@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="b" xmlns="http://www.w3.org/2000/svg" width="90" height="100"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 90 100">
|
||||
<defs>
|
||||
<style>
|
||||
.e{fill:none;}.e,.f,.g,.h{stroke-width:0px;}.i{clip-path:url(#d);}.f{fill:#a28d92;}.g{fill:#f1eae9;}.h{fill:#fff;}
|
||||
</style>
|
||||
<clipPath id="d">
|
||||
<rect class="e" width="90" height="100" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g id="c">
|
||||
<g class="i">
|
||||
<rect class="h" width="90" height="100" />
|
||||
<path class="g"
|
||||
d="m-10.8.2H29c.8,0,1.4.6,1.4,1.4,0,.4-.1.7-.4,1l-8.2,8.2c-.3.3-.6.4-1,.4H-19c-.8,0-1.4-.6-1.4-1.4,0-.4.1-.7.4-1L-11.8.6c.3-.3.6-.4,1-.4Z" />
|
||||
<path class="g"
|
||||
d="m35,.2h39.9c.8,0,1.4.6,1.4,1.4,0,.4-.1.7-.4,1l-8.2,8.2c-.3.3-.6.4-1,.4H26.8c-.8,0-1.4-.6-1.4-1.4,0-.4.1-.7.4-1L34.1.6c.3-.3.6-.4,1-.4Z" />
|
||||
<path class="f"
|
||||
d="m19.7,13.1c.7,0,1.3.6,1.3,1.4v17.1c0,.8-.6,1.4-1.3,1.4H-19.4c-.7,0-1.3-.6-1.3-1.4h0V14.5c0-.8.6-1.4,1.3-1.4H19.7Z" />
|
||||
<path class="f"
|
||||
d="m65,13.1c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4H25.7c-.7,0-1.4-.6-1.4-1.4h0V14.5c0-.8.6-1.4,1.4-1.4h39.3Z" />
|
||||
<path class="g"
|
||||
d="m80.9.2h39.9c.8,0,1.4.6,1.4,1.4,0,.4-.1.7-.4,1l-8.2,8.2c-.3.3-.6.4-1,.4h-39.9c-.8,0-1.4-.6-1.4-1.4,0-.4.1-.7.4-1L79.9.6c.3-.3.6-.4,1-.4Z" />
|
||||
<path class="f"
|
||||
d="m110,13.1c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4h-39.3c-.7,0-1.4-.6-1.4-1.4h0V14.5c0-.8.6-1.4,1.4-1.4h39.3Z" />
|
||||
<path class="f"
|
||||
d="m42.5,35.4c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4H3.2c-.7,0-1.4-.6-1.4-1.4h0v-17.1c0-.8.6-1.4,1.4-1.4h39.3Z" />
|
||||
<path class="f"
|
||||
d="m87.5,35.4c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4h-39.3c-.7,0-1.4-.6-1.4-1.4h0v-17.1c0-.8.6-1.4,1.4-1.4h39.3Z" />
|
||||
<path class="f"
|
||||
d="m22.3,57.4c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4H-17c-.7,0-1.4-.6-1.4-1.4h0v-17.1c0-.8.6-1.4,1.4-1.4H22.3Z" />
|
||||
<path class="f"
|
||||
d="m67.5,57.4c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4H28.2c-.7,0-1.4-.6-1.4-1.4h0v-17.1c0-.8.6-1.4,1.4-1.4h39.3Z" />
|
||||
<path class="f"
|
||||
d="m112.5,57.4c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4h-39.3c-.7,0-1.4-.6-1.4-1.4h0v-17.1c0-.8.6-1.4,1.4-1.4h39.3Z" />
|
||||
<path class="f"
|
||||
d="m42.5,80c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4H3.2c-.7,0-1.4-.6-1.4-1.4h0v-17.1c0-.8.6-1.4,1.4-1.4h39.3Z" />
|
||||
<path class="f"
|
||||
d="m87.6,79.9c.7,0,1.4.6,1.4,1.4v17.1c0,.8-.6,1.4-1.4,1.4h-39.3c-.7,0-1.4-.6-1.4-1.4h0v-17.1c0-.8.6-1.4,1.4-1.4h39.3Z" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
353
collect-library/src/main/assets/omdb/icon_2070_0.svg
Normal file
@ -0,0 +1,353 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="b" xmlns="http://www.w3.org/2000/svg" width="107.5" height="107.5"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 107.5 107.5">
|
||||
<defs>
|
||||
<style>
|
||||
.bz,.ca{fill:none;}.bz,.cb,.cc,.cd,.ce,.cf,.cg,.ch,.ci,.cj,.ck,.cl,.cm,.cn,.co,.cp,.cq,.cr,.cs,.ct,.cu,.cv,.cw,.cx,.cy,.cz,.da,.db,.dc,.dd,.de,.df,.dg,.dh,.di,.dj,.dk,.dl,.dm,.dn,.do,.dp,.dq,.dr,.ds,.dt,.du,.dv,.dw,.dx,.dy,.dz,.ea,.eb,.ec,.ed,.ee,.ef,.eg,.eh,.ei,.ej,.ek,.el,.em,.en,.eo,.ep,.eq,.er,.es,.et,.eu,.ev,.ew{stroke-width:0px;}.ca{opacity:0;stroke:#00a4b1;stroke-miterlimit:10;stroke-width:.2px;}.cb{fill:url(#ah);}.cc{fill:url(#ag);}.cd{fill:url(#aa);}.ce{fill:url(#ao);}.cf{fill:url(#af);}.cg{fill:url(#ae);}.ch{fill:url(#ab);}.ci{fill:url(#aj);}.cj{fill:url(#ap);}.ck{fill:url(#ai);}.cl{fill:url(#ad);}.cm{fill:url(#an);}.cn{fill:url(#am);}.co{fill:url(#ac);}.cp{fill:url(#at);}.cq{fill:url(#as);}.cr{fill:url(#bi);}.cs{fill:url(#bd);}.ct{fill:url(#bg);}.cu{fill:url(#bj);}.cv{fill:url(#be);}.cw{fill:url(#bf);}.cx{fill:url(#bo);}.cy{fill:url(#bm);}.cz{fill:url(#bh);}.da{fill:url(#bn);}.db{fill:url(#ba);}.dc{fill:url(#bb);}.dd{fill:url(#bk);}.de{fill:url(#bc);}.df{fill:url(#bx);}.dg{fill:url(#bq);}.dh{fill:url(#br);}.di{fill:url(#bs);}.dj{fill:url(#by);}.dk{fill:url(#bt);}.dl{fill:url(#bl);}.dm{fill:url(#bw);}.dn{fill:url(#bp);}.do{fill:url(#bu);}.dp{fill:url(#bv);}.dq{fill:url(#ar);}.dr{fill:url(#ay);}.ds{fill:url(#az);}.dt{fill:url(#aw);}.du{fill:url(#aq);}.dv{fill:url(#ax);}.dw{fill:url(#ak);}.dx{fill:url(#al);}.dy{fill:url(#au);}.dz{fill:url(#av);}.ea{fill:url(#v);}.eb{fill:url(#e);}.ec{fill:url(#y);}.ed{fill:url(#z);}.ee{fill:url(#x);}.ef{fill:url(#w);}.eg{fill:url(#u);}.eh{fill:url(#t);}.ei{fill:url(#f);}.ej{fill:url(#d);}.ek{fill:url(#s);}.el{fill:url(#j);}.em{fill:url(#q);}.en{fill:url(#r);}.eo{fill:url(#i);}.ep{fill:url(#h);}.eq{fill:url(#m);}.er{fill:url(#g);}.es{fill:url(#o);}.et{fill:url(#p);}.eu{fill:url(#k);}.ev{fill:url(#n);}.ew{fill:url(#l);}
|
||||
</style>
|
||||
<linearGradient id="d" x1="13.7" y1="53.7" x2="15" y2="53.7" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#221714" />
|
||||
<stop offset="0" stop-color="#372d2a" />
|
||||
<stop offset="0" stop-color="#655d5b" />
|
||||
<stop offset=".1" stop-color="#8e8987" />
|
||||
<stop offset=".2" stop-color="#b1adac" />
|
||||
<stop offset=".2" stop-color="#cdcbca" />
|
||||
<stop offset=".3" stop-color="#e3e2e1" />
|
||||
<stop offset=".3" stop-color="#f2f2f2" />
|
||||
<stop offset=".4" stop-color="#fcfbfb" />
|
||||
<stop offset=".5" stop-color="#fff" />
|
||||
<stop offset=".7" stop-color="#fcfcfc" />
|
||||
<stop offset=".7" stop-color="#f5f5f5" />
|
||||
<stop offset=".8" stop-color="#e9e8e8" />
|
||||
<stop offset=".8" stop-color="#d8d7d6" />
|
||||
<stop offset=".9" stop-color="#c2bfbe" />
|
||||
<stop offset=".9" stop-color="#a6a2a1" />
|
||||
<stop offset=".9" stop-color="#85807e" />
|
||||
<stop offset="1" stop-color="#605a57" />
|
||||
<stop offset="1" stop-color="#39312e" />
|
||||
<stop offset="1" stop-color="#443d3a" />
|
||||
<stop offset="1" stop-color="#64605e" />
|
||||
<stop offset="1" stop-color="#7e7b7a" />
|
||||
<stop offset="1" stop-color="#908f8e" />
|
||||
<stop offset="1" stop-color="#9b9b9a" />
|
||||
<stop offset="1" stop-color="#9f9f9f" />
|
||||
</linearGradient>
|
||||
<linearGradient id="e" x1="3.7" x2="5.1" xlink:href="#d" />
|
||||
<linearGradient id="f" x1="270.6" y1="-352.3" x2="272" y2="-352.3"
|
||||
gradientTransform="translate(-266.3 383.8)" xlink:href="#d" />
|
||||
<linearGradient id="g" x1="390.7" y1="-1286.3" x2="392.1" y2="-1286.3"
|
||||
gradientTransform="translate(-385.2 816.6) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="h" x1="189.8" y1="-2181.7" x2="191.1" y2="-2181.7"
|
||||
gradientTransform="translate(-182.5 1363.7) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="i" x1="-1617.7" y1="317" x2="-1616.3" y2="317"
|
||||
gradientTransform="translate(1630.8 348.6) scale(1 -1)" xlink:href="#d" />
|
||||
<linearGradient id="j" x1="-887.7" y1="1342.2" x2="-886.4" y2="1342.2"
|
||||
gradientTransform="translate(899.5 850.8) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="k" x1="-261.1" y1="1004.8" x2="-259.8" y2="1004.8"
|
||||
gradientTransform="translate(271.3 643.5) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="l" x1="-18.7" y1="1876.8" x2="-17.3" y2="1876.8"
|
||||
gradientTransform="translate(27.4 695.4) scale(1 -.4)" xlink:href="#d" />
|
||||
<linearGradient id="m" x1="28.5" x2="29.9" xlink:href="#d" />
|
||||
<linearGradient id="n" x1="18.6" x2="19.9" xlink:href="#d" />
|
||||
<linearGradient id="o" x1="284.7" y1="-357.1" x2="286" y2="-357.1"
|
||||
gradientTransform="translate(-265.5 388.7)" xlink:href="#d" />
|
||||
<linearGradient id="p" x1="399.8" y1="-1305.6" x2="401.1" y2="-1305.6"
|
||||
gradientTransform="translate(-379.3 828.4) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="q" x1="193.2" y1="-2205.3" x2="194.6" y2="-2205.3"
|
||||
gradientTransform="translate(-171.1 1378.2) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="r" x1="-1631.6" y1="322.1" x2="-1630.3" y2="322.1"
|
||||
gradientTransform="translate(1659.6 353.6) scale(1 -1)" xlink:href="#d" />
|
||||
<linearGradient id="s" x1="-897.2" y1="1360.9" x2="-895.8" y2="1360.9"
|
||||
gradientTransform="translate(923.8 862.2) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="t" x1="-264.3" y1="1028.5" x2="-263" y2="1028.5"
|
||||
gradientTransform="translate(289.3 658) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="u" x1="-18.7" y1="1918.6" x2="-17.3" y2="1918.6"
|
||||
gradientTransform="translate(42.2 710.2) scale(1 -.4)" xlink:href="#d" />
|
||||
<linearGradient id="v" x1="-1912" y1="127.5" x2="-1908.5" y2="127.5"
|
||||
gradientTransform="translate(1927.1 -85.1)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#888" />
|
||||
<stop offset="0" stop-color="#888" />
|
||||
<stop offset="0" stop-color="#acacac" />
|
||||
<stop offset=".1" stop-color="#cacaca" />
|
||||
<stop offset=".2" stop-color="#e1e1e1" />
|
||||
<stop offset=".3" stop-color="#f2f2f2" />
|
||||
<stop offset=".4" stop-color="#fbfbfb" />
|
||||
<stop offset=".5" stop-color="#fff" />
|
||||
<stop offset=".7" stop-color="#fcfcfc" />
|
||||
<stop offset=".8" stop-color="#f5f5f5" />
|
||||
<stop offset=".9" stop-color="#e8e8e8" />
|
||||
<stop offset=".9" stop-color="#d6d6d7" />
|
||||
<stop offset="1" stop-color="#bfbfc0" />
|
||||
<stop offset="1" stop-color="#b4b4b5" />
|
||||
</linearGradient>
|
||||
<linearGradient id="w" x1="43.3" y1="53.7" x2="44.7" y2="53.7" xlink:href="#d" />
|
||||
<linearGradient id="x" x1="33.4" y1="53.7" x2="34.8" y2="53.7" xlink:href="#d" />
|
||||
<linearGradient id="y" x1="298.7" y1="-362" x2="300" y2="-362"
|
||||
gradientTransform="translate(-264.7 393.6)" xlink:href="#d" />
|
||||
<linearGradient id="z" x1="408.8" y1="-1324.8" x2="410.1" y2="-1324.8"
|
||||
gradientTransform="translate(-373.5 840.2) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="aa" x1="196.7" y1="-2228.8" x2="198" y2="-2228.8"
|
||||
gradientTransform="translate(-159.8 1392.6) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="ab" x1="-1645.6" y1="327.1" x2="-1644.2" y2="327.1"
|
||||
gradientTransform="translate(1688.3 358.7) scale(1 -1)" xlink:href="#d" />
|
||||
<linearGradient id="ac" x1="-906.6" y1="1379.6" x2="-905.2" y2="1379.6"
|
||||
gradientTransform="translate(948.1 873.7) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="ad" x1="-267.6" y1="1052.1" x2="-266.2" y2="1052.1"
|
||||
gradientTransform="translate(307.4 672.5) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="ae" x1="-18.7" y1="1960.3" x2="-17.3" y2="1960.3"
|
||||
gradientTransform="translate(57 725) scale(1 -.4)" xlink:href="#d" />
|
||||
<linearGradient id="af" y1="142.3" y2="142.3" gradientTransform="translate(1941.9 -99.9)"
|
||||
xlink:href="#v" />
|
||||
<linearGradient id="ag" x1="58.1" y1="53.7" x2="59.5" y2="53.7" xlink:href="#d" />
|
||||
<linearGradient id="ah" x1="48.2" y1="53.7" x2="49.6" y2="53.7" xlink:href="#d" />
|
||||
<linearGradient id="ai" x1="312.7" y1="-366.9" x2="314" y2="-366.9"
|
||||
gradientTransform="translate(-263.9 398.4)" xlink:href="#d" />
|
||||
<linearGradient id="aj" x1="417.7" y1="-1344.1" x2="419.1" y2="-1344.1"
|
||||
gradientTransform="translate(-367.7 852) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="ak" x1="200.1" y1="-2252.4" x2="201.5" y2="-2252.4"
|
||||
gradientTransform="translate(-148.4 1407) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="al" x1="-1659.5" y1="332.2" x2="-1658.1" y2="332.2"
|
||||
gradientTransform="translate(1717.1 363.7) scale(1 -1)" xlink:href="#d" />
|
||||
<linearGradient id="am" x1="-916.1" y1="1398.2" x2="-914.7" y2="1398.2"
|
||||
gradientTransform="translate(972.3 885.1) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="an" x1="-270.8" y1="1075.8" x2="-269.4" y2="1075.8"
|
||||
gradientTransform="translate(325.4 686.9) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="ao" x1="-18.7" y1="2002" x2="-17.3" y2="2002"
|
||||
gradientTransform="translate(71.8 739.9) scale(1 -.4)" xlink:href="#d" />
|
||||
<linearGradient id="ap" y1="157.1" y2="157.1" gradientTransform="translate(1956.7 -114.7)"
|
||||
xlink:href="#v" />
|
||||
<linearGradient id="aq" x1="73" y1="53.7" x2="74.4" y2="53.7" xlink:href="#d" />
|
||||
<linearGradient id="ar" x1="63.1" y1="53.7" x2="64.4" y2="53.7" xlink:href="#d" />
|
||||
<linearGradient id="as" x1="326.7" y1="-371.7" x2="328.1" y2="-371.7"
|
||||
gradientTransform="translate(-263.1 403.3)" xlink:href="#d" />
|
||||
<linearGradient id="at" x1="426.8" y1="-1363.4" x2="428.1" y2="-1363.4"
|
||||
gradientTransform="translate(-361.9 863.8) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="au" x1="203.6" y1="-2276" x2="205" y2="-2276"
|
||||
gradientTransform="translate(-137 1421.5) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="av" x1="-1673.5" y1="337.2" x2="-1672.1" y2="337.2"
|
||||
gradientTransform="translate(1745.9 368.8) scale(1 -1)" xlink:href="#d" />
|
||||
<linearGradient id="aw" x1="-925.5" y1="1417" x2="-924.2" y2="1417"
|
||||
gradientTransform="translate(996.7 896.5) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="ax" x1="-274" y1="1099.5" x2="-272.7" y2="1099.5"
|
||||
gradientTransform="translate(343.5 701.5) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="ay" x1="-18.7" y1="2043.8" x2="-17.3" y2="2043.8"
|
||||
gradientTransform="translate(86.7 754.7) scale(1 -.4)" xlink:href="#d" />
|
||||
<linearGradient id="az" y1="172" y2="172" gradientTransform="translate(1971.6 -129.6)"
|
||||
xlink:href="#v" />
|
||||
<linearGradient id="ba" x1="87.8" y1="53.8" x2="89.2" y2="53.8" xlink:href="#d" />
|
||||
<linearGradient id="bb" x1="77.9" y1="53.8" x2="79.3" y2="53.8" xlink:href="#d" />
|
||||
<linearGradient id="bc" x1="340.7" y1="-376.6" x2="342.1" y2="-376.6"
|
||||
gradientTransform="translate(-262.3 408.1)" xlink:href="#d" />
|
||||
<linearGradient id="bd" x1="435.8" y1="-1382.6" x2="437.1" y2="-1382.6"
|
||||
gradientTransform="translate(-356 875.6) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="be" x1="207" y1="-2299.6" x2="208.4" y2="-2299.6"
|
||||
gradientTransform="translate(-125.6 1435.9) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="bf" x1="-1687.4" y1="342.3" x2="-1686" y2="342.3"
|
||||
gradientTransform="translate(1774.7 373.8) scale(1 -1)" xlink:href="#d" />
|
||||
<linearGradient id="bg" x1="-935" y1="1435.6" x2="-933.6" y2="1435.6"
|
||||
gradientTransform="translate(1020.9 908) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="bh" x1="-277.2" y1="1123.1" x2="-275.9" y2="1123.1"
|
||||
gradientTransform="translate(361.6 715.9) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="bi" x1="-18.6" y1="2085.5" x2="-17.3" y2="2085.5"
|
||||
gradientTransform="translate(101.5 769.6) scale(1 -.4)" xlink:href="#d" />
|
||||
<linearGradient id="bj" y1="186.8" y2="186.8" gradientTransform="translate(1986.4 -144.4)"
|
||||
xlink:href="#v" />
|
||||
<linearGradient id="bk" x1="102.7" y1="53.8" x2="104" y2="53.8" xlink:href="#d" />
|
||||
<linearGradient id="bl" x1="92.7" y1="53.8" x2="94.1" y2="53.8" xlink:href="#d" />
|
||||
<linearGradient id="bm" x1="354.7" y1="-381.4" x2="356.1" y2="-381.4"
|
||||
gradientTransform="translate(-261.4 413)" xlink:href="#d" />
|
||||
<linearGradient id="bn" x1="444.8" y1="-1401.9" x2="446.1" y2="-1401.9"
|
||||
gradientTransform="translate(-350.2 887.4) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="bo" x1="210.5" y1="-2323.1" x2="211.9" y2="-2323.1"
|
||||
gradientTransform="translate(-114.3 1450.3) scale(1 .6)" xlink:href="#d" />
|
||||
<linearGradient id="bp" x1="-1701.3" y1="347.3" x2="-1700" y2="347.3"
|
||||
gradientTransform="translate(1803.4 378.9) scale(1 -1)" xlink:href="#d" />
|
||||
<linearGradient id="bq" x1="-944.4" y1="1454.3" x2="-943" y2="1454.3"
|
||||
gradientTransform="translate(1045.2 919.4) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="br" x1="-280.5" y1="1146.8" x2="-279.1" y2="1146.8"
|
||||
gradientTransform="translate(379.6 730.4) scale(1 -.6)" xlink:href="#d" />
|
||||
<linearGradient id="bs" x1="-18.6" y1="2127.2" x2="-17.3" y2="2127.2"
|
||||
gradientTransform="translate(116.3 784.4) scale(1 -.4)" xlink:href="#d" />
|
||||
<linearGradient id="bt" y1="201.6" y2="201.6" gradientTransform="translate(2001.2 -159.2)"
|
||||
xlink:href="#v" />
|
||||
<linearGradient id="bu" x1="-709.6" y1="357.9" x2="-704.2" y2="357.9"
|
||||
gradientTransform="translate(760.8 -286)" xlink:href="#d" />
|
||||
<linearGradient id="bv" y1="215.5" y2="215.5" gradientTransform="translate(2015.2 -173.1)"
|
||||
xlink:href="#v" />
|
||||
<linearGradient id="bw" y1="113.5" y2="113.5" gradientTransform="translate(1913.1 -71.1)"
|
||||
xlink:href="#v" />
|
||||
<linearGradient id="bx" x1="-1014.3" y1="-422" x2="-1009.5" y2="-422"
|
||||
gradientTransform="translate(1043.7 496.6)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#979797" />
|
||||
<stop offset="0" stop-color="#a1a1a1" />
|
||||
<stop offset=".1" stop-color="#c3c3c3" />
|
||||
<stop offset=".2" stop-color="#d7d7d7" />
|
||||
<stop offset=".3" stop-color="#dfdfdf" />
|
||||
<stop offset=".4" stop-color="#dadada" />
|
||||
<stop offset=".5" stop-color="#cbcccc" />
|
||||
<stop offset=".6" stop-color="#b4b4b6" />
|
||||
<stop offset=".7" stop-color="#939496" />
|
||||
<stop offset=".8" stop-color="#696b6e" />
|
||||
<stop offset=".8" stop-color="#3e4146" />
|
||||
<stop offset="1" stop-color="#3f4147" />
|
||||
<stop offset="1" stop-color="#424249" />
|
||||
</linearGradient>
|
||||
<linearGradient id="by" x1="-1058.7" x2="-1053.9"
|
||||
gradientTransform="translate(1132.6 496.6)" xlink:href="#bx" />
|
||||
</defs>
|
||||
<g id="c">
|
||||
<path class="ej"
|
||||
d="m13.9,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<path class="eb"
|
||||
d="m4,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<rect class="ei" x="4.3" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(10.6 .1) rotate(19.1)" />
|
||||
<rect class="er" x="5.6" y="28.4" width="1.4" height="2.2"
|
||||
transform="translate(25.9 6.6) rotate(52.6)" />
|
||||
<rect class="ep" x="7.3" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(33.9 14.3) rotate(76.5)" />
|
||||
<rect class="eo" x="13.1" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(37.5 56.5) rotate(160.1)" />
|
||||
<rect class="el" x="11.8" y="28.3" width="1.4" height="2.2"
|
||||
transform="translate(43.1 38.6) rotate(129.6)" />
|
||||
<rect class="eu" x="10.2" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(41.1 24.3) rotate(102.6)" />
|
||||
<rect class="ew" x="8.7" y="27.8" width="1.4" height="1.2"
|
||||
transform="translate(37.8 19) rotate(90)" />
|
||||
<path class="eq"
|
||||
d="m28.7,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<path class="ev"
|
||||
d="m18.8,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<rect class="es" x="19.1" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(11.4 -4.8) rotate(19.1)" />
|
||||
<rect class="et" x="20.4" y="28.4" width="1.4" height="2.2"
|
||||
transform="translate(31.7 -5.2) rotate(52.6)" />
|
||||
<rect class="em" x="22.1" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(45.3 -.2) rotate(76.5)" />
|
||||
<rect class="en" x="27.9" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(66.2 51.5) rotate(160.1)" />
|
||||
<rect class="ek" x="26.6" y="28.3" width="1.4" height="2.2"
|
||||
transform="translate(67.4 27.1) rotate(129.6)" />
|
||||
<rect class="eh" x="25" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(59.2 9.8) rotate(102.6)" />
|
||||
<rect class="eg" x="23.5" y="27.8" width="1.4" height="1.2"
|
||||
transform="translate(52.6 4.2) rotate(90)" />
|
||||
<rect class="ea" x="15" y="40.6" width="3.5" height="3.5"
|
||||
transform="translate(-25.6 59.2) rotate(-90)" />
|
||||
<path class="ef"
|
||||
d="m43.6,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<path class="ee"
|
||||
d="m33.6,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<rect class="ec" x="34" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(12.3 -9.6) rotate(19.1)" />
|
||||
<rect class="ed" x="35.2" y="28.4" width="1.4" height="2.2"
|
||||
transform="translate(37.5 -17) rotate(52.6)" />
|
||||
<rect class="cd" x="36.9" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(56.7 -14.6) rotate(76.5)" />
|
||||
<rect class="ch" x="42.7" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(95 46.4) rotate(160.1)" />
|
||||
<rect class="co" x="41.5" y="28.3" width="1.4" height="2.2"
|
||||
transform="translate(91.7 15.7) rotate(129.6)" />
|
||||
<rect class="cl" x="39.8" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(77.2 -4.7) rotate(102.6)" />
|
||||
<rect class="cg" x="38.4" y="27.8" width="1.4" height="1.2"
|
||||
transform="translate(67.4 -10.6) rotate(90)" />
|
||||
<rect class="cf" x="29.9" y="40.6" width="3.5" height="3.5"
|
||||
transform="translate(-10.8 74) rotate(-90)" />
|
||||
<path class="cc"
|
||||
d="m58.4,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<path class="cb"
|
||||
d="m48.4,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<rect class="ck" x="48.8" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(13.1 -14.5) rotate(19.1)" />
|
||||
<rect class="ci" x="50" y="28.4" width="1.4" height="2.2"
|
||||
transform="translate(43.4 -28.7) rotate(52.6)" />
|
||||
<rect class="dw" x="51.7" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(68.1 -29) rotate(76.5)" />
|
||||
<rect class="dx" x="57.6" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(123.8 41.4) rotate(160.1)" />
|
||||
<rect class="cn" x="56.3" y="28.3" width="1.4" height="2.2"
|
||||
transform="translate(116 4.3) rotate(129.6)" />
|
||||
<rect class="cm" x="54.6" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(95.3 -19.1) rotate(102.6)" />
|
||||
<rect class="ce" x="53.2" y="27.8" width="1.4" height="1.2"
|
||||
transform="translate(82.3 -25.5) rotate(90)" />
|
||||
<rect class="cj" x="44.7" y="40.6" width="3.5" height="3.5"
|
||||
transform="translate(4.1 88.9) rotate(-90)" />
|
||||
<path class="du"
|
||||
d="m73.2,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<path class="dq"
|
||||
d="m63.3,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<rect class="cq" x="63.6" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(13.9 -19.3) rotate(19.1)" />
|
||||
<rect class="cp" x="64.9" y="28.4" width="1.4" height="2.2"
|
||||
transform="translate(49.2 -40.5) rotate(52.6)" />
|
||||
<rect class="dy" x="66.6" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(79.5 -43.4) rotate(76.5)" />
|
||||
<rect class="dz" x="72.4" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(152.6 36.3) rotate(160.1)" />
|
||||
<rect class="dt" x="71.1" y="28.3" width="1.4" height="2.2"
|
||||
transform="translate(140.3 -7.2) rotate(129.6)" />
|
||||
<rect class="dv" x="69.5" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(113.4 -33.6) rotate(102.6)" />
|
||||
<rect class="dr" x="68" y="27.8" width="1.4" height="1.2"
|
||||
transform="translate(97.1 -40.3) rotate(90)" />
|
||||
<rect class="ds" x="59.5" y="40.6" width="3.5" height="3.5"
|
||||
transform="translate(18.9 103.7) rotate(-90)" />
|
||||
<path class="db"
|
||||
d="m88.1,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<path class="dc"
|
||||
d="m78.1,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<rect class="de" x="78.5" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(14.7 -24.2) rotate(19.1)" />
|
||||
<rect class="cs" x="79.7" y="28.4" width="1.4" height="2.2"
|
||||
transform="translate(55.1 -52.3) rotate(52.6)" />
|
||||
<rect class="cv" x="81.4" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(90.9 -57.8) rotate(76.5)" />
|
||||
<rect class="cw" x="87.2" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(181.4 31.3) rotate(160.1)" />
|
||||
<rect class="ct" x="86" y="28.3" width="1.4" height="2.2"
|
||||
transform="translate(164.6 -18.6) rotate(129.6)" />
|
||||
<rect class="cz" x="84.3" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(131.4 -48.1) rotate(102.6)" />
|
||||
<rect class="cr" x="82.9" y="27.8" width="1.4" height="1.2"
|
||||
transform="translate(111.9 -55.1) rotate(90)" />
|
||||
<rect class="cu" x="74.4" y="40.6" width="3.5" height="3.5"
|
||||
transform="translate(33.7 118.5) rotate(-90)" />
|
||||
<path class="dd"
|
||||
d="m102.9,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<path class="dl"
|
||||
d="m92.9,32.8h.9c.1,0,.2.1.2.2v41.5c0,0,0,.1-.1.1h-1.2s0,0,0,0v-41.6c0-.1.1-.2.2-.2Z" />
|
||||
<rect class="cy" x="93.3" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(15.5 -29) rotate(19.1)" />
|
||||
<rect class="da" x="94.5" y="28.4" width="1.4" height="2.2"
|
||||
transform="translate(60.9 -64.1) rotate(52.6)" />
|
||||
<rect class="cx" x="96.2" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(102.2 -72.3) rotate(76.5)" />
|
||||
<rect class="dn" x="102.1" y="29.7" width="1.4" height="3.7"
|
||||
transform="translate(210.1 26.2) rotate(160.1)" />
|
||||
<rect class="dg" x="100.8" y="28.3" width="1.4" height="2.2"
|
||||
transform="translate(188.8 -30) rotate(129.6)" />
|
||||
<rect class="dh" x="99.1" y="27.5" width="1.4" height="2.2"
|
||||
transform="translate(149.5 -62.6) rotate(102.6)" />
|
||||
<rect class="di" x="97.7" y="27.8" width="1.4" height="1.2"
|
||||
transform="translate(126.8 -70) rotate(90)" />
|
||||
<rect class="dk" x="89.2" y="40.6" width="3.5" height="3.5"
|
||||
transform="translate(48.6 133.4) rotate(-90)" />
|
||||
<path class="do" d="m51.3,20h5.2c0,0,.1,0,.1.1v103.7h-5.4V20.2c0,0,0-.1.1-.1Z"
|
||||
transform="translate(-18.1 125.8) rotate(-90)" />
|
||||
<rect class="dp" x="103.1" y="41.5" width="3.5" height="1.8"
|
||||
transform="translate(62.5 147.3) rotate(-90)" />
|
||||
<rect class="dm" x="1.1" y="41.5" width="3.5" height="1.8"
|
||||
transform="translate(-39.5 45.2) rotate(-90)" />
|
||||
<path class="df"
|
||||
d="m30.1,69.2h3.1c.6,0,1.1.5,1.1,1.1v8.8c0,.5-.4,1-1,1h-3.4c-.5,0-.9-.4-.9-.9v-8.8c0-.6.5-1.1,1.1-1.1Z"
|
||||
transform="translate(63.3 149.3) rotate(180)" />
|
||||
<path class="dj"
|
||||
d="m74.6,69.2h3.1c.6,0,1.1.5,1.1,1.1v8.8c0,.5-.4,1-1,1h-3.4c-.5,0-.9-.4-.9-.9v-8.8c0-.6.5-1.1,1.1-1.1Z"
|
||||
transform="translate(152.2 149.3) rotate(180)" />
|
||||
<line class="ca" x1="2" y1="53.7" x2="105.8" y2="53.7" />
|
||||
<line class="ca" x1="53.9" y1="102.6" x2="53.9" y2="4.9" />
|
||||
<rect class="bz" width="107.5" height="107.5" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 25 KiB |
BIN
collect-library/src/main/assets/omdb/icon_2071_0.jpg
Normal file
|
After Width: | Height: | Size: 25 KiB |
1
collect-library/src/main/assets/omdb/icon_2071_0.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><defs><style>.d{fill:#889b86;stroke-width:0px;}</style></defs><g id="c"><rect class="d" width="18" height="18"/></g></svg>
|
||||
|
After Width: | Height: | Size: 250 B |
BIN
collect-library/src/main/assets/omdb/icon_2071_1.png
Normal file
|
After Width: | Height: | Size: 136 B |
1
collect-library/src/main/assets/omdb/icon_2071_1.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><defs><style>.d{fill:#45aa04;stroke-width:0px;}</style></defs><g id="c"><rect class="d" width="18" height="18"/></g></svg>
|
||||
|
After Width: | Height: | Size: 250 B |
BIN
collect-library/src/main/assets/omdb/icon_2071_2.png
Normal file
|
After Width: | Height: | Size: 128 B |
1
collect-library/src/main/assets/omdb/icon_2071_2.svg
Normal file
@ -0,0 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><defs><style>.d{fill:#134c05;stroke-width:0px;}</style></defs><g id="c"><rect class="d" width="18" height="18"/></g></svg>
|
||||
|
After Width: | Height: | Size: 250 B |
@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="b" xmlns="http://www.w3.org/2000/svg" width="70" height="94"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 70 94">
|
||||
@ -30,4 +31,7 @@
|
||||
<ellipse class="l" cx="35.3" cy="45.3" rx="20.1" ry="19.6" />
|
||||
<ellipse class="h" cx="35.3" cy="45.3" rx="19" ry="18.6" />
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
=======
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="70" height="94" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 70 94"><defs><style>.h{stroke:#db4646;stroke-width:2.1px;}.h,.i{fill:none;}.j{fill:#a74d4b;opacity:.7;}.j,.i,.k,.l,.m,.n{stroke-width:0px;}.j,.k{isolation:isolate;}.i{opacity:0;}.k{fill:#ff5f4c;opacity:.3;}.l{fill:#fff;}.m{fill:url(#f);}.n{fill:url(#g);}</style><radialGradient id="f" cx="263.2" cy="286.8" fx="263.2" fy="286.8" r=".9" gradientTransform="translate(-9405.4 -24647.8) rotate(38.2) scale(75.3 47.3) skewX(7.6)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ff9287"/><stop offset=".8" stop-color="#ff5f4c"/><stop offset="1" stop-color="#ff5f4c"/></radialGradient><radialGradient id="g" cx="259.6" cy="284" fx="259.6" fy="284" r=".4" gradientTransform="translate(-14219.7 -15164.5) scale(54.9 53.6)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e75545"/><stop offset=".8" stop-color="#c4483b"/><stop offset="1" stop-color="#983b31"/></radialGradient></defs><g id="c"><rect class="i" width="70" height="94"/><ellipse id="d" class="k" cx="35.8" cy="84.1" rx="14.4" ry="3.7"/><ellipse id="e" class="j" cx="35.8" cy="84.1" rx="7.5" ry="3"/><path class="m" d="m26.8,71.1l-1.1-1.1c-9.6-4.2-15.6-13.5-15.4-23.6,0-14.1,11.2-25.5,25-25.5s25,11.4,25,25.5-6.5,19.8-15.6,23.6c-.3.3-.6.6-.9,1-3.4,3.9-6.2,8.3-8.3,13,0,0-3.6-7.9-8.9-13h.1Z"/><ellipse class="n" cx="35.1" cy="45.5" rx="19.8" ry="19.3"/><ellipse class="l" cx="35.3" cy="45.3" rx="20.1" ry="19.6"/><ellipse class="h" cx="35.3" cy="45.3" rx="19" ry="18.6"/></g></svg>
|
||||
>>>>>>> 231d7c429d62e54c11acce062a03219ecc511632
|
||||
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 3.5 KiB |
@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="b" xmlns="http://www.w3.org/2000/svg" width="70" height="94"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 70 94">
|
||||
@ -35,4 +36,7 @@
|
||||
<line class="k" x1="21.4" y1="57.7" x2="47.6" y2="32.2" />
|
||||
<path class="k" d="m26.4,61.7l13.4-13.1,11.9-11.5" />
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
=======
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="70" height="94" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 70 94"><defs><style>.h{stroke:#db4646;}.h,.i{stroke-width:2.1px;}.h,.i,.j,.k{fill:none;}.i,.k{stroke:#2f2f2f;}.l{fill:#363333;opacity:.7;}.l,.m{isolation:isolate;}.l,.m,.j,.n,.o,.p{stroke-width:0px;}.m{fill:#262d34;opacity:.2;}.j{opacity:0;}.k{stroke-linecap:round;stroke-width:1.4px;}.n{fill:#fff;}.o{fill:url(#f);}.p{fill:url(#g);}</style><radialGradient id="f" cx="-356.5" cy="276.3" fx="-356.5" fy="276.3" r="1.3" gradientTransform="translate(19417.3 3353.6) rotate(38.1) scale(54 33.9) skewX(7.5)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b5b4b4"/><stop offset=".7" stop-color="#6e6c6c"/><stop offset="1" stop-color="#2f2f2f"/></radialGradient><radialGradient id="g" cx="-355.3" cy="282.7" fx="-355.3" fy="282.7" r=".5" gradientTransform="translate(14044.3 -10803.9) scale(39.4 38.4)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e75545"/><stop offset=".8" stop-color="#c4483b"/><stop offset="1" stop-color="#983b31"/></radialGradient></defs><g id="c"><rect class="j" width="70" height="94"/><ellipse id="d" class="m" cx="35" cy="83.3" rx="14.4" ry="3.7"/><ellipse id="e" class="l" cx="35" cy="83.3" rx="7.5" ry="3"/><path class="o" d="m26.5,71l-1.1-1c-9.6-4.2-15.6-13.4-15.4-23.6,0-14.1,11.2-25.5,25-25.5s25,11.4,25,25.5-6.5,19.8-15.6,23.6c-.3.3-.6.6-.9,1-3.4,3.9-6.2,8.3-8.3,13,0,0-3.6-7.8-8.9-13h.1Z"/><ellipse class="p" cx="34.8" cy="45.4" rx="19.8" ry="19.2"/><ellipse class="n" cx="35" cy="45.2" rx="20.1" ry="19.6"/><ellipse class="h" cx="35" cy="45.2" rx="19" ry="18.5"/><ellipse class="n" cx="35" cy="45.2" rx="20.1" ry="19.6"/><ellipse class="i" cx="35" cy="45.2" rx="19" ry="18.5"/><line class="k" x1="17.9" y1="53.1" x2="42.2" y2="29.3"/><line class="k" x1="21.4" y1="57.7" x2="47.6" y2="32.2"/><path class="k" d="m26.4,61.7l13.4-13.1,11.9-11.5"/></g></svg>
|
||||
>>>>>>> 231d7c429d62e54c11acce062a03219ecc511632
|
||||
|
||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 4.3 KiB |
@ -1 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="b" xmlns="http://www.w3.org/2000/svg" width="70" height="136" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 70 136"><defs><linearGradient id="e" x1="-2257" y1="-504.6" x2="-2257" y2="-504.2" gradientTransform="translate(166148.2 45512.3) scale(73.6 90.2)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#5f1508"/><stop offset="1" stop-color="#ef8673"/></linearGradient><radialGradient id="f" cx="-2254" cy="-528.2" fx="-2254" fy="-528.2" r=".9" gradientTransform="translate(122034 131049.2) rotate(38.9) scale(76 48) skewX(8.4)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffd587"/><stop offset=".6" stop-color="#ed7b28"/><stop offset="1" stop-color="#a81705"/></radialGradient><radialGradient id="g" cx="-2246.7" cy="-496.6" fx="-2246.7" fy="-496.6" r=".3" gradientTransform="translate(123377.3 27295.5) scale(54.9)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#e75545"/><stop offset=".8" stop-color="#c4483b"/><stop offset="1" stop-color="#983b31"/></radialGradient></defs><g id="c"><g id="d"><rect width="70" height="136" style="fill:none; stroke-width:0px;"/><ellipse cx="34.9" cy="68.8" rx="16.5" ry="5.8" style="fill:#ff8a4c; isolation:isolate; opacity:.3; stroke-width:0px;"/><ellipse cx="34.9" cy="68.8" rx="5.8" ry="2.2" style="fill:#a74d4b; isolation:isolate; opacity:.7; stroke-width:0px;"/><path d="m26.4,54.1c-.4-.3-.7-.7-1.1-1-12.6-5.2-18.7-19.6-13.5-32.2,3.9-9.4,13.1-15.5,23.2-15.4,13.7-.1,24.8,10.7,25,24.4.1,10.2-6.1,19.4-15.6,23.3-.3.3-.5.6-.9,1-3.4,3.8-6.1,8-8.2,12.6,0,0-3.6-7.6-8.9-12.6Z" style="fill:url(#e); stroke-width:0px;"/><path d="m26.8,56.1l-1-1c-9-4.1-14.7-13-14.6-22.8,0-13.7,10.6-24.8,23.7-24.8s23.7,11.1,23.7,24.8-6.1,19.2-14.8,22.9c-.3.3-.5.6-.8,1-3.2,3.8-5.8,8.1-7.8,12.6,0,0-3.4-7.6-8.4-12.6h0Z" style="fill:url(#f); stroke-width:0px;"/><circle cx="34.7" cy="31.3" r="18.7" style="fill:url(#g); stroke-width:0px;"/><path d="m20.9,15.4c-.3,0-.5-.2-.5-.4,0-.2,0-.5.1-.6,1.2-1.2,2.6-2,4.1-2.7h.5c.1,0,.3.2.3.3.1.3,0,.7-.3.8-1.4.5-2.6,1.4-3.7,2.4-.1.1-.3.2-.5.1h0Zm-1.6,1.8c-.1,0-.2,0-.3-.1-.1,0-.2-.3-.3-.4,0-.1,0-.3.1-.5l.3-.3c.1-.1.3-.2.4-.2s.3,0,.5.1c.1,0,.2.3.3.4,0,.1,0,.3-.1.5l-.3.3c-.1.2-.3.3-.5.3" style="fill:#fff; stroke-width:0px;"/><path d="m34.4,49.3c-2.4,0-4.8-.5-7-1.4-2.2-.9-4.1-2.2-5.7-3.9s-2.9-3.6-3.9-5.7c-1-2.2-1.4-4.6-1.4-7s.5-4.8,1.4-7c.9-2.2,2.2-4.1,3.9-5.7,1.7-1.6,3.6-2.9,5.7-3.9,2.2-1,4.6-1.4,7-1.4s4.8.5,7,1.4c2.2.9,4.1,2.2,5.7,3.9s2.9,3.6,3.9,5.7c1,2.2,1.4,4.6,1.4,7s-.5,4.8-1.4,7c-.9,2.2-2.2,4.1-3.9,5.7s-3.6,2.9-5.7,3.9c-2.2,1-4.6,1.4-7,1.4Z" style="fill:#272727; stroke-width:0px;"/><path d="m34.4,14.3c-2.3,0-4.6.5-6.6,1.4s-3.9,2.1-5.4,3.7c-1.6,1.6-2.8,3.4-3.7,5.4-.9,2.1-1.4,4.4-1.4,6.6s.5,4.6,1.4,6.6,2.1,3.9,3.7,5.4c1.6,1.6,3.4,2.8,5.4,3.7,2.1.9,4.4,1.4,6.6,1.4s4.6-.5,6.6-1.4,3.9-2.1,5.4-3.7c1.6-1.6,2.8-3.4,3.7-5.4.9-2.1,1.4-4.4,1.4-6.6s-.5-4.6-1.4-6.6-2.1-3.9-3.7-5.4c-1.6-1.6-3.4-2.8-5.4-3.7-2.1-.9-4.4-1.4-6.6-1.4m0-2c10.5,0,19,8.5,19,19s-8.5,19-19,19-19-8.5-19-19,8.5-19,19-19Z" style="fill:#db4646; stroke-width:0px;"/><g style="isolation:isolate;"><text transform="translate(24.9 36.7)" style="fill:#fff; font-family:PingFangSC-Regular-GBpc-EUC-H, 'PingFang SC'; font-size:19px; isolation:isolate;"><tspan x="0" y="0">限</tspan></text></g></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="b" xmlns="http://www.w3.org/2000/svg" width="70" height="136"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 70 136">
|
||||
<defs>
|
||||
<linearGradient id="e" x1="-2257" y1="-504.6" x2="-2257" y2="-504.2"
|
||||
gradientTransform="translate(166148.2 45512.3) scale(73.6 90.2)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#5f1508" />
|
||||
<stop offset="1" stop-color="#ef8673" />
|
||||
</linearGradient>
|
||||
<radialGradient id="f" cx="-2254" cy="-528.2" fx="-2254" fy="-528.2" r=".9"
|
||||
gradientTransform="translate(122034 131049.2) rotate(38.9) scale(76 48) skewX(8.4)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#ffd587" />
|
||||
<stop offset=".6" stop-color="#ed7b28" />
|
||||
<stop offset="1" stop-color="#a81705" />
|
||||
</radialGradient>
|
||||
<radialGradient id="g" cx="-2246.7" cy="-496.6" fx="-2246.7" fy="-496.6" r=".3"
|
||||
gradientTransform="translate(123377.3 27295.5) scale(54.9)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#e75545" />
|
||||
<stop offset=".8" stop-color="#c4483b" />
|
||||
<stop offset="1" stop-color="#983b31" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<g id="c">
|
||||
<g id="d">
|
||||
<rect width="70" height="136" style="fill:none; stroke-width:0px;" />
|
||||
<ellipse cx="34.9" cy="68.8" rx="16.5" ry="5.8"
|
||||
style="fill:#ff8a4c; isolation:isolate; opacity:.3; stroke-width:0px;" />
|
||||
<ellipse cx="34.9" cy="68.8" rx="5.8" ry="2.2"
|
||||
style="fill:#a74d4b; isolation:isolate; opacity:.7; stroke-width:0px;" />
|
||||
<path
|
||||
d="m26.4,54.1c-.4-.3-.7-.7-1.1-1-12.6-5.2-18.7-19.6-13.5-32.2,3.9-9.4,13.1-15.5,23.2-15.4,13.7-.1,24.8,10.7,25,24.4.1,10.2-6.1,19.4-15.6,23.3-.3.3-.5.6-.9,1-3.4,3.8-6.1,8-8.2,12.6,0,0-3.6-7.6-8.9-12.6Z"
|
||||
style="fill:url(#e); stroke-width:0px;" />
|
||||
<path
|
||||
d="m26.8,56.1l-1-1c-9-4.1-14.7-13-14.6-22.8,0-13.7,10.6-24.8,23.7-24.8s23.7,11.1,23.7,24.8-6.1,19.2-14.8,22.9c-.3.3-.5.6-.8,1-3.2,3.8-5.8,8.1-7.8,12.6,0,0-3.4-7.6-8.4-12.6h0Z"
|
||||
style="fill:url(#f); stroke-width:0px;" />
|
||||
<circle cx="34.7" cy="31.3" r="18.7" style="fill:url(#g); stroke-width:0px;" />
|
||||
<path
|
||||
d="m20.9,15.4c-.3,0-.5-.2-.5-.4,0-.2,0-.5.1-.6,1.2-1.2,2.6-2,4.1-2.7h.5c.1,0,.3.2.3.3.1.3,0,.7-.3.8-1.4.5-2.6,1.4-3.7,2.4-.1.1-.3.2-.5.1h0Zm-1.6,1.8c-.1,0-.2,0-.3-.1-.1,0-.2-.3-.3-.4,0-.1,0-.3.1-.5l.3-.3c.1-.1.3-.2.4-.2s.3,0,.5.1c.1,0,.2.3.3.4,0,.1,0,.3-.1.5l-.3.3c-.1.2-.3.3-.5.3"
|
||||
style="fill:#fff; stroke-width:0px;" />
|
||||
<path
|
||||
d="m34.4,49.3c-2.4,0-4.8-.5-7-1.4-2.2-.9-4.1-2.2-5.7-3.9s-2.9-3.6-3.9-5.7c-1-2.2-1.4-4.6-1.4-7s.5-4.8,1.4-7c.9-2.2,2.2-4.1,3.9-5.7,1.7-1.6,3.6-2.9,5.7-3.9,2.2-1,4.6-1.4,7-1.4s4.8.5,7,1.4c2.2.9,4.1,2.2,5.7,3.9s2.9,3.6,3.9,5.7c1,2.2,1.4,4.6,1.4,7s-.5,4.8-1.4,7c-.9,2.2-2.2,4.1-3.9,5.7s-3.6,2.9-5.7,3.9c-2.2,1-4.6,1.4-7,1.4Z"
|
||||
style="fill:#272727; stroke-width:0px;" />
|
||||
<path
|
||||
d="m34.4,14.3c-2.3,0-4.6.5-6.6,1.4s-3.9,2.1-5.4,3.7c-1.6,1.6-2.8,3.4-3.7,5.4-.9,2.1-1.4,4.4-1.4,6.6s.5,4.6,1.4,6.6,2.1,3.9,3.7,5.4c1.6,1.6,3.4,2.8,5.4,3.7,2.1.9,4.4,1.4,6.6,1.4s4.6-.5,6.6-1.4,3.9-2.1,5.4-3.7c1.6-1.6,2.8-3.4,3.7-5.4.9-2.1,1.4-4.4,1.4-6.6s-.5-4.6-1.4-6.6-2.1-3.9-3.7-5.4c-1.6-1.6-3.4-2.8-5.4-3.7-2.1-.9-4.4-1.4-6.6-1.4m0-2c10.5,0,19,8.5,19,19s-8.5,19-19,19-19-8.5-19-19,8.5-19,19-19Z"
|
||||
style="fill:#db4646; stroke-width:0px;" />
|
||||
<g style="isolation:isolate;">
|
||||
<text transform="translate(24.9 36.7)"
|
||||
style="fill:#fff; font-family:PingFangSC-Regular-GBpc-EUC-H, 'PingFang SC'; font-size:19px; isolation:isolate;">
|
||||
<tspan x="0" y="0">限</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 4.0 KiB |
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="b" xmlns="http://www.w3.org/2000/svg" width="70" height="94"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 70 94">
|
||||
<defs>
|
||||
<style>.e{fill:none;opacity:0;}.e,.f{stroke-width:0px;}.f{fill:url(#d);}</style>
|
||||
<linearGradient id="d" x1="399.5" y1="413.3" x2="399.5" y2="411.9"
|
||||
gradientTransform="translate(-4397.7 -3927.6) rotate(90) scale(10 -10.8)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#ca4916" />
|
||||
<stop offset="1" stop-color="#f7ad5d" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="c">
|
||||
<rect class="e" width="70" height="94" />
|
||||
<path class="f"
|
||||
d="m35,82.4h22.4v-4.1c0-.7.4-1.3,1-1.6.6-.3,1.3-.2,1.7.2l7.4,5.8c.8.6.9,1.7.2,2.5,0,0-.1.1-.2.2l-7.4,5.8c-.5.4-1.2.5-1.7.2-.6-.3-1-.9-1-1.6v-4.2h-22.3c0-.6,0-.7,0-1.4s0-1.1,0-1.9h0Z" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 928 B |
@ -1,92 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 28 124">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #aa211a;
|
||||
mix-blend-mode: multiply;
|
||||
}
|
||||
|
||||
.cls-1, .cls-2, .cls-3, .cls-4, .cls-5, .cls-6, .cls-7, .cls-8, .cls-9 {
|
||||
stroke-width: 0px;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: none;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.cls-10 {
|
||||
isolation: isolate;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: url(#_铃琨眄沭噤桢眚_3);
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
fill: #721715;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #d24f00;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: #dd2824;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: #bc1919;
|
||||
}
|
||||
|
||||
.cls-8 {
|
||||
fill: #ffe2d6;
|
||||
}
|
||||
|
||||
.cls-9 {
|
||||
fill: #ff4545;
|
||||
}
|
||||
</style>
|
||||
<linearGradient id="_铃琨眄沭噤桢眚_3" data-name="铃琨眄沭噤桢眚 3" x1="-3198.91" y1="65.71" x2="-3176.55" y2="65.71" gradientTransform="translate(-3173.67) rotate(-180) scale(1 -1)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#d87a1e"/>
|
||||
<stop offset=".21" stop-color="#d87a1e"/>
|
||||
<stop offset=".21" stop-color="#c4660a"/>
|
||||
<stop offset=".79" stop-color="#9f3e00"/>
|
||||
<stop offset=".79" stop-color="#913300"/>
|
||||
<stop offset="1" stop-color="#9d3f00"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g class="cls-10">
|
||||
<g id="_图层_2" data-name="图层 2">
|
||||
<g id="_图层_1-2" data-name="图层 1">
|
||||
<rect class="cls-2" width="28" height="124"/>
|
||||
<g>
|
||||
<g>
|
||||
<path class="cls-3" d="m2.88,64.12v-1.9l22.36-.58v1.32c-.02,1.74-1.12,3.48-3.3,4.81-4.38,2.67-11.46,2.69-15.81.03-2.18-1.33-3.27-3.09-3.25-4.84v1.16Z"/>
|
||||
<path class="cls-6" d="m6.13,67.06c4.35,2.66,11.43,2.64,15.81-.03,4.38-2.67,4.4-7,.05-9.66-4.35-2.66-11.43-2.64-15.81.03-4.38,2.67-4.4,7-.05,9.66Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="cls-5" d="m7.52,54.02l3.57-32.53-3.62,32c0,.18.02.35.06.53Z"/>
|
||||
<path class="cls-5" d="m6.99,58.87c-.04-.09-.07-.19-.1-.28l-.42,3.75s.08.09.13.14l.39-3.6Z"/>
|
||||
<path class="cls-1" d="m10.41,21.64s-4.45,38.19-4.45,38.52c0,.8.1,1.33.3,1.97,0,0,.07.08.19.21l.42-3.75.58-5.09,3.62-32-.68.15Z"/>
|
||||
<path class="cls-6" d="m14.8,62.49l-.08-4.63-.63-35.83h-1.41l-1.63,35.39-.21,4.61-.14,3.13c1.2.47,2.6.78,4.17.7l-.06-3.37Z"/>
|
||||
<path class="cls-7" d="m11.09,21.49l-3.57,32.53-.53,4.85-.39,3.6c.61.61,2.04,1.9,4.09,2.71l.14-3.13.21-4.61,1.63-35.39-1.59-.55Z"/>
|
||||
<path class="cls-5" d="m7.52,54.02c-.03-.18-.05-.35-.06-.53l-.58,5.09c.03.09.06.19.1.28l.53-4.85Z"/>
|
||||
<path class="cls-7" d="m17.6,21.86l-.77.18,3.66,31.62.57,4.92.53,4.59c.31-.97.43-2.01.43-3.01l-4.42-38.29Z"/>
|
||||
<path class="cls-9" d="m21.06,58.58l-.57-4.92-3.66-31.62h-2.75l.63,35.83.08,4.63.06,3.37c2-.11,4.28-.85,6.73-2.7l-.53-4.59Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="cls-4" d="m16.56,23.23c-1.4.86-3.69.85-5.1,0-1.41-.86-1.42-2.26-.02-3.11,1.4-.86,3.69-.85,5.1,0,1.41.86,1.42,2.26.02,3.11Z"/>
|
||||
<path class="cls-4" d="m16.3,23.12c-1.34.82-3.52.81-4.86,0-1.35-.82-1.35-2.15-.02-2.97,1.34-.82,3.52-.81,4.86,0,1.35.82,1.35,2.15.02,2.97Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="cls-8" d="m19.24,52.34c-3.2,2.75-8.04,2.48-10.81-.59-.59-.66-1.04-1.39-1.35-2.16-.26,2.29-.5,4.35-.69,5.99.33,1.07.89,2.1,1.71,3,3,3.33,8.17,3.76,11.55.98.91-.75,1.59-1.66,2.04-2.64l-.77-6.65c-.42.76-.98,1.47-1.68,2.08Z"/>
|
||||
<path class="cls-8" d="m19.34,47.54c.43-.36.8-.76,1.12-1.19l-.75-6.53c-.23.27-.48.54-.75.78-3.02,2.64-7.59,2.39-10.21-.57-.18-.2-.34-.41-.49-.63-.23,2.01-.47,4.04-.69,5.99.25.42.54.83.88,1.21,2.83,3.2,7.72,3.62,10.91.94Z"/>
|
||||
<path class="cls-8" d="m19.18,35.21l-.68-5.9c-2.74,1.8-6.51,1.69-9.05-.22-.2,1.69-.41,3.56-.64,5.51,2.82,2.45,7.32,2.73,10.37.6Z"/>
|
||||
</g>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="124"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 28 124">
|
||||
<defs>
|
||||
<linearGradient id="d" x1="2056" y1="65.7" x2="2078.3" y2="65.7"
|
||||
gradientTransform="translate(2081.2) rotate(-180) scale(1 -1)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#d87a1e" />
|
||||
<stop offset=".2" stop-color="#d87a1e" />
|
||||
<stop offset=".2" stop-color="#c4660a" />
|
||||
<stop offset=".8" stop-color="#9f3e00" />
|
||||
<stop offset=".8" stop-color="#913300" />
|
||||
<stop offset="1" stop-color="#9d3f00" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g style="isolation:isolate;">
|
||||
<g id="b">
|
||||
<g id="c">
|
||||
<rect width="28" height="124" style="fill:none; opacity:0; stroke-width:0px;" />
|
||||
<path
|
||||
d="m2.9,62.2l22.4-.6v1.3c0,1.7-1.1,3.5-3.3,4.8-4.4,2.7-11.5,2.7-15.8,0-2.2-1.3-3.3-3.1-3.2-4.8"
|
||||
style="fill:url(#d); stroke-width:0px;" />
|
||||
<path
|
||||
d="m6.1,67.1c4.4,2.7,11.4,2.6,15.8,0,4.4-2.7,4.4-7,0-9.7-4.4-2.7-11.4-2.6-15.8,0-4.4,2.7-4.4,7,0,9.7Z"
|
||||
style="fill:#dd2824; stroke-width:0px;" />
|
||||
<path d="m7.5,54l3.6-32.5-3.6,32c0,.2,0,.4,0,.5Z"
|
||||
style="fill:#aa211a; mix-blend-mode:multiply; stroke-width:0px;" />
|
||||
<path d="m7,58.9c0,0,0-.2-.1-.3l-.4,3.7s0,0,.1.1l.4-3.6Z"
|
||||
style="fill:#aa211a; mix-blend-mode:multiply; stroke-width:0px;" />
|
||||
<path
|
||||
d="m10.4,21.6s-4.4,38.2-4.4,38.5c0,.8.1,1.3.3,2,0,0,0,0,.2.2l.4-3.7.6-5.1,3.6-32h-.7Z"
|
||||
style="fill:#aa211a; mix-blend-mode:multiply; stroke-width:0px;" />
|
||||
<path
|
||||
d="m14.8,62.5v-4.6c0,0-.7-35.8-.7-35.8h-1.4l-1.6,35.4-.2,4.6v3.1c1.1.5,2.5.8,4,.7v-3.4Z"
|
||||
style="fill:#dd2824; stroke-width:0px;" />
|
||||
<path
|
||||
d="m11.1,21.5l-3.6,32.5-.5,4.8-.4,3.6c.6.6,2,1.9,4.1,2.7v-3.1c.1,0,.4-4.6.4-4.6l1.6-35.4-1.6-.5Z"
|
||||
style="fill:#bc1919; stroke-width:0px;" />
|
||||
<path d="m7.5,54c0-.2,0-.4,0-.5l-.6,5.1c0,0,0,.2.1.3l.5-4.8Z"
|
||||
style="fill:#aa211a; mix-blend-mode:multiply; stroke-width:0px;" />
|
||||
<path d="m17.6,21.9l-.8.2,3.7,31.6.6,4.9.5,4.6c.3-1,.4-2,.4-3l-4.4-38.3Z"
|
||||
style="fill:#bc1919; stroke-width:0px;" />
|
||||
<path
|
||||
d="m21.1,58.6l-.6-4.9-3.7-31.6h-2.7l.6,35.8v4.6c0,0,.1,3.4.1,3.4,2-.1,4.3-.8,6.7-2.7l-.5-4.6Z"
|
||||
style="fill:#ff4545; stroke-width:0px;" />
|
||||
<path
|
||||
d="m16.6,23.2c-1.4.9-3.7.9-5.1,0-1.4-.9-1.4-2.3,0-3.1,1.4-.9,3.7-.9,5.1,0,1.4.9,1.4,2.3,0,3.1Z"
|
||||
style="fill:#721715; stroke-width:0px;" />
|
||||
<path
|
||||
d="m16.3,23.1c-1.3.8-3.5.8-4.9,0-1.3-.8-1.4-2.2,0-3,1.3-.8,3.5-.8,4.9,0,1.3.8,1.4,2.2,0,3Z"
|
||||
style="fill:#891515; stroke-width:0px;" />
|
||||
<path
|
||||
d="m19.2,52.3c-3.2,2.7-8,2.5-10.8-.6-.6-.7-1-1.4-1.3-2.2-.3,2.3-.5,4.3-.7,6,.3,1.1.9,2.1,1.7,3,3,3.3,8.2,3.8,11.5,1,.9-.7,1.6-1.7,2-2.6l-.8-6.6c-.4.8-1,1.5-1.7,2.1Z"
|
||||
style="fill:#ffe2d6; stroke-width:0px;" />
|
||||
<path
|
||||
d="m19.3,47.5c.4-.4.8-.8,1.1-1.2l-.8-6.5c-.2.3-.5.5-.8.8-3,2.6-7.6,2.4-10.2-.6-.2-.2-.3-.4-.5-.6-.2,2-.5,4-.7,6,.2.4.5.8.9,1.2,2.8,3.2,7.7,3.6,10.9.9Z"
|
||||
style="fill:#ffe2d6; stroke-width:0px;" />
|
||||
<path
|
||||
d="m19.2,35.2l-.7-5.9c-2.7,1.8-6.5,1.7-9-.2-.2,1.7-.4,3.6-.6,5.5,2.8,2.5,7.3,2.7,10.4.6Z"
|
||||
style="fill:#ffe2d6; stroke-width:0px;" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.8 KiB |
@ -1,7 +1,5 @@
|
||||
package com.navinfo.collect.library.data.entity
|
||||
|
||||
import com.navinfo.collect.library.utils.GeometryTools
|
||||
import com.navinfo.collect.library.utils.GeometryToolsKt
|
||||
import io.realm.RealmObject
|
||||
import io.realm.annotations.PrimaryKey
|
||||
|
||||
@ -45,4 +43,10 @@ open class HadLinkDvoBean @JvmOverloads constructor(
|
||||
* 长度(米)
|
||||
*/
|
||||
var length: Double = 0.000,
|
||||
|
||||
/**
|
||||
* 这条link是不是参与到路径计算中
|
||||
*/
|
||||
var isNavi: Boolean = true
|
||||
|
||||
) : RealmObject()
|
||||
@ -0,0 +1,27 @@
|
||||
package com.navinfo.collect.library.data.entity
|
||||
|
||||
import io.realm.RealmObject
|
||||
import io.realm.annotations.PrimaryKey
|
||||
|
||||
open class NavInfo @JvmOverloads constructor(
|
||||
@PrimaryKey
|
||||
var id: Int = 0,
|
||||
/**
|
||||
* 起点link
|
||||
*/
|
||||
var naviStartLinkId: String = "",
|
||||
|
||||
/**
|
||||
* 终点link
|
||||
*/
|
||||
var naviEndLinkId: String = "",
|
||||
|
||||
/**
|
||||
* 起点NodeId
|
||||
*/
|
||||
var naviStartNode: String = "",
|
||||
|
||||
var naviEndNode: String = "",
|
||||
|
||||
) : RealmObject() {
|
||||
}
|
||||
@ -69,8 +69,11 @@ open class TaskBean @JvmOverloads constructor(
|
||||
var message: String = "",
|
||||
@Ignore
|
||||
var errMsg: String = "",
|
||||
var color: Int = 0xFF00AA
|
||||
) : RealmObject() {
|
||||
var color: Int = 0xFF00AA,
|
||||
|
||||
var navInfo: NavInfo? = null,
|
||||
|
||||
) : RealmObject() {
|
||||
fun getDownLoadUrl(): String {
|
||||
return "${Constant.SERVER_ADDRESS}devcp/downFile?fileStr=$id"
|
||||
}
|
||||
|
||||
@ -33,11 +33,13 @@ public enum class DataCodeEnum(var tableName: String, var code: String) {
|
||||
OMDB_RAMP_7("高速直连出口匝道高速出入口匝道", "2037-7"),
|
||||
OMDB_MULTI_DIGITIZED("上下线分离", "2040"),
|
||||
OMDB_LANE_NUM("车道数", "2041"),
|
||||
OMDB_LANE_TYPE_ACCESS("车道类型", "2092"),
|
||||
OMDB_PHY_LANENUM("物理车道数", "2097"),
|
||||
OMDB_VIADUCT("高架", "2043"),
|
||||
OMDB_LINK_SEPARATION("设施分离", "2070"),
|
||||
OMDB_LINK_MEDIAN("中央隔离带", "2071"),
|
||||
OMDB_RDBOUND_BOUNDARYTYPE("道路边界类型", "2083"),
|
||||
OMDB_LANE_CONSTRUCTION("车道施工", "2090"),
|
||||
OMDB_LANE_TYPE_ACCESS("车道类型","2092"),
|
||||
OMDB_BRIDGE("桥", "2201"),
|
||||
OMDB_BRIDGE_1("固定桥", "2201-1"),
|
||||
OMDB_BRIDGE_2("可移动桥", "2201-2"),
|
||||
@ -72,14 +74,16 @@ public enum class DataCodeEnum(var tableName: String, var code: String) {
|
||||
OMDB_FILL_AREA("导流区", "3012"),
|
||||
OMDB_CROSS_WALK("人行横道", "3014"),
|
||||
OMDB_OBJECT_STOPLOCATION("停止位置", "3016"),
|
||||
OMDB_OBJECT_REFUGE_ISLAND("路口内交通岛","3027"),
|
||||
OMDB_OBJECT_REFUGE_ISLAND("路口内交通岛", "3027"),
|
||||
OMDB_INTERSECTION("路口", "4001"),
|
||||
OMDB_SPEEDLIMIT("常规点限速", "4002"),
|
||||
OMDB_SPEEDLIMIT_COND("条件点限速", "4003"),
|
||||
OMDB_SPEEDLIMIT_VAR("可变点限速", "4004"),
|
||||
OMDB_LANE_SPEEDLIMIT("车道点限速", "4005"),
|
||||
OMDB_RESTRICTION("普通交限", "4006"),
|
||||
OMDB_WARNINGSIGN("警示信息", "4009"),
|
||||
OMDB_ELECTRONICEYE("电子眼", "4010"),
|
||||
OMDB_ZLEVEL("立交", "4016"),
|
||||
OMDB_TRAFFICLIGHT("交通灯", "4022"),
|
||||
OMDB_TOLLGATE("收费站", "4023"),
|
||||
OMDB_LANEINFO("车信", "4601"),
|
||||
|
||||
@ -3,5 +3,5 @@ package com.navinfo.collect.library.map
|
||||
import org.oscim.core.GeoPoint
|
||||
|
||||
interface OnGeoPointClickListener : BaseClickListener {
|
||||
fun onMapClick(tag: String, point: GeoPoint)
|
||||
fun onMapClick(tag: String, point: GeoPoint, other: String = "")
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import android.content.Context
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Color
|
||||
import android.util.Log
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.res.ResourcesCompat
|
||||
import com.navinfo.collect.library.R
|
||||
@ -12,6 +13,7 @@ import com.navinfo.collect.library.data.entity.NoteBean
|
||||
import com.navinfo.collect.library.data.entity.QsRecordBean
|
||||
import com.navinfo.collect.library.map.BaseClickListener
|
||||
import com.navinfo.collect.library.map.NIMapView
|
||||
import com.navinfo.collect.library.map.OnGeoPointClickListener
|
||||
import com.navinfo.collect.library.map.cluster.ClusterMarkerItem
|
||||
import com.navinfo.collect.library.map.cluster.ClusterMarkerRenderer
|
||||
import com.navinfo.collect.library.map.layers.MyItemizedLayer
|
||||
@ -37,7 +39,7 @@ import java.util.*
|
||||
/**
|
||||
* marker 操作
|
||||
*/
|
||||
class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
|
||||
class MarkHandler(val context: AppCompatActivity, mapView: NIMapView) :
|
||||
BaseHandler(context, mapView) {
|
||||
|
||||
/**
|
||||
@ -73,6 +75,8 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
|
||||
*/
|
||||
private val canvas: org.oscim.backend.canvas.Canvas = CanvasAdapter.newCanvas()
|
||||
|
||||
private var mStartEndMarkerLayer: ItemizedLayer? = null
|
||||
|
||||
/**
|
||||
* 默认marker图层
|
||||
*/
|
||||
@ -1015,6 +1019,68 @@ class MarkHandler(context: AppCompatActivity, mapView: NIMapView) :
|
||||
|
||||
return -1
|
||||
}
|
||||
|
||||
fun removeNaviMarkerLayer() {
|
||||
if (mStartEndMarkerLayer != null) {
|
||||
removeLayer(mStartEndMarkerLayer!!)
|
||||
mStartEndMarkerLayer = null
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 显示选择起点 终点
|
||||
*/
|
||||
fun showNaviStartOrEndLayer(sNodePoint: GeoPoint, eNodePoint: GeoPoint, sNodeId: String, eNodeId: String, bStart: Boolean) {
|
||||
removeNaviMarkerLayer()
|
||||
if (mStartEndMarkerLayer == null) {
|
||||
val mDefaultBitmap = if(bStart) {
|
||||
AndroidBitmap(BitmapFactory.decodeResource(context.resources, R.drawable.navi_set_start_point))
|
||||
}else{
|
||||
AndroidBitmap(BitmapFactory.decodeResource(context.resources, R.drawable.navi_set_end_point))
|
||||
}
|
||||
// mDefaultBitmap.scaleTo(150, 150)
|
||||
val markerSymbol = MarkerSymbol(
|
||||
mDefaultBitmap,
|
||||
MarkerSymbol.HotspotPlace.BOTTOM_CENTER
|
||||
)
|
||||
mStartEndMarkerLayer = ItemizedLayer(
|
||||
mMapView.vtmMap,
|
||||
markerSymbol,
|
||||
)
|
||||
addLayer(mStartEndMarkerLayer!!, NIMapView.LAYER_GROUPS.OPERATE_MARKER)
|
||||
mStartEndMarkerLayer!!.setOnItemGestureListener(object : OnItemGestureListener<MarkerInterface> {
|
||||
override fun onItemSingleTapUp(index: Int, item: MarkerInterface): Boolean {
|
||||
val tag = mMapView.listenerTagList.last()
|
||||
val listenerList = mMapView.listenerList[tag]
|
||||
if (listenerList != null) {
|
||||
for (listener in listenerList) {
|
||||
if (listener is OnGeoPointClickListener) {
|
||||
listener.onMapClick(tag, item.point, (item as MarkerItem).title)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onItemLongPress(index: Int, item: MarkerInterface): Boolean {
|
||||
return true
|
||||
}
|
||||
})
|
||||
} else {
|
||||
mStartEndMarkerLayer!!.removeAllItems()
|
||||
}
|
||||
mStartEndMarkerLayer!!.addItem(MarkerItem(sNodeId, "", sNodePoint))
|
||||
mStartEndMarkerLayer!!.addItem(MarkerItem(eNodeId, "", eNodePoint))
|
||||
}
|
||||
|
||||
fun clearNaviStartPoint() {
|
||||
if (mStartEndMarkerLayer != null) {
|
||||
removeLayer(mStartEndMarkerLayer!!)
|
||||
mStartEndMarkerLayer = null
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
interface OnQsRecordItemClickListener : BaseClickListener {
|
||||
|
||||
@ -91,7 +91,7 @@ public class OMDBDataDecoder extends TileDecoder {
|
||||
}
|
||||
});
|
||||
//增加交通标牌聚合显示
|
||||
List<RenderEntity> list1 = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.getCode(), list, 5.0);
|
||||
List<RenderEntity> list1 = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFIC_SIGN.getCode(), list, 3.0);
|
||||
if (list1 != null && list1.size() > 0) {
|
||||
Log.e("qj", "聚合交通标牌转换开始" + list.size());
|
||||
list1.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
|
||||
@ -105,7 +105,7 @@ public class OMDBDataDecoder extends TileDecoder {
|
||||
Log.e("qj", "聚合交通标牌转换结束" + list1.size());
|
||||
}
|
||||
//增加交通标牌聚合显示
|
||||
List<RenderEntity> list2 = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFICLIGHT.getCode(), traffList, 5.0);
|
||||
List<RenderEntity> list2 = GeometryTools.groupByDistance(DataCodeEnum.OMDB_TRAFFICLIGHT.getCode(), traffList, 2.0);
|
||||
if (list2 != null && list2.size() > 0) {
|
||||
Log.e("qj", "聚合红绿灯转换开始" + traffList.size());
|
||||
list2.stream().iterator().forEachRemaining(new Consumer<RenderEntity>() {
|
||||
|
||||
BIN
collect-library/src/main/res/drawable/navi_set_end_point.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
collect-library/src/main/res/drawable/navi_set_start_point.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |