在对开本地图上绘制多条编码多段线

2024-04-20 11:49:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用OSRM匹配服务,并获得了以下JSON响应字典:

{"code":"Ok","matchings":[{"confidence":0.000041,"geometry":"k}s~Ha{a]??R_@Uc@Uc@Ua@IMc@{@d@cAd@q@V_@HKFIVYTSHGDCDEBABCRMNIPGVGrAUFA\\?LAFADCFGBGBG@I?IAIAGAGCE{@oA_@i@EICGCIAMAI?I?Q?C?UE_@Y?_@@[B]Fk@N_@Na@PC@QHYRSNEDGDEDa@\\SNCBMNs@x@[d@Yd@Wf@]t@w@zBi@|Ag@bBg@dB[fAc@dBENERIl@Kz@G`@Q|Ag@bF}@|JEd@i@xG_@lE?@AHANEf@C\\NBFBLBD@FBLBpA\\ZHRD|Ad@JBbAZF@VJNHJJJNLR`EpHT`@DFBFf@|@n@hAHN|@bBDHNZLXJZd@lBr@lD@DTdAFRHZJPDFFV\\hARn@BLBN?R?NC^Ib@Kl@I\\CHETOl@Sv@ERCHs@rCERA@Qp@St@I\\GTCHo@lCa@`BI\\Kh@EZMvACTGZIT[r@KR_@x@GLKPq@dA[n@EFeBxD_BhDw@dB[r@EHUd@KVCBQ\\OLYLs@DEV?@?\\@HVN`AZvBn@JBb@LRCv@a@VQdAm@RItBsEdA_C`A{BNQN`@L\\Tl@`@nADFHXBFr@vBDG`@e@X]","legs":[{"steps":[],"distance":65.9,"duration":12.4,"summary":"","weight":20.8},{"steps":[],"distance":121.4,"duration":17.5,"summary":"","weight":17.5},{"steps":[],"distance":222.7,"duration":42.4,"summary":"","weight":42.4},{"steps":[],"distance":862.5,"duration":139.8,"summary":"","weight":139.8},{"steps":[],"distance":25.7,"duration":3.7,"summary":"","weight":3.7},{"steps":[],"distance":107.7,"duration":15.5,"summary":"","weight":15.5},{"steps":[],"distance":131.5,"duration":19,"summary":"","weight":19},{"steps":[],"distance":54.3,"duration":7.8,"summary":"","weight":7.8},{"steps":[],"distance":38.9,"duration":5.6,"summary":"","weight":5.6},{"steps":[],"distance":355.5,"duration":64.4,"summary":"","weight":72.9}],"distance":9128.4,"duration":1351.4,"weight_name":"routability","weight":1373.3},{"confidence":0.980545,"geometry":"aes~Hij{\\_B{AqDgD]]GGSOECaA{@}@u@","legs":[{"steps":[],"distance":62,"duration":9.3,"summary":"","weight":9.3},{"steps":[],"distance":113.9,"duration":17.1,"summary":"","weight":17.1},{"steps":[],"distance":121.9,"duration":18.3,"summary":"","weight":18.3}],"distance":297.8,"duration":44.7,"weight_name":"routability","weight":44.7},{"confidence":0.977307,"geometry":"eys~Hqk{\\i@rBGVCLKd@IVAFI\\[rAOp@i@|B","legs":[{"steps":[],"distance":87.8,"duration":12.6,"summary":"","weight":20.5},{"steps":[],"distance":111.9,"duration":16.2,"summary":"","weight":16.2}],"distance":199.7,"duration":28.8,"weight_name":"routability","weight":36.7},{"confidence":0,"geometry":"y`t~Huez\\O?i@?GFEDA@A@A@CFCF?@ADAD?D?DAPAnAAH?ZCHAZ?\\?ZCd@Ax@?JFVA\\AFGrACt@Ch@UAaBKGC{CkCiD_D}EiElA{DCCCCMOEEk@nB{BeCiEwD_CuBd@uDGGKMKMw@}@}@qACEOYJU@Ad@gA^a@hB}DTe@PYNWNSDEHGDCFAFAFBBBBF@@BF@F^vCDVFZDNBDDHDHFFPPbAdAJLLPLRHTN\\Rp@LZNZl@hAp@lAHPLNp@z@HNJJJPbA`BLRJJHJt@p@HH","legs":[{"steps":[],"distance":2067.8,"duration":286.6,"summary":"","weight":286.6}],"distance":2067.8,"duration":286.6,"weight_name":"routability","weight":286.6},{"confidence":0,"geometry":"{tt~Hovz\\Q[m@eAgAqBUg@[u@OUMSUYGGYY_@_@CH?@C@CFbAdAJLLPLRHTFNFLRp@LZNZl@hAp@lAHPLNp@z@BDDHJJJPbA`BLRJJHJDDn@j@LLXZTR\\\\DBDBDBD@BBB@BDFHJJZTJDLHPFHDHDB@HBj@RFB@@FHDF?DAPAnAAH?ZB?B@B?F@pCVD???TBO_AWeAAQ?I?KBIBEBGBCFC??h@C`BC`@ALBB?PFVJ~@f@XRLJRTFHNN\\|CxBb@dAT^D^@b@AHCFCHIDIDMBK@I?A@C?CAG?CACCCIIKGKCICE?C?oACYGEA[KUMm@Yk@]a@[]Y_@]]Y_@Ug@U_@QOEOA_@?K?KAOAG?I?qBHG?I@A?G@C@OBS?i@?GFEDA@A@A@CFCF?@ADAD?D?DAPAnAAH?ZB?B@B?F@pCVD?TBrAPz@JxARhAPtAPxBb@dAT^D^@b@AHCFCHIDIDMBK@E","legs":[{"steps":[],"distance":123.1,"duration":11.1,"summary":"","weight":11.1},{"steps":[],"distance":66.3,"duration":5.9,"summary":"","weight":5.9},{"steps":[],"distance":137.1,"duration":21.4,"summary":"","weight":21.4},{"steps":[],"distance":181.3,"duration":16.3,"summary":"","weight":16.3},{"steps":[],"distance":100.7,"duration":9.1,"summary":"","weight":9.1},{"steps":[],"distance":169.8,"duration":15.3,"summary":"","weight":15.3},{"steps":[],"distance":11.9,"duration":1.1,"summary":"","weight":1.1},{"steps":[],"distance":193.2,"duration":27.1,"summary":"","weight":27.1},{"steps":[],"distance":95.2,"duration":17.5,"summary":"","weight":17.5},{"steps":[],"distance":105.3,"duration":15.1,"summary":"","weight":15.1},{"steps":[],"distance":476.4,"duration":70.3,"summary":"","weight":70.3},{"steps":[],"distance":1024,"duration":144.7,"summary":"","weight":144.7}],"distance":2684.3,"duration":354.9,"weight_name":"routability","weight":354.9},{"confidence":0,"geometry":"{|r~Hmvy\\c@~@iBtDID??{@AY?]AK?aACCA?PAdA?PvADzBHXCdB|G_@\\OFu@N{FW?R??AlA?P??~GVj@K|@w@FP`BbHy@l@KBwLg@DuDB}A~GVj@K|@w@FP`BbHy@l@KBwLg@a@AOAkBEoCIsDO_@CyDQ?LAjA??ALnADL@J?P@J@tCNpBDZBF@P@N@r@Dr@D~BBDP?Bt@`DDTh@|BXpA`@lBb@vB??FGRKDEFCpA}@LK@DNt@@D@F?B@B@Hd@[l@[NINICK?CAEAGGc@G_@U}@]wAs@{C_@eB?KAKzBJXE~@k@HEK_@Oi@EWy@l@KBwLg@ARAdA@NXBH@LA`CJhBFBPNj@XrAMLeAz@aAqEAQhBFBPLd@ZxAMLeAz@aAqEAQhBFF@J@F?FAxAH`@@XE~@k@HELK??NMJKd@_An@mA\\k@lAsBC[Sk@ECI?}B|D}@xAOPKHMHDVNh@J^LKNMJK`@y@r@sAJQPYlAsB??","legs":[{"steps":[],"distance":210.3,"duration":18.9,"summary":"","weight":18.9},{"steps":[],"distance":238.9,"duration":25.5,"summary":"","weight":25.5},{"steps":[],"distance":129.4,"duration":11.7,"summary":"","weight":11.7},{"steps":[],"distance":230.1,"duration":24.6,"summary":"","weight":24.6},{"steps":[],"distance":64.4,"duration":9.3,"summary":"","weight":9.3},{"steps":[],"distance":210,"duration":44.2,"summary":"","weight":44.2},{"steps":[],"distance":335.7,"duration":35.6,"summary":"","weight":35.6},{"steps":[],"distance":28.4,"duration":2.5,"summary":"","weight":2.5},{"steps":[],"distance":476.2,"duration":42.7,"summary":"","weight":42.7},{"steps":[],"distance":151.9,"duration":16.6,"summary":"","weight":16.6},{"steps":[],"distance":552.1,"duration":51.7,"summary":"","weight":51.7},{"steps":[],"distance":179.7,"duration":16.1,"summary":"","weight":16.1},{"steps":[],"distance":30.3,"duration":2.8,"summary":"","weight":2.8},{"steps":[],"distance":204.5,"duration":20.4,"summary":"","weight":20.4},{"steps":[],"distance":317.7,"duration":46.5,"summary":"","weight":46.5},{"steps":[],"distance":150.4,"duration":29.3,"summary":"","weight":29.3}],"distance":3510,"duration":398.4,"weight_name":"routability","weight":398.4}],"tracepoints":[{"alternatives_count":0,"waypoint_index":0,"matchings_index":0,"location":[4.929932,52.372217],"name":"Willem Theunisse Blokstraat","distance":10.791613,"hint":"j18CgNdfAgAlAAAAAAAAAAAAAAAAAAAALCd0QQAAAAAAAAAAAAAAACUAAAAAAAAAAAAAAAAAAAA4AQAAjDlLAPkiHwP3OEsAGiMfAwAArxNNyv33"},null,{"alternatives_count":0,"waypoint_index":1,"matchings_index":0,"location":[4.932506,52.3709],"name":"Frans de Wollantstraat","distance":11.915926,"hint":"wTIAAAQzAIAHAAAARwAAAAAAAAAAAAAA3_qaQE0JPUIAAAAAAAAAAAcAAABHAAAAAAAAAAAAAAA4AQAAmkNLANQdHwPtQksAxB0fAwAA_xVNyv33"},{"alternatives_count":0,"waypoint_index":2,"matchings_index":0,"location":[4.933336,52.370833],"name":"Frans de Wollantstraat","distance":0.232652,"hint":"TF0CgP___39AAAAAYwAAAA0AAAA7AAAATOctQolht0HOngdBBnIcQkAAAABjAAAADQAAADsAAAA4AQAA2EZLAJEdHwPVRksAkh0fAwMAbwJNyv33"},{"alternatives_count":0,"waypoint_index":3,"matchings_index":0,"location":[4.933951,52.371077],"name":"Frans de Wollantstraat","distance":2.671472,"hint":"TF0CgP___38GAAAABwAAAJkAAAALAAAAOLbKQJ4WdD-fdcVCM_z-QAYAAAAHAAAAmQAAAAsAAAA4AQAAP0lLAIUeHwM-SUsAnR4fAwsAnwVNyv33"},null,{"alternatives_count":0,"waypoint_index":4,"matchings_index":0,"location":[4.933923,52.372238],"name":"Panamalaan","distance":1.628426,"hint":"yTIAgP___38RAAAAFAAAAGEAAAAdAAAAw7KaQXaQOUDWONpCQb8nQREAAAAUAAAAYQAAAB0AAAA4AQAAI0lLAA4jHwMMSUsACiMfAwYAbxVNyv33"},{"alternatives_count":9,"waypoint_index":16,"matchings_index":18,"location":[4.93074,52.372528],"name":"Isaac Titsinghkade","distance":0.65222,"hint":"iV8CgK5fAgA5AAAACwAAAAAAAAARAAAA_Fe_QWP_k0AAAAAArd3lQDkAAAALAAAAAAAAABEAAAA4AQAAtDxLADAkHwOtPEsANCQfAwAADw5Nyv33"},null,null]}

