我想在地图上显示公共交通线路。我通过找到关联的关系-方式-站点或stop_position的点,从OSM收集了此信息。我从那一点构造编码的折线,稍后再显示。
可能很多。我有一点与超过20.000条线有关。
我如何以表演的方式显示它?
我尝试直接在地图上绘画,但是UI冻结。我尝试在不同的图层上绘画,但随后UI也冻结了。我尝试在不同的线程(ui线程和普通线程)中进行绘制,但是随后得到了不同的异常。
也许一个问题是,我不仅画了可见的线条,而且还画了所有的线条。但是在较低的缩放级别下,我仍然会遇到可见线过多的问题。
您能为我提供一些解决该问题的提示吗?
我的最后一种方法是这样的(它包含一些自定义功能,但希望这个想法很明确)。目前,它正在ui线程上运行,我知道这是一个问题,但是您能做些不同吗?
//p is a place which contains references to some place-specific information, which can be route data
var polylineList = ArrayList<PolylineOptions>()
for (refIndex in p.getReferences().indices) {
if (p.getReferences().get(refIndex).getData() != null) {
val data = p.getReferences().get(refIndex).getData() as Route
if (data != null) {
val polyLines: List<String> = data.polylines
for (plIndex in polyLines.indices) {
var polyLinePositions = PolylineUtils.decode(polyLines.get(plIndex), 5)
var ll: ArrayList<LatLng> = ArrayList()
for (pos in polyLinePositions) {
ll.add(LatLng(pos.latitude, pos.longitude))
}
var options = PolylineOptions()
.addAll(ll)
.color(fillColor)
.width(4f)
.alpha(0.75f)
polylineList.add(options)
}
}
}
}
mMapboxMap!!.addPolylines(polylineList)
经过编码的折线列表可能看起来像这样,如果列表很多,这只会成为问题:
"polyLines" : [
"pwl`Cvnen]RHTD",
"jyl`Cfjen]y@nC",
"fxl`Cxhen]H@D@B@B@BBBF@D@R",
"fxl`Cxhen]TSXOVS`@_@",
"n|l`Cjden]CFYl@",
"z|l`Cxcen]KP",
"r}l`Cfcen]GDEDID",
"f}l`Cbcen]CCAC?C?E?C@E",
"b}l`Cfben]?I?KA]",
"h|l`Cx~dn]JTJb@",
"x{l`C~}dn]NX",
"pml`Chvbn]@\\F`AHnAHlAFp@R~BHv@DTBNBHDLFPLXFR^v@Rh@HXHVDZBP@R@NBVJrA@f@@f@JlAFtALtBTlDRlCd@hHRxBDTD`@F\\FPDLDLHRL\\JRP`@BF",
"lml`Cnubn]BX",
"dzm`Ct~~m]}@pAqAdB}@lAiE`F[b@_A`A_Ax@UPSPYXc@^UVWVa@b@Y\\a@`@WZ[\\SXOPQXYd@GHOVS\\S\\MT{@vAq@dAq@`AKRGLKPGPQ`@]bAw@xBKZMd@I\\E^Ir@WlCI|@M~@Mn@g@tBa@rBMh@Mr@Y|ACTMjACVAV?X@X@r@BfADx@FvBBZBZPfBD\\BZHx@LjAL|@ZxBLv@Jt@Dn@",
"tzm`C|}~m]OV",
"ppn`Cxz}m]e@b@a@f@_@`@k@l@g@n@y@`AIJKRKPGJEJM\\KXGNCNGXQh@M\\Sh@Sf@k@pA_ArBcAfC_AnB]f@QX",
"`qn`Cdz}m]OR",
"vco`Czb}m]QHOF[LUJWNi@\\UPWRSROTe@l@Y\\y@`AQTQ`@S`@Qf@IRUn@Yn@CDUf@Q^M^S^MRSX",
"lho`Cta}m]c@DSBMBy@NKB",
"~vp`Cfy|m]IB]Ja@Hc@Hg@Fc@F_@Fc@HI@q@Hc@HO@k@Hk@HYDUBeAN_@FYD[DeALsBTWDy@Na@Do@Hk@Ju@HM@OBM@O@_@@a@?[AQ?[AKAU@o@CWAa@Bk@F",
"twp`C~x|m]UF",
"dnq`Cdp|m]m@JcAVa@J]HaAPq@P}@Ry@Rq@PoAf@oAf@[J]N_@NED",
"z`t`Cj}{m]YDmE`@aAJq@DcAJcBP_CTcAJk@FsANqBRaAHm@Fm@He@F]F_@D{@R}@XQFc@Tq@Z{@d@q@Zs@X]Jk@LWDY@eABgA?gA?e@?W?W@W@]Dg@FsAPuBVkBVe@He@Hw@PcAT",
"rat`Cf}{m]WB",
"bkt`Cf}{m]MGOESE]Ea@A_@@_@BmALo@F",
"vkt`Cp}{m]SI",
"vvt`Cfe|m][Uc@YgCaBiCyAMI",
"rwt`Cve|m]GCGCECEC",
"vbx`Cpj}m]m@YeCiBa@Wm@]q@YeA]MCsBm@k@OUGaAU]GIAEAKAy@IYGYEc@IgAYm@OaBm@aBo@i@Sa@UaDuAm@Y{@[IC{B{@kAc@a@IYKaAa@[KKI]Ik@Ws@[OG_A_@eA[u@[SGUCu@GYAU?QAW?O?Q?[?c@Bg@FsAJe@AYAsAIa@AY?WAo@?_@BSAe@?O?O?k@Ei@Ge@Ie@IgAWYIs@Oo@QUIYI",
"nqk`Cbwin]\\dBV~A\\pCRzAXzAv@|CT|@Hr@Jp@Dt@Bt@@p@DfB?dA@j@Cn@CVETc@fDSrAGj@CPAR_@fS?l@@l@B\\D\\P`ATx@b@vAJ\\Pb@L`@L`@H\\BR?P?F?HALCRIb@Sv@GREVARCR?R@XBN@JBJHp@^nCPjATlAJZJNLPNLNLRJVHZBn@?`A?jA?`@@ZHZNTLRPNRh@x@h@~@h@x@h@z@`BnCPVfBhBdAdAfAhA~@nA~@tArBzCvAdCHLHJLLNJTL`@N\\JdBh@z@\\z@ZnBr@~Ad@h@NtBt@^RlBhAxA`AhGlERNVLh@Zd@TTJRFh@Hh@Hb@Dx@J~AVfCf@zDz@HBpAX`ANnAV`ARtAXr@LvARJ@fBFpAJj@Bn@BZAXAr@I",
"z`p`Cfron]JA",
"fap`Cdron]FArDu@bAUpCWlFi@bCQhCOvBKnCOrKk@lIc@tIc@`FWxDSzAKzAIjEUpE_@vCa@h@I|@OfBWjB[pBWrCe@fAUp@Sz@c@ZS^UfC}Bx@u@\\[^UTMXId@K`AO",
"jrt`Cjrnn]XE",
"dst`Cdrnn]`Fi@xAW|@YhAe@xCaAbDqA`Bo@nA]`Ae@xB{ArCiBrCcB~D{BpAq@f@[dBgAxA{@^]b@e@Xe@Pg@Ha@F[Fg@?m@YgDCkA?oAD}A@k@F_@FYJa@pAsCJa@JaABU?M?KCYE[Go@A[AO@M@[B_@X_B`AcEz@oETuALwAHoAHmCLu@Jo@Li@Pc@X{@H_@Dc@PwCPaCLu@Nw@Vm@|@aBXs@Pq@xAqEt@yB~@{D^sBV{APm@Pi@Na@Tc@HKFKJKJId@_@",
"`tw`Cxoin]XS",
"ztw`Cdoin]VOz@s@`@]LSLUh@yAd@_BPm@Rm@Na@\\iAFQDSJe@X}BLmBJ_Bt@_Jr@iHP{Ap@mELw@Dk@?m@CsC?O?O@M@MBODKFQP_@Xm@DQLi@J{@PkCHgDBcAJkDDkAJeAf@wDNqAB[?_@EYIa@Oe@Ws@_@y@Ww@Ia@CQCQAyA@k@@Y@KBSH[To@^eAPa@F[F[FYDY@[AcA",
"nmx`Cjeen]?O?S",
"nmx`Cfden]@cA@SBUDKBIFQHOHMJOf@y@Vo@Pw@RgATsBFgA@q@?]E]UgCK_B?[BU@MDSFUP_@R_@p@qAfA_CrBqEpAkCx@yAfDeJ`@eAVm@~AsD`@q@^w@Ja@Hs@Z{C\\gCN{A@Mh@kFH{@PkBb@yE^oEjB{T@YBc@?QAQ?SCUEUEUSq@Sq@{@_CEOAM?M?YHs@Hs@Ny@Jy@Jq@@Y?Y?UCUKk@Om@Ok@Qa@Oe@Ia@w@aJYsDEYCQCOOq@Ok@yA{E{@yCaA_DeAaDWc@Wg@}@iAe@s@a@s@i@mA_B}DKSMQMQOQk@c@sAu@yDeBo@UcBk@oF_BCAAA",
"fcx`Czj}m]OI",
"hul`Ctqfn]SSUi@QYQ_@M]ISs@oCYoAG]Ac@@g@@c@Fe@Hk@xAyF~AsGF_@FODSLe@FQNUNQ",
"pwl`Cvnen]kAbE}@pCSp@Qp@Kj@E`@",
"`pl`Cj~en]RJXF",
"dwl`Ctyfn]@N",
"rvl`Cn~fn]@MBKDQF_@",
"pul`Cd`gn]FMDIJS",
"pul`Cd`gn]KHMJ[Rc@Ti@Vy@`@QHq@^}Av@[R_@VsBzAw@l@YTUTMPMP_@l@OVQZSZQZO\\O\\O`@KXK\\Uv@i@lBg@rBENeAvEwAzGcAvEMv@Mx@MnAMtBCZAN"
]
我认为这个问题没有那么糟糕,因为添加大量注释是一个普遍的问题。对于Markers,解决方案是众所周知的:聚类。
关键点之一是只绘制高缩放级别中可见的内容。在低缩放级别(可见更多线)中,多义线简化了,从线中删除点可以降低复杂度。
仍然是一个问题,如果一条路由有2000行,经过简化,您仍然有2000行。
因此,另一点是使线条变得简洁。线条的方向不一定相同,因此您可能需要转弯一些线条以将它们附加到后续的线条上。这样,您可以减少(简化的)行数,并且性能要好得多。
感谢您的努力。