From 51c44f00b17e62d8de329b5a4c2f108a1250803d Mon Sep 17 00:00:00 2001 From: squallzhjch Date: Fri, 20 Oct 2023 16:30:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/assets/omdb_config.json | 1291 ++++++++--------- .../com/navinfo/omqs/db/ImportOMDBHelper.kt | 58 +- .../com/navinfo/omqs/db/ImportPreProcess.kt | 8 +- .../com/navinfo/omqs/db/RealmOperateHelper.kt | 5 +- .../omqs/ui/activity/map/MainViewModel.kt | 6 +- .../java/com/navinfo/omqs/util/NaviEngine.kt | 106 +- .../library/data/entity/LinkRelation.kt | 7 +- .../library/data/entity/RenderEntity.kt | 4 + 8 files changed, 746 insertions(+), 739 deletions(-) diff --git a/app/src/main/assets/omdb_config.json b/app/src/main/assets/omdb_config.json index 89c49505..36740a1c 100644 --- a/app/src/main/assets/omdb_config.json +++ b/app/src/main/assets/omdb_config.json @@ -1,648 +1,647 @@ [ - { - "tableGroupName": "普通图层", - "tableMap" : { - "1007": { - "table": "OMDB_NODE_FORM", - "code": 1007, - "name": "点形态", - "existSubCode": true, - "checkLinkId": false, - "zoomMin": 15, - "zoomMax": 20 - }, - "1007_PA": { - "table": "OMDB_NODE_PA", - "code": 1007, - "name": "点形态PA", - "existSubCode": true, - "checkLinkId": false, - "zoomMin": 15, - "zoomMax": 20 - }, - "1012": { - "table": "OMDB_CHECKPOINT", - "code": 1012, - "name": "检查点", - "catch":true, - "zoomMin": 15, - "zoomMax": 20 - }, - "2001": { - "table": "OMDB_RD_LINK", - "code": 2001, - "name": "道路线", - "zoomMin": 15, - "zoomMax": 17, - "catch":true, - "checkLinkId": false - }, - "2002": { - "table": "OMDB_RD_LINK_FUNCTION_CLASS", - "code": 2002, - "name": "道路功能等级", - "zoomMin": 15, - "zoomMax": 17 - }, - "2008": { - "table": "OMDB_RD_LINK_KIND", - "code": 2008, - "name": "道路种别", - "zoomMin": 15, - "zoomMax": 17, - "catch":false, - "checkLinkId": false - }, - "2010": { - "table": "OMDB_LINK_DIRECT", - "code": 2010, - "name": "道路方向", - "zoomMin": 15, - "zoomMax": 17, - "checkLinkId": false, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "addRdLinkDirect()" - } - ] - }, - "2011": { - "table": "OMDB_LINK_NAME", - "code": 2011, - "name": "道路名", - "zoomMin": 15, - "zoomMax": 17, - "checkLinkId": false, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateRoadName()" - } - ] - }, - "2013": { - "table": "OMDB_LANE_MARK_BOUNDARYTYPE", - "code": 2013, - "name": "车道边界类型", - "zoomMin": 18, - "zoomMax": 20, - "checkLinkId": false, - "filterData": true, - "catch":true, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "unpackingLaneBoundary()" - } - ] - }, - "2017": { - "table": "OMDB_LINK_CONSTRUCTION", - "code": 2017, - "name": "道路施工", - "catch":true, - "checkLinkId": false, - "zoomMin": 15, - "zoomMax": 17 - }, - "2019": { - "table": "OMDB_LINK_SPEEDLIMIT", - "code": 2019, - "name": "常规线限速", - "zoomMin": 15, - "zoomMax": 17 - }, - "2020": { - "table": "OMDB_LINK_SPEEDLIMIT_COND", - "code": 2020, - "name": "条件线限速", - "zoomMin": 15, - "zoomMax": 17 - }, - "2021": { - "table": "OMDB_LINK_SPEEDLIMIT_VAR", - "code": 2021, - "name": "可变线限速", - "zoomMin": 15, - "zoomMax": 17 - }, - "2041":{ - "table": "OMDB_LANE_NUM", - "code": 2041, - "name": "车道数" - }, - "2083":{ - "table": "OMDB_RDBOUND_BOUNDARYTYPE", - "code": 2083, - "name": "道路边界类型", - "checkLinkId": false, - "filterData": true, - "zoomMin": 18, - "zoomMax": 20, - "catch":true - }, - "2090":{ - "table": "OMDB_LANE_CONSTRUCTION", - "code": 2090, - "name": "车道施工", - "existSubCode": true, - "catch":true, - "zoomMin": 18, - "zoomMax": 20 - }, - "2201":{ - "table": "OMDB_BRIDGE", - "code": 2201, - "name": "桥", - "catch":true, - "existSubCode": true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateS2EReferencePoint(bridgeType,OMDB_BRIDGE)" - } - ] - }, - "2202":{ - "table": "OMDB_TUNNEL", - "code": 2202, - "name": "隧道", - "zoomMin": 15, - "zoomMax": 20, - "catch":true, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateS2EReferencePoint()" - } - ] - }, - "3001":{ - "table": "OMDB_OBJECT_OH_STRUCT", - "code": 3001, - "name": "上方障碍物", - "zoomMin": 15, - "zoomMax": 20, - "catch":true, - "checkLinkId": false, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "getPolygonCenterPoint()" - } - ] - }, - "3002":{ - "table": "OMDB_OBJECT_TEXT", - "code": 3002, - "name": "文字", - "zoomMin": 18, - "zoomMax": 20, - "catch":true, - "checkLinkId": false, - "transformer": [] - }, - "3003":{ - "table": "OMDB_OBJECT_SYMBOL", - "code": 3003, - "name": "符号", - "checkLinkId": false, - "zoomMin": 18, - "zoomMax": 20, - "catch":true, - "transformer": [] - }, - "3004":{ - "table": "OMDB_OBJECT_ARROW", - "code": 3004, - "name": "箭头", - "checkLinkId": false, - "zoomMin": 18, - "zoomMax": 20, - "catch":true, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "obtainDynamicSrc('assets:omdb/arrowDirection/','.svg','arrowClass')" - } - ] - }, - "3005":{ - "table": "OMDB_TRAFFIC_SIGN", - "code": 3005, - "name": "交通标牌", - "zoomMin": 18, - "zoomMax": 20, - "is3D": true, - "catch":true, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "obtainTrafficSignCenterPoint()" - } - ] - }, - "3006":{ - "table": "OMDB_POLE", - "code": 3006, - "name": "杆状物", - "is3D": true, - "catch":true, - "filterData": true, - "zoomMin": 18, - "zoomMax": 20, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "normalizationPoleHeight()" - } - ] - }, - "3012":{ - "table": "OMDB_FILL_AREA", - "code": 3012, - "name": "导流区", - "catch":true, - "checkLinkId": false, - "zoomMin": 18, - "zoomMax": 20 - }, - "3014":{ - "table": "OMDB_CROSS_WALK", - "code": 3014, - "name": "人行横道", - "catch":true, - "checkLinkId": false, - "zoomMin": 18, - "zoomMax": 20 - }, - "3016":{ - "table": "OMDB_OBJECT_STOPLOCATION", - "code": 3016, - "name": "停止位置", - "checkLinkId": false, - "filterData": true, - "zoomMin": 18, - "catch":true, - "zoomMax": 20 - }, - "3027":{ - "table": "OMDB_OBJECT_REFUGE_ISLAND", - "code": 3027, - "name": "路口内交通岛", - "catch":true, - "checkLinkId": false, - "zoomMin": 18, - "zoomMax": 20 - }, - "4001": { - "table": "OMDB_INTERSECTION", - "code": 4001, - "name": "路口", - "zoomMin": 15, - "zoomMax": 17, - "catch":true, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateIntersectionReference()" - } - ] - }, - "4002": { - "table": "OMDB_SPEEDLIMIT", - "code": 4002, - "name": "常规点限速", - "catch":true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - { - "k": "maxSpeed", - "v": "0", - "klib": "maxSpeed", - "vlib": "限" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "translateRight()" - } - ] - }, - "4003":{ - "table": "OMDB_SPEEDLIMIT_COND", - "code": 4003, - "name": "条件点限速", - "catch":true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - { - "k": "maxSpeed", - "v": "0|", - "klib": "maxSpeed", - "vlib": "限" - } - ] - }, - "4004":{ - "table": "OMDB_SPEEDLIMIT_VAR", - "code": 4004, - "name": "可变点限速", - "catch":true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - { - "k": "location", - "v": "1", - "klib": "ref", - "vlib": "左" - }, - { - "k": "location", - "v": "2", - "klib": "ref", - "vlib": "右" - }, - { - "k": "location", - "v": "3", - "klib": "ref", - "vlib": "上" - } - ] - }, - "4006": { - "table": "OMDB_RESTRICTION", - "code": 4006, - "name": "普通交限", - "zoomMin": 15, - "zoomMax": 17, - "filterData":true, - "catch":true, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "checkCircleRoad()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "translateBack()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "translateRight()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateS2EReferenceLine()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateDirectReferenceLine()" - } - ] - }, - "4009":{ - "table": "OMDB_WARNINGSIGN", - "code": 4009, - "name": "警示信息", - "catch":true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "translateRight()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateS2EReferenceLine()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateDirectReferenceLine('',3)" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "obtainReferenceDynamicSrc('assets:omdb/appendix/1105_','_0.svg','typeCode')" - } - ] - }, - "4010":{ - "table": "OMDB_ELECTRONICEYE", - "code": 4010, - "name": "电子眼", - "catch":true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "translateRight()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateS2EReferenceLine()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateDirectReferenceLine('',3)" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateElectronName()" - } - ] - }, - "4022": { - "table": "OMDB_TRAFFICLIGHT", - "code": 4022, - "name": "交通灯", - "catch":true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - ] - }, - "4023": { - "table": "OMDB_TOLLGATE", - "code": 4023, - "name": "收费站", - "catch":true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - ] - }, - "4601":{ - "table": "OMDB_LANEINFO", - "code": 4601, - "name": "车信", - "catch":true, - "zoomMin": 15, - "zoomMax": 17, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "translateRight(direct=3)" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "unpackingLaneInfo()" - }, - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateS2EReferenceLine()" - } - ] - }, - "5001":{ - "table": "OMDB_LANE_LINK_LG", - "code": 5001, - "name": "车道中心线", - "catch":false, - "checkLinkId": false, - "zoomMin": 18, - "zoomMax": 20, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateAddWidthLine()" - } - ] - } - } - }, - { - "tableGroupName": "道路形态", - "tableMap" : { - "2004": { - "table": "OMDB_LINK_ATTRIBUTE", - "code": 2004, - "name": "道路属性", - "existSubCode": true, - "catch":true, - "zoomMin": 15, - "zoomMax": 20, - "transformer": [ - { - "k": "geometry", - "v": "~", - "klib": "geometry", - "vlib": "generateRoadText()" - } - ] - }, - "2022": { - "table": "OMDB_CON_ACCESS", - "code": 2022, - "name": "全封闭", - "zoomMin": 15, - "zoomMax": 17 - }, - "2037": { - "table": "OMDB_RAMP", - "code": 2037, - "name": "匝道", - "existSubCode": true, - "zoomMin": 15, - "zoomMax": 17 - }, - "2040": { - "table": "OMDB_MULTI_DIGITIZED", - "code": 2040, - "name": "上下线分离", - "zoomMin": 15, - "zoomMax": 17 - }, - "2204":{ - "table": "OMDB_ROUNDABOUT", - "code": 2204, - "name": "环岛", - "catch":true, - "zoomMin": 15, - "zoomMax": 17, - "transformer": [ - ] - }, - "2205":{ - "table": "OMDB_LINK_FORM1", - "code": 2205, - "name": "道路形态1", - "existSubCode": true, - "zoomMin": 15, - "zoomMax": 17 - }, - "2206":{ - "table": "OMDB_LINK_FORM2", - "code": 2206, - "existSubCode": true, - "name": "道路形态2", - "zoomMin": 15, - "zoomMax": 17 - } - - } - } + { + "tableGroupName": "普通图层", + "tableMap": { + "2001": { + "table": "OMDB_RD_LINK", + "code": 2001, + "name": "道路线", + "zoomMin": 15, + "zoomMax": 17, + "catch": true, + "checkLinkId": false + }, + "1007": { + "table": "OMDB_NODE_FORM", + "code": 1007, + "name": "点形态", + "existSubCode": true, + "checkLinkId": false, + "zoomMin": 15, + "zoomMax": 20 + }, + "1007_PA": { + "table": "OMDB_NODE_PA", + "code": 1007, + "name": "点形态PA", + "existSubCode": true, + "checkLinkId": false, + "zoomMin": 15, + "zoomMax": 20 + }, + "1012": { + "table": "OMDB_CHECKPOINT", + "code": 1012, + "name": "检查点", + "catch": true, + "zoomMin": 15, + "zoomMax": 20 + }, + "2002": { + "table": "OMDB_RD_LINK_FUNCTION_CLASS", + "code": 2002, + "name": "道路功能等级", + "zoomMin": 15, + "zoomMax": 17 + }, + "2008": { + "table": "OMDB_RD_LINK_KIND", + "code": 2008, + "name": "道路种别", + "zoomMin": 15, + "zoomMax": 17, + "catch": false, + "checkLinkId": false + }, + "2010": { + "table": "OMDB_LINK_DIRECT", + "code": 2010, + "name": "道路方向", + "zoomMin": 15, + "zoomMax": 17, + "checkLinkId": false, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "addRdLinkDirect()" + } + ] + }, + "2011": { + "table": "OMDB_LINK_NAME", + "code": 2011, + "name": "道路名", + "zoomMin": 15, + "zoomMax": 17, + "checkLinkId": false, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateRoadName()" + } + ] + }, + "2013": { + "table": "OMDB_LANE_MARK_BOUNDARYTYPE", + "code": 2013, + "name": "车道边界类型", + "zoomMin": 18, + "zoomMax": 20, + "checkLinkId": false, + "filterData": true, + "catch": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "unpackingLaneBoundary()" + } + ] + }, + "2017": { + "table": "OMDB_LINK_CONSTRUCTION", + "code": 2017, + "name": "道路施工", + "catch": true, + "checkLinkId": false, + "zoomMin": 15, + "zoomMax": 17 + }, + "2019": { + "table": "OMDB_LINK_SPEEDLIMIT", + "code": 2019, + "name": "常规线限速", + "zoomMin": 15, + "zoomMax": 17 + }, + "2020": { + "table": "OMDB_LINK_SPEEDLIMIT_COND", + "code": 2020, + "name": "条件线限速", + "zoomMin": 15, + "zoomMax": 17 + }, + "2021": { + "table": "OMDB_LINK_SPEEDLIMIT_VAR", + "code": 2021, + "name": "可变线限速", + "zoomMin": 15, + "zoomMax": 17 + }, + "2041": { + "table": "OMDB_LANE_NUM", + "code": 2041, + "name": "车道数" + }, + "2083": { + "table": "OMDB_RDBOUND_BOUNDARYTYPE", + "code": 2083, + "name": "道路边界类型", + "checkLinkId": false, + "filterData": true, + "zoomMin": 18, + "zoomMax": 20, + "catch": true + }, + "2090": { + "table": "OMDB_LANE_CONSTRUCTION", + "code": 2090, + "name": "车道施工", + "existSubCode": true, + "catch": true, + "zoomMin": 18, + "zoomMax": 20 + }, + "2201": { + "table": "OMDB_BRIDGE", + "code": 2201, + "name": "桥", + "catch": true, + "existSubCode": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferencePoint(bridgeType,OMDB_BRIDGE)" + } + ] + }, + "2202": { + "table": "OMDB_TUNNEL", + "code": 2202, + "name": "隧道", + "zoomMin": 15, + "zoomMax": 20, + "catch": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferencePoint()" + } + ] + }, + "3001": { + "table": "OMDB_OBJECT_OH_STRUCT", + "code": 3001, + "name": "上方障碍物", + "zoomMin": 15, + "zoomMax": 20, + "catch": true, + "checkLinkId": false, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "getPolygonCenterPoint()" + } + ] + }, + "3002": { + "table": "OMDB_OBJECT_TEXT", + "code": 3002, + "name": "文字", + "zoomMin": 18, + "zoomMax": 20, + "catch": true, + "checkLinkId": false, + "transformer": [] + }, + "3003": { + "table": "OMDB_OBJECT_SYMBOL", + "code": 3003, + "name": "符号", + "checkLinkId": false, + "zoomMin": 18, + "zoomMax": 20, + "catch": true, + "transformer": [] + }, + "3004": { + "table": "OMDB_OBJECT_ARROW", + "code": 3004, + "name": "箭头", + "checkLinkId": false, + "zoomMin": 18, + "zoomMax": 20, + "catch": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "obtainDynamicSrc('assets:omdb/arrowDirection/','.svg','arrowClass')" + } + ] + }, + "3005": { + "table": "OMDB_TRAFFIC_SIGN", + "code": 3005, + "name": "交通标牌", + "zoomMin": 18, + "zoomMax": 20, + "is3D": true, + "catch": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "obtainTrafficSignCenterPoint()" + } + ] + }, + "3006": { + "table": "OMDB_POLE", + "code": 3006, + "name": "杆状物", + "is3D": true, + "catch": true, + "filterData": true, + "zoomMin": 18, + "zoomMax": 20, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "normalizationPoleHeight()" + } + ] + }, + "3012": { + "table": "OMDB_FILL_AREA", + "code": 3012, + "name": "导流区", + "catch": true, + "checkLinkId": false, + "zoomMin": 18, + "zoomMax": 20 + }, + "3014": { + "table": "OMDB_CROSS_WALK", + "code": 3014, + "name": "人行横道", + "catch": true, + "checkLinkId": false, + "zoomMin": 18, + "zoomMax": 20 + }, + "3016": { + "table": "OMDB_OBJECT_STOPLOCATION", + "code": 3016, + "name": "停止位置", + "checkLinkId": false, + "filterData": true, + "zoomMin": 18, + "catch": true, + "zoomMax": 20 + }, + "3027": { + "table": "OMDB_OBJECT_REFUGE_ISLAND", + "code": 3027, + "name": "路口内交通岛", + "catch": true, + "checkLinkId": false, + "zoomMin": 18, + "zoomMax": 20 + }, + "4001": { + "table": "OMDB_INTERSECTION", + "code": 4001, + "name": "路口", + "zoomMin": 15, + "zoomMax": 17, + "catch": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateIntersectionReference()" + } + ] + }, + "4002": { + "table": "OMDB_SPEEDLIMIT", + "code": 4002, + "name": "常规点限速", + "catch": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + { + "k": "maxSpeed", + "v": "0", + "klib": "maxSpeed", + "vlib": "限" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateRight()" + } + ] + }, + "4003": { + "table": "OMDB_SPEEDLIMIT_COND", + "code": 4003, + "name": "条件点限速", + "catch": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + { + "k": "maxSpeed", + "v": "0|", + "klib": "maxSpeed", + "vlib": "限" + } + ] + }, + "4004": { + "table": "OMDB_SPEEDLIMIT_VAR", + "code": 4004, + "name": "可变点限速", + "catch": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + { + "k": "location", + "v": "1", + "klib": "ref", + "vlib": "左" + }, + { + "k": "location", + "v": "2", + "klib": "ref", + "vlib": "右" + }, + { + "k": "location", + "v": "3", + "klib": "ref", + "vlib": "上" + } + ] + }, + "4006": { + "table": "OMDB_RESTRICTION", + "code": 4006, + "name": "普通交限", + "zoomMin": 15, + "zoomMax": 17, + "filterData": true, + "catch": true, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "checkCircleRoad()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateBack()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateRight()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferenceLine()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateDirectReferenceLine()" + } + ] + }, + "4009": { + "table": "OMDB_WARNINGSIGN", + "code": 4009, + "name": "警示信息", + "catch": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateRight()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferenceLine()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateDirectReferenceLine('',3)" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "obtainReferenceDynamicSrc('assets:omdb/appendix/1105_','_0.svg','typeCode')" + } + ] + }, + "4010": { + "table": "OMDB_ELECTRONICEYE", + "code": 4010, + "name": "电子眼", + "catch": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateRight()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferenceLine()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateDirectReferenceLine('',3)" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateElectronName()" + } + ] + }, + "4022": { + "table": "OMDB_TRAFFICLIGHT", + "code": 4022, + "name": "交通灯", + "catch": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + ] + }, + "4023": { + "table": "OMDB_TOLLGATE", + "code": 4023, + "name": "收费站", + "catch": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + ] + }, + "4601": { + "table": "OMDB_LANEINFO", + "code": 4601, + "name": "车信", + "catch": true, + "zoomMin": 15, + "zoomMax": 17, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "translateRight(direct=3)" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "unpackingLaneInfo()" + }, + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateS2EReferenceLine()" + } + ] + }, + "5001": { + "table": "OMDB_LANE_LINK_LG", + "code": 5001, + "name": "车道中心线", + "catch": false, + "checkLinkId": false, + "zoomMin": 18, + "zoomMax": 20, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateAddWidthLine()" + } + ] + } + } + }, + { + "tableGroupName": "道路形态", + "tableMap": { + "2004": { + "table": "OMDB_LINK_ATTRIBUTE", + "code": 2004, + "name": "道路属性", + "existSubCode": true, + "catch": true, + "zoomMin": 15, + "zoomMax": 20, + "transformer": [ + { + "k": "geometry", + "v": "~", + "klib": "geometry", + "vlib": "generateRoadText()" + } + ] + }, + "2022": { + "table": "OMDB_CON_ACCESS", + "code": 2022, + "name": "全封闭", + "zoomMin": 15, + "zoomMax": 17 + }, + "2037": { + "table": "OMDB_RAMP", + "code": 2037, + "name": "匝道", + "existSubCode": true, + "zoomMin": 15, + "zoomMax": 17 + }, + "2040": { + "table": "OMDB_MULTI_DIGITIZED", + "code": 2040, + "name": "上下线分离", + "zoomMin": 15, + "zoomMax": 17 + }, + "2204": { + "table": "OMDB_ROUNDABOUT", + "code": 2204, + "name": "环岛", + "catch": true, + "zoomMin": 15, + "zoomMax": 17, + "transformer": [ + ] + }, + "2205": { + "table": "OMDB_LINK_FORM1", + "code": 2205, + "name": "道路形态1", + "existSubCode": true, + "zoomMin": 15, + "zoomMax": 17 + }, + "2206": { + "table": "OMDB_LINK_FORM2", + "code": 2206, + "existSubCode": true, + "name": "道路形态2", + "zoomMin": 15, + "zoomMax": 17 + } + } + } ] \ No newline at end of file diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt index 65ae1278..0fab9459 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportOMDBHelper.kt @@ -37,7 +37,9 @@ import org.locationtech.jts.geom.LineString import org.locationtech.jts.geom.MultiLineString import org.spatialite.database.SQLiteDatabase import java.io.File +import java.util.* import javax.inject.Inject +import kotlin.collections.HashMap import kotlin.streams.toList /** @@ -155,7 +157,7 @@ class ImportOMDBHelper @AssistedInject constructor( .directory(currentInstallTaskFolder) .name("OMQS.realm") .encryptionKey(Constant.PASSWORD) - .allowQueriesOnUiThread(true) +// .allowQueriesOnUiThread(true) .schemaVersion(2) .build() val unZipFolder = File(omdbZipFile.parentFile, "result") @@ -181,28 +183,27 @@ class ImportOMDBHelper @AssistedInject constructor( var tableImportTime = System.currentTimeMillis() //总表要素统计时间 var dataImportTime = System.currentTimeMillis() - - Realm.getInstance(currentInstallTaskConfig).beginTransaction() - + val realm = Realm.getInstance(currentInstallTaskConfig) + realm.beginTransaction() for (importConfig in importConfigList) { tableNum += importConfig.tableMap.size } //缓存任务link信息,便于下面与数据进行任务link匹配 val hashMap: HashMap = HashMap() - val lineList = arrayOfNulls(task.hadLinkDvoList.size) - var index = 0 +// val lineList = arrayOfNulls(task.hadLinkDvoList.size) +// var index = 0 task.hadLinkDvoList.forEach { hashMap[it.linkPid.toLong()] = it - lineList[index] = GeometryTools.createGeometry(it.geometry) as LineString - index++ +// lineList[index] = GeometryTools.createGeometry(it.geometry) as LineString +// index++ } val resHashMap: HashMap = HashMap() //define empty hashmap try { - var multipLine = MultiLineString(lineList, GeometryFactory()) +// var multipLine = MultiLineString(lineList, GeometryFactory()) // 遍历解压后的文件,读取该数据返回 @@ -259,13 +260,14 @@ class ImportOMDBHelper @AssistedInject constructor( renderEntity.zoomMin = map["qi_zoomMin"].toString().toInt() renderEntity.zoomMax = map["qi_zoomMax"].toString().toInt() // 在外层记录当前数据的linkPid - if (renderEntity.properties.containsKey("linkPid")) { + if (map.containsKey("linkPid")) { renderEntity.linkPid = - renderEntity.properties["linkPid"]?.split(",")?.get(0) + map["linkPid"].toString().split(",") + ?.get(0) .toString() - } else if (renderEntity.properties.containsKey("linkList")){ + } else if (map.containsKey("linkList")) { val linkList = - renderEntity.properties["linkList"] + map["linkList"].toString() if (!linkList.isNullOrEmpty() && linkList != "null") { val list: List = gson.fromJson( linkList, @@ -774,13 +776,18 @@ class ImportOMDBHelper @AssistedInject constructor( if (renderEntity.linkRelation == null) { renderEntity.linkRelation = LinkRelation() } - renderEntity.linkRelation!!.sNodeId = renderEntity.properties["snodePid"] - renderEntity.linkRelation!!.eNodeId = renderEntity.properties["enodePid"] + renderEntity.linkRelation!!.sNodeId = + renderEntity.properties["snodePid"] + renderEntity.linkRelation!!.eNodeId = + renderEntity.properties["enodePid"] + // 同时尝试更新RD_link的relation记录中的名称字段 + renderEntity.linkRelation!!.linkPid = + renderEntity.properties["linkPid"] + ?: UUID.randomUUID().toString() } Log.d("ImportOMDBHelper", "解析===1insert") - Realm.getInstance(currentInstallTaskConfig) - .insert(renderEntity) + realm.insert(renderEntity) Log.d("ImportOMDBHelper", "解析===2insert") } if (currentConfig.code == DataCodeEnum.OMDB_RD_LINK.code.toInt()) { @@ -805,30 +812,33 @@ class ImportOMDBHelper @AssistedInject constructor( ) elementIndex = 0 tableImportTime = System.currentTimeMillis() - if (insertIndex % 20000 == 0) { + if (insertIndex % 20000 == 0 || currentEntry.value.table == DataCodeEnum.OMDB_RD_LINK.name) { Log.d( "ImportOMDBHelper", "表解析===结束用时时间===事物开始" ) - Realm.getInstance(currentInstallTaskConfig).commitTransaction() - Realm.getInstance(currentInstallTaskConfig).beginTransaction() + realm.commitTransaction() + realm.refresh() + realm.beginTransaction() Log.d( "ImportOMDBHelper", "表解析===结束用时时间===事物结束" ) } + } } - Realm.getInstance(currentInstallTaskConfig).commitTransaction() - Realm.getInstance(currentInstallTaskConfig).close() + realm.commitTransaction() + realm.close() Log.d( "ImportOMDBHelper", "表解析===结束用时时间${(System.currentTimeMillis() - dataImportTime)}===$dataIndex===插入$insertIndex" ) Log.e("qj", "安装结束") } catch (e: Exception) { - if (Realm.getInstance(currentInstallTaskConfig).isInTransaction) { - Realm.getInstance(currentInstallTaskConfig).cancelTransaction() + if (realm.isInTransaction) { + realm.cancelTransaction() + realm.close() } throw e } diff --git a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt index ca0d695e..88975c05 100644 --- a/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt +++ b/app/src/main/java/com/navinfo/omqs/db/ImportPreProcess.kt @@ -15,6 +15,7 @@ import org.locationtech.jts.geom.Coordinate import org.locationtech.jts.geom.Geometry import org.locationtech.jts.io.WKTWriter import org.oscim.core.GeoPoint +import java.util.* class ImportPreProcess { @@ -582,13 +583,6 @@ class ImportPreProcess { } else { renderEntity.properties["name"] = "" } - // 同时尝试更新RD_link的relation记录中的名称字段 - val rdLinkEntity = queryRdLink(renderEntity.properties["linkPid"]!!) - if (rdLinkEntity?.linkRelation == null) { - rdLinkEntity?.linkRelation = LinkRelation() - } - rdLinkEntity?.linkRelation?.linkName = renderEntity.properties["name"] - Realm.getInstance(Constant.currentInstallTaskConfig).insertOrUpdate(rdLinkEntity) } /** diff --git a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt index 30cfb6d6..8a9f189a 100644 --- a/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt +++ b/app/src/main/java/com/navinfo/omqs/db/RealmOperateHelper.kt @@ -178,7 +178,8 @@ class RealmOperateHelper() { ) val realm = getRealmDefaultInstance() try { - val realmList = realm.where(HadLinkDvoBean::class.java).equalTo("taskId", taskId).findAll() + val realmList = + realm.where(HadLinkDvoBean::class.java).equalTo("taskId", taskId).findAll() var linkBean: HadLinkDvoBean? = null var nearLast: Double = 99999.99 for (link in realmList) { @@ -333,7 +334,7 @@ class RealmOperateHelper() { val result = mutableListOf() val realmList = getSelectTaskRealmTools(realm, RenderEntity::class.java, false) .notEqualTo("table", DataCodeEnum.OMDB_RD_LINK.name) - .equalTo("properties['${LinkTable.linkPid}']", linkPid) + .equalTo("linkPid", linkPid) .findAll() result.addAll(realm.copyFromRealm(realmList)) return result diff --git a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt index 36be0428..a05c1b64 100644 --- a/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt +++ b/app/src/main/java/com/navinfo/omqs/ui/activity/map/MainViewModel.kt @@ -816,8 +816,12 @@ class MainViewModel @Inject constructor( val newLineString = GeometryTools.createLineString(linePoints) linkId?.let { + val time = System.currentTimeMillis() val elementList = realmOperateHelper.queryLinkByLinkPid(realm, it) - Log.e("jingo", "捕捉到数据 ${elementList.size} 个") + Log.e( + "jingo", + "捕捉到数据 ${elementList.size} 个 ${System.currentTimeMillis() - time}" + ) for (element in elementList) { if (element.code == DataCodeEnum.OMDB_LINK_NAME.code) { hisRoadName = true diff --git a/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt b/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt index d2613b24..c5db3cd1 100644 --- a/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt +++ b/app/src/main/java/com/navinfo/omqs/util/NaviEngine.kt @@ -81,11 +81,11 @@ class NaviEngine( /** * 要查询的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 val QUERY_KEY_LINK_INFO_LIST = arrayOf( +// DataCodeEnum.OMDB_RD_LINK.name, +// DataCodeEnum.OMDB_LINK_DIRECT.name, +// DataCodeEnum.OMDB_LINK_NAME.name, +// ) // /** // * 偏离距离 单位:米 @@ -215,62 +215,56 @@ class NaviEngine( ) route.pointList = GeometryTools.getGeoPoints(link.geometry) + var time = System.currentTimeMillis() + val res = realm.where(RenderEntity::class.java) + .equalTo("table", DataCodeEnum.OMDB_RD_LINK.name).equalTo("linkPid", link.linkPid) + .findFirst() - val res = realm.where(RenderEntity::class.java).`in`("table", QUERY_KEY_LINK_INFO_LIST) - .equalTo("properties['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 - } - } - 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) - } - } + Log.e("jingo","查询link时间 ${System.currentTimeMillis() - time}") + + if (res?.linkRelation != null) { + if (res.linkRelation!!.sNodeId == null) { + callback.planningPathStatus( + NaviStatus.NAVI_STATUS_PATH_ERROR_NODE + ) + return + } else { + route.sNode = res.linkRelation!!.sNodeId!! } - } - if (!bHasNode) { + if (res.linkRelation!!.eNodeId == null) { + callback.planningPathStatus( + NaviStatus.NAVI_STATUS_PATH_ERROR_NODE + ) + return + } else { + route.eNode = res.linkRelation!!.eNodeId!! + } + + route.direct = res.linkRelation!!.direct +// route.name = res.linkRelation!!.linkName + time = System.currentTimeMillis() + val otherLinks = realm.where(RenderEntity::class.java) + .equalTo("table", DataCodeEnum.OMDB_RD_LINK.name) + .notEqualTo("linkPid", route.linkId).beginGroup() + .`in`("linkRelation.sNodeId", arrayOf(route.sNode, route.eNode)).or() + .`in`("linkRelation.eNodeId", arrayOf(route.sNode, route.eNode)).endGroup() + .findAll() + Log.e("jingo","拓扑道路时间 ${System.currentTimeMillis() - time} 共${otherLinks.size}条") + } else { callback.planningPathStatus( NaviStatus.NAVI_STATUS_PATH_ERROR_NODE ) return } - if (!bHasDir) { - callback.planningPathStatus( - NaviStatus.NAVI_STATUS_PATH_ERROR_DIRECTION - ) - return - } pathList.add(route) } + //用来存储最终的导航路径 val newRouteList = mutableListOf() + //比对路径排序用的 val tempRouteList = pathList.toMutableList() + //先找到一根有方向的link,确定起终点 var routeStart: NaviRoute? = null for (i in tempRouteList.indices) { @@ -290,7 +284,7 @@ class NaviEngine( var sNode = "" var eNode = "" - //如果sNode,eNode是顺方向,geometry 不动,否则反转 +//如果sNode,eNode是顺方向,geometry 不动,否则反转 if (routeStart.direct == 3) { routeStart.pointList.reverse() sNode = routeStart.eNode @@ -355,15 +349,14 @@ class NaviEngine( } val itemMap: MutableMap> = mutableMapOf() - //查询每根link上的关联要素 +//查询每根link上的关联要素 for (route in newRouteList) { itemMap.clear() //常规点限速 - val res = realm.where(RenderEntity::class.java) - .equalTo("properties['linkPid']", route.linkId).and().`in`( - "table", - QUERY_KEY_ITEM_LIST - ).findAll() + val res = + realm.where(RenderEntity::class.java).equalTo("linkPid", route.linkId).and().`in`( + "table", QUERY_KEY_ITEM_LIST + ).findAll() if (res.isNotEmpty()) { // Log.e("jingo", "道路查询预警要素 ${route.linkId} ${res.size}条数据") for (r in res) { @@ -541,8 +534,7 @@ class NaviEngine( // if (route.itemList != null) { // Log.e("jingo", "${route.linkId}我有${route.itemList!!.size}个要素 ") // } - if (route.indexInPath < routeIndex) - continue + if (route.indexInPath < routeIndex) continue if (route.indexInPath == routeIndex) { currentRoute = route } diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/LinkRelation.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/LinkRelation.kt index 1ee3fb8f..ccb8137a 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/LinkRelation.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/LinkRelation.kt @@ -8,6 +8,7 @@ import io.realm.RealmDictionary import io.realm.RealmObject import io.realm.RealmSet import io.realm.annotations.Ignore +import io.realm.annotations.Index import io.realm.annotations.PrimaryKey import kotlinx.parcelize.Parcelize import org.locationtech.jts.geom.Coordinate @@ -21,10 +22,12 @@ import java.util.* @Parcelize open class LinkRelation() : RealmObject(), Parcelable { @PrimaryKey - var id: String = UUID.randomUUID().toString() // id + var linkPid:String = UUID.randomUUID().toString() + @Index var sNodeId: String? = null + @Index var eNodeId: String? = null - var linkName: String? = null + var direct: Int = 0 constructor(direct: Int) : this() { diff --git a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt index ee0632cd..90d5bcd9 100644 --- a/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt +++ b/collect-library/src/main/java/com/navinfo/collect/library/data/entity/RenderEntity.kt @@ -8,6 +8,7 @@ import io.realm.RealmDictionary import io.realm.RealmObject import io.realm.RealmSet import io.realm.annotations.Ignore +import io.realm.annotations.Index import io.realm.annotations.PrimaryKey import kotlinx.parcelize.Parcelize import org.locationtech.jts.geom.Coordinate @@ -56,13 +57,16 @@ open class RenderEntity() : RealmObject(), Parcelable { return field } var properties: RealmDictionary = RealmDictionary() + @Ignore var tileX: RealmSet = RealmSet() // x方向的tile编码 + @Ignore var tileY: RealmSet = RealmSet() // y方向的tile编码 var taskId: Int = 0 //任务ID var zoomMin: Int = 18 //显示最小级别 var zoomMax: Int = 23 //显示最大级别 var enable:Int = 0 // 默认0不是显示 1为渲染显示 2为常显 var catchEnable:Int = 0 // 0不捕捉 1捕捉 + @Index lateinit var linkPid: String // RenderEntity关联的linkPid集合(可能会关联多个) var linkRelation: LinkRelation? = null