其中包括以下关键点

dict_keys(['code', 'matchings', 'tracepoints'])

虽然我已使用'gaps': 'ingore'选项强制OSRM而不是分割轨迹,但匹配请求返回多个子轨迹(最类似于时间戳中的大跳跃>;60s)。因此,键'matchings'包含一个字典列表,其中有几个其他'geometry'键以编码多段线格式保存管线几何图形

例如,result['matchings'][0]['geometry']返回:

k}s~Ha{a]??R_@Uc@Uc@Ua@IMc@{@d@cAd@q@V_@HKFIVYTSHGDCDEBABCRMNIPGVGrAUFA\\?LAFADCFGBGBG@I?IAIAGAGCE{@oA_@i@EICGCIAMAI?I?Q?C?UE_@Y?_@@[B]Fk@N_@Na@PC@QHYRSNEDGDEDa@\\SNCBMNs@x@[d@Yd@Wf@]t@w@zBi@|Ag@bBg@dB[fAc@dBENERIl@Kz@G`@Q|Ag@bF}@|JEd@i@xG_@lE?@AHANEf@C\\NBFBLBD@FBLBpA\\ZHRD|Ad@JBbAZF@VJNHJJJNLR`EpHT`@DFBFf@|@n@hAHN|@bBDHNZLXJZd@lBr@lD@DTdAFRHZJPDFFV\\hARn@BLBN?R?NC^Ib@Kl@I\\CHETOl@Sv@ERCHs@rCERA@Qp@St@I\\GTCHo@lCa@`BI\\Kh@EZMvACTGZIT[r@KR_@x@GLKPq@dA[n@EFeBxD_BhDw@dB[r@EHUd@KVCBQ\\OLYLs@DEV?@?\\@HVN`AZvBn@JBb@LRCv@a@VQdAm@RItBsEdA_C`A{BNQN`@L\\Tl@`@nADFHXBFr@vBDG`@e@X]

result['matchings'][1]['geometry']返回:

aes~Hij{\\_B{AqDgD]]GGSOECaA{@}@u@

等等

现在我想像这样反复阅读这本词典

polylines = [d['geometry'] for d in res['matchings']]

并将这些解码的多段线一起显示在地图上。但是,以下方法不起作用。有什么建议吗

import folium
import polyline
# Create map
m = folium.Map()
folium.PolyLine(
    locations=polyline.decode(polylines)
).add_to(m)
m.save('route.html')

Tags: nameindexcountsummarystepsdistancedurationconfidence