from matplotlib import pyplot as plt
from matplotlib.path import Path
from matplotlib.patches import PathPatch
import matplotlib.gridspec as gridspec

import numpy
import geopandas as gpd
from shapely.wkt import loads
import cartagen as c4

roads = [
    loads('LINESTRING (348977.010727993 5794865.765203576, 349137.73864865093 5795333.957741553, 349157.96299709857 5795448.261327623, 349133.67285760184 5795566.835569444, 349002.17025162297 5795763.511166355)'), 
    loads('LINESTRING (348997.258169463 5794910.971900212, 348977.010727993 5794865.765203576)'), 
    loads('LINESTRING (348977.010727993 5794865.765203576, 348831.43312029325 5794572.166684109, 348728.1240671398 5794393.262965274, 348723.93454345496 5794386.332434327, 348720.90069615084 5794381.278888926, 348715.9891633849 5794373.337849646, 348658.0632802984 5794280.067459346, 348504.9943160744 5794061.360583228, 348311.1248828948 5793818.154276814, 347708.43092098646 5793196.822939778, 347664.9955032545 5793147.033903375, 347510.08629427344 5792920.53701316, 347446.3680512093 5792792.601091665, 347399.3564921457 5792662.328860105, 347392.9878000721 5792641.963444702, 347338.7287076157 5792385.554375891, 347318.27926777233 5792102.513610731, 347297.51095885504 5791703.023098574, 347249.42051532306 5791424.95846346, 347171.1605537985 5791193.759580119, 346959.7640704724 5790716.145219085, 346956.58529630245 5790708.926272544, 346891.84108142334 5790552.414516492, 346806.3923769772 5790317.200664453, 346801.330311766 5790302.039082812, 346763.28362479305 5790181.610465305, 346691.3245320187 5789909.837100143, 346675.3878514811 5789842.253135776)'), 
    loads('LINESTRING (348999.4419456345 5795769.008963087, 349002.17025162297 5795763.511166355)'), 
    loads('LINESTRING (349002.17025162297 5795763.511166355, 349035.52530235954 5795720.520937402, 349076.6847509402 5795691.539090113, 349229.60374013043 5795632.729562814, 349298.29278900265 5795609.625606604, 349368.9923563934 5795582.903819156, 349408.55348505045 5795547.274273864, 349420.99456012895 5795493.479130089, 349396.2603346001 5795438.738023145)'), 
    loads('LINESTRING (302275.74300432304 5843800.826157801, 302297.0956477681 5843623.880009466)'), 
    loads('LINESTRING (302183.83669574826 5844338.706659585, 302234.2887918637 5844088.164927759, 302275.74300432304 5843800.826157801)'), 
    loads('LINESTRING (301924.03667738964 5844145.02915909, 302068.80852228537 5844175.498683534, 302134.6498932503 5844157.569719994, 302178.3741123332 5844125.752213408, 302217.44622060575 5844058.0174601935, 302275.74300432304 5843800.826157801)'), 
    loads('LINESTRING (302297.0956477681 5843623.880009466, 302290.9961332698 5843870.063790921, 302298.6221716832 5843925.030771509, 302329.9169750491 5844005.518746391, 302408.4479551076 5844125.2755700145, 302419.11484229565 5844180.981707005, 302401.8670382883 5844223.361036401, 302369.46840504947 5844248.389481367, 302330.7578470955 5844255.807940315, 302248.8037915783 5844241.849004784)'), 
    loads('LINESTRING (302297.0956477681 5843623.880009466, 302332.3387356213 5843370.686938796, 302375.5892479409 5843186.706986379, 302447.72768624616 5842985.395268927, 302538.32540527306 5842806.388370891, 302668.5206121111 5842611.830941533, 302874.42720276286 5842387.8999397345, 303016.78990979795 5842272.005173957, 303644.21246216464 5841829.688706443, 303904.9812023222 5841602.60100189, 304094.96661682427 5841402.00584711, 304308.33096087776 5841137.7046337975, 304462.61614147795 5840909.676008887, 304975.0190823187 5840028.772822475, 304976.9121512398 5840025.582949337, 305453.8512546203 5839198.806254923, 305545.5740807971 5839044.107472743, 305744.1234855963 5838762.7985714525, 305957.7153008451 5838528.0234582, 306196.71055035904 5838314.681748979, 306582.76967054297 5838015.668196291, 306598.1501180009 5838004.822805008, 306612.6605002994 5837994.410421185, 306801.28385329637 5837861.807952868, 306857.5747989041 5837823.783331109, 307226.2947480677 5837594.7093420625, 307481.7438157213 5837475.808907642, 307645.2096349348 5837421.256701076, 307806.8888243702 5837382.672337309, 308111.86851082224 5837351.044621959, 308326.9743813945 5837358.793031837, 308517.9944824938 5837385.346853434, 309849.044922087 5837692.367285225, 310302.995099528 5837771.0180968745, 310607.83964282164 5837792.024430783, 310864.53551563737 5837789.799929372, 311127.2159672579 5837768.702076846, 311349.67921721813 5837735.147223565, 311358.2250558424 5837733.57161934, 311416.7439784499 5837722.103092523, 311438.9068104622 5837717.367136781, 311645.3354633931 5837668.804024494, 311888.8918205009 5837593.170239174, 312662.59342338966 5837281.084382784, 312886.31500862073 5837197.971149298, 313414.98105793574 5837022.045128256, 313466.84324792895 5837006.336594496, 314210.23446715256 5836800.36855928, 314845.02872324403 5836658.439770586, 315495.23604065046 5836542.930048935, 316215.1501389132 5836451.185856699, 316220.0726658266 5836450.76016416, 316607.2100287157 5836419.006182709, 316900.5050718529 5836407.38367415, 317785.0971596439 5836408.044638012, 318245.64614708995 5836359.943950449, 318304.289671311 5836349.59320956, 318488.4853308438 5836309.985467958, 318494.5674690132 5836308.544029912, 318908.48875494144 5836180.603063063, 319322.34679587797 5835996.301747442, 319742.0688314937 5835755.217609346, 320212.98600671504 5835433.902747047, 320219.941341133 5835428.831549213, 320501.9365127962 5835209.434556331, 320808.01329957374 5834942.881597606, 321434.1448048822 5834311.0615612, 321479.797380991 5834264.522537371, 321579.36015616974 5834164.197063976, 321592.9824913646 5834150.7143579405, 321821.1898499242 5833948.797149577, 321971.683952383 5833848.396024216, 322109.69404663076 5833774.39855366, 322275.3332509708 5833706.533752133, 322423.4305606858 5833661.290385412, 322592.061798129 5833626.233545952, 322765.88145491167 5833606.713742084, 322808.8631950946 5833604.010253119, 322846.3450965707 5833602.02544606, 322912.48258345766 5833597.3183646565, 322924.2051843792 5833596.31692454, 322944.17666763585 5833594.890323317, 322975.0019457626 5833592.896597667, 323174.4313512554 5833574.997728333, 323366.3567992356 5833539.083940774, 323518.49540590646 5833495.56986921, 323711.6215884177 5833419.87358991, 323872.0510644956 5833335.716337663, 324010.0535634155 5833247.1764963735, 324529.2625969851 5832824.888575509, 324796.8347424952 5832656.207448125, 325000.51304268785 5832561.77583576, 325207.92700775294 5832489.407733492, 325407.5007457298 5832441.413509209, 325608.6454627561 5832412.867052871, 325623.260224274 5832411.574586233, 325792.98760605144 5832403.170350115, 325967.1868410913 5832409.282251182, 326289.65674422553 5832456.01966372, 326538.6053817842 5832529.101750302, 326883.1387863395 5832677.59168084, 327024.1611369248 5832745.203086691, 327638.63591145823 5833003.473917343, 328087.68122647784 5833150.402328372, 328465.28737409605 5833250.521684363)'), 
    loads('LINESTRING (302248.8037915783 5844241.849004784, 302338.5950234018 5844252.057172727, 302388.8084569639 5844228.691862552, 302412.7525688289 5844177.470475339, 302410.83343533403 5844146.940755914, 302387.6466640289 5844108.049819716, 302362.78935602005 5844090.664082502, 302319.2046920635 5844083.820914593, 302264.47294753237 5844114.872431358, 302183.83669574826 5844338.706659585)'), 
    loads('LINESTRING (302248.8037915783 5844241.849004784, 302169.9008900795 5844225.574829386, 301994.35358262376 5844171.4483634485, 301924.03667738964 5844145.02915909)'), 
    loads('LINESTRING (349341.9610287881 5795863.243279518, 349150.0661286524 5795297.076569688, 348997.258169463 5794910.971900212)'), 
    loads('LINESTRING (349463.9985910002 5796269.098583629, 349341.9610287881 5795863.243279518)'), 
    loads('LINESTRING (349396.2603346001 5795438.738023145, 349344.21061584 5795418.303463521, 349306.468796679 5795422.850707291, 349267.32826923055 5795451.684682343, 349251.40749500575 5795493.487672856, 349255.96360931284 5795545.084633866, 349341.9610287881 5795863.243279518)'), 
    loads('LINESTRING (348997.258169463 5794910.971900212, 349173.16059597506 5795237.627483788, 349238.8543011938 5795316.869813279, 349376.47701080894 5795413.621146455, 349396.2603346001 5795438.738023145)'), 
    loads('LINESTRING (349463.9985910002 5796269.098583629, 349305.9088968622 5795846.24877318, 349257.0667090035 5795765.671803691, 349198.63679547864 5795722.840724729, 349129.73686172324 5795707.782048435, 349056.9980458475 5795722.652283867, 348999.4419456345 5795769.008963087)'), 
    loads('LINESTRING (356314.1895290537 5798642.957870568, 356311.4524309239 5798643.543264817, 356290.5616486104 5798647.067002994, 356288.11208541243 5798647.36245176, 355694.22652619984 5798745.88487539, 353579.2008309559 5799091.426313749, 353241.817520249 5799116.903677207, 352894.8228528611 5799097.704296853, 352640.8962473302 5799055.011139992, 352397.4436068755 5798987.994590162, 352031.009561746 5798834.317892148, 351733.1514364164 5798657.931642786, 351448.8985833711 5798431.480223753, 351130.2911044482 5798096.791503818, 350962.0319218748 5797914.499789306, 350798.1438905815 5797753.45461421, 350641.0859923856 5797619.144642468, 350636.46736630745 5797615.538790411, 350630.8382756623 5797611.067346028, 350624.7762895262 5797606.307552517, 350346.8466655406 5797414.245866136, 349689.171282588 5797048.508593778, 349685.4198039317 5797045.912951734, 349508.9227446167 5796903.532163181, 349507.47963755124 5796902.378131324, 349450.1671567766 5796844.361049887, 349446.5574019347 5796840.319383815, 349431.1076480126 5796822.997925428, 349427.6425232529 5796819.245151425, 349276.27150246757 5796618.846375283, 349155.092636711 5796374.5937486775, 349115.7110869456 5796265.949368187, 349104.4117326009 5796231.129115628, 349103.976714114 5796229.539672878, 349089.05026912317 5796180.26956659, 349076.5906919159 5796140.97020429, 349073.4035201058 5796131.00095131, 349057.3273884793 5796083.323490078, 349056.6027140511 5796080.867206253, 349034.87972172286 5796017.153562899, 349032.2739523667 5796010.074624639, 348990.5708766344 5795890.162641583, 348989.2647017015 5795884.671694799, 348984.5525822889 5795825.266833369, 348999.4419456345 5795769.008963087)'), 
    loads('LINESTRING (299970.3352052691 5851130.7155216085, 300037.62152809533 5851015.62642091, 300056.74086520396 5850983.1176300645, 300196.44032216386 5850737.689942223, 300216.00790545746 5850701.401749386, 300258.37175998295 5850618.510956305, 300261.5875840522 5850611.687053859, 300368.190689413 5850373.702922774, 300485.74302255304 5850037.881994632, 300490.1480812849 5850023.209081982, 300491.91208778095 5850016.816336789, 300496.02551743266 5850002.578669716, 300532.3556474276 5849865.2752332445, 300532.9460180618 5849862.514120967, 300604.8297970669 5849485.66959267, 300652.3572696175 5849031.089815293, 300661.10377758957 5848941.39531167, 300671.61155378714 5848845.891454054, 300737.4067703009 5848388.505068371, 300861.2969560731 5847820.851615744, 301011.76290123403 5847312.364300782, 301219.88522417244 5846727.64437778, 301234.5204492161 5846689.171099488, 301365.3095711052 5846357.162065508, 301605.7255739387 5845805.179787808, 301607.77080993133 5845800.680756772, 301609.67007004516 5845796.471935662, 301918.4310420173 5845129.640206214, 301928.2204043397 5845107.2901875945, 302061.0168128446 5844767.4881989695, 302062.3339699816 5844763.859078487, 302069.5087608982 5844743.099226309, 302070.3870362268 5844740.631366878, 302074.6350924557 5844727.855489204)'), 
    loads('LINESTRING (331175.1941591152 5833033.472760414, 331410.0840760918 5832881.123707581, 331597.3599637753 5832735.145257309, 331770.8872510806 5832575.952564799, 331899.26020491647 5832439.247626407, 331917.2064641306 5832418.349685426, 331921.5482601377 5832413.415475468, 331943.6917620626 5832386.422085268, 331965.25618129753 5832360.299505267, 332074.67075361323 5832216.333469923, 332442.5569767318 5831655.707034645, 332457.4622141033 5831634.519024429, 332652.66993489786 5831362.850946411, 332860.7373571354 5831120.214879618, 333137.51151250594 5830843.917493067, 333422.65622365125 5830605.062376203, 333622.5801319096 5830461.691042206, 333901.1895664823 5830286.827512298, 334657.9862333243 5829898.470575885, 334941.33214097697 5829737.370102916, 335241.7291910557 5829533.309310609, 335549.77152049134 5829292.530524215, 335560.18390075385 5829284.257790259, 335623.09146186535 5829233.460394152, 335864.59140661283 5829036.075337898, 335867.33893202356 5829033.7531676665, 336005.87108021625 5828920.545989078, 336080.9198770987 5828859.152571817, 336097.25974059314 5828845.364547816, 336573.84587443597 5828460.596323645, 336797.52590518346 5828296.867965531, 337649.5439568345 5827739.87219816, 337872.75474091 5827582.513147357, 338119.07394690905 5827381.328632405, 338358.5730691987 5827155.048455652, 338615.6689673318 5826868.266743208, 338879.2154801643 5826510.985133661, 339142.4077237893 5826079.299233074, 339546.6473317829 5825364.998488214, 339566.7208168374 5825330.176540001, 340079.04013311764 5824432.240538413, 340422.25559309305 5823889.334366502, 340732.1135212179 5823442.032804139, 341084.4156580865 5822973.248472946, 341500.40609983733 5822492.530814632, 341502.7164025942 5822490.0639724685, 341779.52624657226 5822212.602133621, 342269.4626652261 5821762.5583730675, 342621.3066685145 5821420.2175820945, 342956.78096179053 5821064.555593403, 343278.0542140539 5820696.298391903, 343611.5234340664 5820274.252696424, 343973.61643385387 5819767.387321776, 344253.1136834257 5819332.813054409, 344557.1708445418 5818801.406905763, 344578.35957743705 5818761.815133318, 344778.0642705802 5818335.195499592, 344890.7925584999 5818026.95346796, 344932.3707091455 5817891.403717359, 344994.9029692706 5817648.738605164, 345043.7030280639 5817400.735453055, 345078.628796342 5817148.409448937, 345099.348244949 5816856.6958249975, 345102.59710507607 5816684.552864999, 345080.3641928785 5816233.964132819, 345079.04867138853 5816221.50533652, 345027.19037035067 5815868.048788647, 344831.413958124 5814857.356060025, 344794.1485382784 5814614.174258265, 344773.837158809 5814300.576941815, 344787.1790217253 5813994.916026879, 344793.74818242324 5813935.808205349, 344794.6063076322 5813929.143967294, 344796.3223761369 5813915.670654768, 344803.33472285845 5813864.819283849, 344856.99235875654 5813587.947590274, 344941.53030347585 5813300.906644694, 345056.3936511647 5813024.264048222, 345192.790037078 5812770.919013866, 345582.7727725186 5812150.547895561, 345858.52100097283 5811635.9275386855, 346144.6001319297 5810995.62336753, 346149.20411331416 5810984.901490007, 346152.6575925919 5810977.2220967645, 346284.2015375547 5810705.101271035, 346291.11127585714 5810692.059643959, 346506.802531136 5810327.30222787, 346806.4168409639 5809925.656000971, 346982.6280669092 5809727.764690362, 347603.5182484132 5809100.075787576, 347631.1792618825 5809070.499046063, 347956.4200874942 5808690.979401909, 348156.84152263805 5808415.17106127, 348326.91733222984 5808119.729540404, 348411.5948914633 5807930.82925451, 348460.8527942824 5807789.324487568, 348462.4315944523 5807784.255572014, 348500.25756810117 5807623.375470314, 348517.333162653 5807479.033706047, 348519.0078772297 5807444.7260751715, 348519.42016053747 5807432.277250132, 348520.0918406727 5807402.169077009, 348505.27026436134 5807163.5120387, 348500.0250647301 5807132.40141467, 348470.9432511447 5806994.51270278, 348398.42790734186 5806762.909086592, 348234.3560231152 5806382.533612443, 348228.1328596139 5806370.241828738, 348221.4748225415 5806356.648212041, 348021.8431894059 5806011.511513105, 347880.5900366915 5805812.022255479, 347691.83029336185 5805577.299168661, 347375.3319484898 5805187.500578382, 347180.0399493271 5804907.210988281, 346974.40640555194 5804550.105955202, 346848.38494664064 5804279.709861468, 346751.1083268352 5804034.599042321, 346739.23566191015 5804002.63987796, 346619.2405627338 5803599.862302661, 346553.73879805655 5803277.753124796, 346507.6361017249 5802903.979396805, 346495.2812792806 5802531.18560834, 346495.27120177855 5802524.09700369, 346524.3115462216 5802057.665641573, 346546.9921956821 5801885.491690786, 346609.9824186445 5801569.913512001, 346669.77963981015 5801342.873876122, 346751.4559642243 5801093.388127972, 346948.5822784167 5800629.9654412465, 346961.6620890324 5800603.188645597, 347002.1981104154 5800522.567429246, 347071.0622170103 5800393.742175932, 347075.0882647831 5800386.649236843, 347135.33771601605 5800282.71451477, 347148.85433767096 5800259.553546671, 347219.59897949244 5800137.814814478, 347224.7752391846 5800128.84012356, 347315.2382360241 5799987.83747461, 347335.3724249224 5799956.2787112165, 347491.5750698672 5799726.957677158, 347507.25397062884 5799704.951221263, 347523.0769453928 5799682.944568701, 347997.6318308749 5799051.968222667, 348226.5348651007 5798787.835386702, 348529.90286422684 5798500.444833686, 349005.33994657773 5798128.1713022385, 349077.5899606302 5798068.763555074, 349218.88906968536 5797934.192613159, 349331.77984701627 5797792.731060715, 349430.94043615117 5797631.197084465, 349516.6290462677 5797432.531006941, 349560.4654025869 5797283.823232001, 349590.249542185 5797094.516508853, 349596.42529444274 5796920.147039725, 349579.38543006894 5796737.58183702, 349502.4208610496 5796403.331289488, 349501.55066376796 5796400.1523821, 349463.9985910002 5796269.098583629)'), 
    loads('LINESTRING (301916.22424205864 5844141.948317477, 301796.89062229026 5844088.750513509, 301623.36498384073 5843998.288758093, 301496.1717191035 5843916.57147333, 301277.73762081674 5843748.762225301, 300997.9657337188 5843482.036686975, 300873.1059528298 5843361.083657085, 300860.83697265247 5843349.119966027, 300848.71180118836 5843337.447483819, 300622.53133310744 5843118.156604571, 300505.9091699495 5843005.082301493, 300343.1244411463 5842842.129527885, 300203.58609096945 5842662.699528336, 300189.17620999506 5842642.880193236, 300180.38512338116 5842631.075235393, 300049.9673768409 5842454.733883119, 299953.9160715448 5842345.373135352, 299857.2158249478 5842254.610528894, 299672.0777310602 5842110.317333691, 299638.4280217019 5842084.610492975, 299081.6969408766 5841665.08338055, 298579.31598412065 5841357.78652997, 298259.1267491047 5841060.659833931, 298252.48872604844 5841054.675643777, 298248.016086641 5841050.443830318, 298140.1746295246 5840964.860581132, 298028.34563066845 5840898.729785498, 297631.38942135696 5840718.093132069, 297419.95842110505 5840644.5689674085, 297129.22056255135 5840558.357808067, 297121.1209104548 5840555.853862323, 297116.9259618121 5840554.673920686, 296970.11321703467 5840511.050241381)'), 
    loads('LINESTRING (302074.6350924557 5844727.855489204, 302136.5144690787 5844524.148322749, 302183.83669574826 5844338.706659585)'), 
    loads('LINESTRING (302074.6350924557 5844727.855489204, 302139.7232068261 5844437.9662686745, 302138.6241875211 5844341.013526354, 302114.7871744216 5844281.769813929, 302062.70596973883 5844220.38879231, 301916.22424205864 5844141.948317477)'), 
    loads('LINESTRING (301924.03667738964 5844145.02915909, 301916.22424205864 5844141.948317477)'), 
    loads('LINESTRING (373984.64128694934 5861115.95802327, 373888.26177131524 5861149.746003512, 373821.2235442374 5861187.7684001615, 373762.683585466 5861243.372725724, 373712.23970171105 5861323.988360409, 373685.3177627128 5861438.138391303, 373685.820766756 5861839.794037859, 373671.2724349421 5861897.386814304)'), 
    loads('LINESTRING (373671.2724349421 5861897.386814304, 373646.4843444742 5861615.257160939, 373634.41225875536 5861577.884135455, 373605.4539128372 5861530.102167186, 373514.1000115623 5861455.806166911, 373491.0702664465 5861402.609409385, 373494.8519111265 5861371.864496463, 373524.1363749225 5861330.810550605, 373626.23270901514 5861276.320848833, 373686.7677739415 5861244.445404413, 373876.1977340811 5861146.30595535, 373984.64128694934 5861115.95802327)'), 
    loads('LINESTRING (373671.2724349421 5861897.386814304, 373656.1680670121 5861283.321038838, 373616.1944230587 5861013.220735705, 373578.6002532062 5860852.18706707, 373446.76354900707 5860358.413206009)'), 
    loads('LINESTRING (373671.2724349421 5861897.386814304, 373680.57005706755 5862221.103861484, 373663.66907700076 5862562.429321634, 373606.03637636284 5862918.954702165, 373605.1809627837 5862922.454287884, 373601.480055986 5862938.930043399, 373600.6246386611 5862942.42963655, 373540.0465898786 5863161.480234381, 373475.9471668438 5863340.640299634, 373243.0096775147 5863853.266324917, 373240.99629192305 5863857.645454981, 373237.5451398904 5863865.235777538, 373235.53174885205 5863869.614912254, 372977.8585556114 5864443.1234080335, 372956.14945882367 5864525.383808586, 372935.9774308407 5864659.7925433135, 372934.47755001084 5864780.425799571, 372947.9386187383 5864901.722570816, 372989.29371662583 5865058.153640225, 373049.4341047693 5865192.941040192, 373123.1488276123 5865309.894735667, 373202.42701810156 5865403.80452216, 373373.13459537737 5865547.132327828, 373889.60449485993 5865871.308828152, 374019.486832304 5865943.567879482, 374184.50193591625 5866011.87603583, 374860.3890019736 5866247.124544001, 375127.75086110784 5866363.752163702, 375359.9267309951 5866502.25083664, 375561.40292857424 5866659.105892037, 375757.97997676546 5866853.432331356, 375904.0273156314 5867019.730533793, 375992.09927539027 5867120.586024343, 376002.9073800692 5867132.920710909, 376014.7378795153 5867146.41628891, 376162.2600727196 5867315.331732585, 376180.66408015264 5867336.373527394, 376333.01504355494 5867511.241415371, 376354.33986361464 5867535.329533393, 376454.5543354868 5867651.720907258, 376474.27557210805 5867674.505297565, 376595.2241968336 5867812.073603424, 376604.8654980679 5867823.102574718, 376721.29571009456 5867956.7585351765, 376793.4624458995 5868039.331178049)'), 
    loads('LINESTRING (373446.76354900707 5860358.413206009, 373392.3998155896 5860211.15356551, 373381.6754245784 5860182.371028886, 373338.1674334421 5860060.40086018)'), 
    loads('LINESTRING (373338.1674334421 5860060.40086018, 373260.0618753824 5859860.979840725, 373109.64942178264 5859687.075065798, 373093.9280380759 5859643.901700724, 373091.73824910214 5859575.6248807935, 373106.04022315604 5859527.949964271, 373138.9079165108 5859477.717109733, 373184.75795014674 5859442.277255648, 373227.06493376364 5859426.072020153, 373272.17597948806 5859420.337030122, 373337.83167045325 5859432.709174906, 373415.4457812104 5859490.308018233, 373463.3135511723 5859581.528653574, 373526.2004626616 5859688.115930074, 373611.22916126705 5859747.71966432, 373626.5084131919 5859756.532275205, 373960.39606328827 5859931.341145883, 374023.15876799356 5859976.7747143665)'), 
    loads('LINESTRING (373338.1674334421 5860060.40086018, 373225.3422790275 5859691.071007161, 373184.79329858226 5859613.356027572, 373118.8332285711 5859532.697568549, 373102.5208474502 5859519.812142624, 373021.8568893059 5859461.350353527, 372997.69931249635 5859446.607038856, 372690.85765649006 5859241.950386098, 372661.5968440589 5859221.550902832, 372601.1864233784 5859180.177742507, 372475.4592210045 5859070.226669767)'), 
    loads('LINESTRING (373984.64128694934 5861115.95802327, 373987.976631056 5861115.214660301, 374045.7007859548 5861104.174498139, 374047.2962050589 5861103.875948746, 374127.06370580307 5861088.220012706)'), 
    loads('LINESTRING (373510.2443123575 5860046.084275656, 373470.4884447949 5860146.296639902, 373459.4644276873 5860180.273367302, 373446.76354900707 5860358.413206009)'), 
    loads('LINESTRING (374023.15876799356 5859976.7747143665, 373904.1196593114 5859939.897420946, 373766.67706740636 5859877.184595655, 373689.57123665186 5859869.235095633, 373629.4194642281 5859887.417045261, 373575.1652289455 5859926.102328164, 373510.2443123575 5860046.084275656)'), 
    loads('LINESTRING (374023.15876799356 5859976.7747143665, 374056.60914363613 5859991.619181261, 374242.64913874294 5860079.586390667, 374369.3223514722 5860134.625598001, 374438.6996930705 5860165.756980246, 374616.13330054854 5860242.8369508125, 374960.28343679634 5860368.934963267, 375237.7855172387 5860456.893231435, 375277.03612525016 5860469.667926275, 375495.35488561523 5860533.725702301, 375726.08936746087 5860582.866435351, 375757.32555464923 5860588.8333790125, 376021.9740096064 5860626.446629244, 376303.50880021194 5860643.438354283, 376578.11982710956 5860639.194559013, 377170.3982574683 5860590.132961002, 377522.32665598963 5860576.304086262, 377765.0882130413 5860589.509794344, 377968.57809942897 5860615.574839922, 378300.477266584 5860688.749093037, 381395.88526689843 5861547.602296757, 381600.7604975678 5861608.967442525, 382272.7690930282 5861823.595648703, 382314.5110400694 5861837.637868468, 383331.5235370813 5862212.525701503, 384310.0925943508 5862628.460622679, 385499.64586959605 5863180.424123393, 386281.78872757504 5863542.131034092, 386326.2011382196 5863563.278648959, 387571.35180620215 5864142.075104796, 387593.6323166169 5864152.4274296975, 387734.4627857665 5864219.595292056, 387750.1915183289 5864227.07397005, 388054.01989444706 5864375.689551729, 388406.7667923195 5864566.3869862035, 388708.2229164987 5864750.256429891, 389002.81925790047 5864949.896936581, 389365.11697643617 5865220.639709284, 389652.1544745573 5865437.363549972, 389897.211315323 5865582.084016231, 390117.39868665434 5865674.652483391, 390400.7104816485 5865757.922129747, 390414.67436296237 5865761.183334383, 390806.8888727888 5865839.221491325, 391589.000178207 5865970.7838459145, 391898.7062465969 5866022.215782735, 391999.4720795208 5866039.179482579, 392080.31951904896 5866053.068633359)'), 
    loads('LINESTRING (372671.2494445026 5859205.347338298, 372700.6527945309 5859225.163745324, 373020.58748508146 5859436.895584661, 373046.05641862896 5859452.797752958, 373114.6137045558 5859497.62709666, 373139.0573528875 5859511.349704269, 373367.4883208217 5859638.598749214, 373417.82926210994 5859666.182004954, 373609.58376800944 5859769.130737411, 373632.85932906705 5859780.964837227, 373816.74385429575 5859875.6465419615, 373901.2604446989 5859917.487174646, 374023.15876799356 5859976.7747143665)'), 
    loads('LINESTRING (372671.2494445026 5859205.347338298, 372706.2865428944 5859219.16947766, 373020.8790530879 5859404.426082573, 373047.63793590415 5859416.682504644, 373149.7069207377 5859425.690385881, 373340.3838158845 5859354.220976982, 373459.8731772045 5859364.311635881, 373526.9224281915 5859396.18597293, 373612.66829949676 5859486.796896513, 373640.11458692304 5859554.81297543, 373649.45819880697 5859631.501957974, 373635.2815020524 5859706.405305086, 373510.2443123575 5860046.084275656)'), 
    loads('LINESTRING (372671.2494445026 5859205.347338298, 372603.2727249033 5859159.494310441, 372475.4592210045 5859070.226669767)'), 
    loads('LINESTRING (330979.59622111387 5833787.710798449, 331125.2996293213 5833851.781962833, 331282.8629075789 5833944.600101751, 331445.4831124096 5834077.487617307, 331568.8907192782 5834206.44355921, 331728.4656686932 5834399.726076368, 332023.02878655144 5834805.019446488, 332124.88837701286 5834943.12061034, 332183.9227763032 5835019.795992704, 332412.1152634967 5835297.313385138, 333631.89518504235 5836735.772961555, 333924.01846079074 5837038.576615413, 334063.57308174943 5837187.291959733, 334770.4009988056 5838016.711366997, 334921.7101059207 5838140.881527256, 335090.9717157318 5838225.831303935, 335635.24402674026 5838382.468664987, 335657.3975533097 5838388.710199386, 335880.81846018066 5838458.820665131, 336034.1630403256 5838520.082407228, 336199.53862815385 5838625.932036909, 336283.82323886774 5838688.805773621, 336442.70574443147 5838853.04841851, 336710.3839258632 5839168.912083082, 336801.9406672509 5839303.9794274205, 336888.1553599566 5839477.836421589, 337002.07801898115 5839786.063951594, 337149.7416785174 5840470.278971042, 337682.33707300987 5843083.410308596, 337754.3104764689 5843364.593798703, 337883.5210768179 5843663.3459900245, 337969.2076058354 5843809.518038545, 338053.2890101165 5843924.879870592, 338271.30069010874 5844161.976433469, 338487.115732258 5844330.760962751, 338532.48021476046 5844361.115298941, 338653.9321333621 5844433.58053017, 338806.1019290225 5844505.737026762, 339097.23585412273 5844601.648930077, 339380.3765901159 5844647.846025347, 339804.32520087477 5844651.352628425, 340073.3878655656 5844655.674952433, 340427.96545582084 5844700.625497143, 340839.1056018153 5844811.509273554, 340850.84503340843 5844815.570028598, 341162.90472096275 5844946.431549741, 341337.0004862069 5845039.316708105, 341958.5347349614 5845442.591069128, 342150.6244525471 5845543.734820632, 342428.37876119796 5845666.59867326, 344486.0474609274 5846517.297598191, 344857.25904161046 5846692.033720195, 345064.80179423717 5846817.388643943, 345225.96008291707 5846932.041240488, 346075.90746601444 5847634.337842698, 347594.64209073683 5848897.054887812, 347634.9932429554 5848930.875740742, 348472.12157086615 5849626.283157241, 348821.38693403464 5849901.738511581, 348845.62877661554 5849920.022817207, 349479.86908712 5850396.851985117, 349659.35109064326 5850555.072098322, 349960.5853498521 5850848.1970389495, 349985.27638316486 5850871.5702861715, 350181.75987916125 5851039.793725794, 350375.27619155566 5851167.874247986, 350600.0796116068 5851275.673665752, 350838.89196765516 5851351.294093529, 351096.4900675351 5851391.669462244, 351394.3198610341 5851391.081861481, 352629.87759923487 5851258.200829916, 352648.1429885049 5851256.125415385, 353740.1504094918 5851138.08627753, 353781.1750218444 5851133.920670392, 354999.5615448433 5851004.966302413, 355227.7727389526 5851000.924305083, 355478.2305223174 5851022.567891512, 355509.7058820749 5851027.290665861, 355692.6322698026 5851063.058113194, 355901.57540277636 5851123.33952586, 356079.65761390614 5851191.84017572, 356280.72805921495 5851290.244540121, 358381.33482784254 5852444.202747604, 358414.1590877293 5852462.296466291, 358686.631587762 5852611.379799866, 359277.50550349767 5852935.00226596, 359318.61325803393 5852957.725361862, 359843.16360705084 5853250.523598066, 360167.57394771866 5853486.1377707925, 360209.44422214833 5853519.768306723, 360431.86553497484 5853691.809000575, 360680.6280211668 5853842.377843615, 360961.2303300921 5853967.3803536035, 361252.74548043124 5854054.072838914, 361296.72291263565 5854063.393797773, 361501.4827884451 5854095.928587216, 361743.6092546603 5854110.442613617, 362947.2346460339 5854077.441279944, 363004.08740904403 5854075.94341903, 363526.9248603768 5854060.953328654, 363725.9354988305 5854063.62618605, 363925.583791303 5854083.171393703, 364135.59980402264 5854122.7567337705, 364330.8777522475 5854178.248983057, 364372.55489152577 5854192.364482356, 364612.51986266917 5854292.222433106, 364858.1311189546 5854428.870240595, 366557.4384773733 5855575.993369921, 366599.4697929727 5855604.652635674, 366601.50560023956 5855605.954860225, 367364.940911871 5856123.377842097, 367525.8641693676 5856245.747380307, 367823.4898828753 5856526.963649521, 367840.38053421647 5856542.763260546, 367949.992213977 5856636.655460395, 368116.82403069315 5856744.1519394545, 368399.1955726808 5856862.692011892, 368681.6459439421 5856925.621684211, 369082.20522065775 5856951.82639958, 369354.4843237255 5856973.000880048, 369510.0080222835 5857004.976036776, 369692.4833703864 5857063.6213867, 369747.2581840552 5857081.883766688, 369839.9853835986 5857120.3687925115, 370085.4441569553 5857251.529055152, 370233.4228687838 5857352.229072002, 370330.8037599438 5857427.227424969, 370719.883699199 5857721.249939545, 371297.96335624927 5858161.78387865, 371449.6614999288 5858277.161364894, 371469.9014436473 5858293.379539263, 371956.0926917325 5858676.785405802, 372008.80342727806 5858717.757321856, 372272.17568322807 5858912.5701664025, 372288.62705350725 5858924.582103341, 372475.4592210045 5859070.226669767)'), 
    loads('LINESTRING (328465.28737409605 5833250.521684363, 328823.381536529 5833325.790638473)'), 
    loads('LINESTRING (328465.28737409605 5833250.521684363, 329108.7267534364 5833343.9541297415, 329225.2123010261 5833345.759855625, 329280.78677489475 5833330.256656735, 329428.1597286554 5833204.183553637, 329503.9874493602 5833195.947948219, 329561.4135173367 5833236.768783023, 329729.43709216587 5833487.268068233, 329772.54743910744 5833512.693744781, 329964.6897677011 5833574.336358781)'), 
    loads('LINESTRING (328823.381536529 5833325.790638473, 329147.9234807086 5833376.929102408, 329630.9248227435 5833420.877031954, 329759.85612325097 5833422.68180321, 330027.5673686871 5833407.1276495075, 330352.7404905099 5833354.571031918, 330676.3333473845 5833260.774439847, 330949.71388329903 5833150.110572036, 331053.0467591735 5833099.482812439, 331164.7739266542 5833039.566319358, 331175.1941591152 5833033.472760414)'), 
    loads('LINESTRING (331175.1941591152 5833033.472760414, 330970.10898474767 5833172.763407155, 330734.3536296796 5833275.457897749, 330631.1603056652 5833329.421831664, 330567.46504128433 5833396.320337815, 330542.3948773743 5833489.945474814, 330568.98280243 5833588.817880681, 330602.2492817399 5833631.656745849, 330647.67595791817 5833663.031545553, 330878.02761007065 5833734.686602701, 330979.59622111387 5833787.710798449)'), 
    loads('LINESTRING (329964.6897677011 5833574.336358781, 329779.3304806252 5833551.022339576, 329716.10087787383 5833535.603721623, 329363.78818041214 5833442.371374791, 328989.7633778361 5833373.937455229, 328823.381536529 5833325.790638473)'), 
    loads('LINESTRING (330839.5323538405 5833741.351042142, 330979.59622111387 5833787.710798449)'), 
    loads('LINESTRING (330839.5323538405 5833741.351042142, 330753.00455006445 5833716.785234701, 329964.6897677011 5833574.336358781)'), 
    loads('LINESTRING (330839.5323538405 5833741.351042142, 330188.81052145467 5833647.312543389, 330079.268469858 5833641.748131458, 329913.71004823904 5833667.3690334745, 329861.9096152267 5833655.73105355, 329805.92261271196 5833623.185819611, 329544.48215402925 5833239.228108884, 329510.48868255893 5833216.419724881, 329475.90853869123 5833209.434105608, 329443.9260886345 5833216.095348236, 329412.5129678654 5833241.047804326, 329395.6979394896 5833298.235067042, 329427.0684187039 5833356.754239143, 329468.154943292 5833375.211866743, 329616.03293539496 5833395.029443128)'), 
]

network = gpd.GeoDataFrame(geometry=roads, crs=3857)
collapsed = c4.collapse_junctions(network, 1500)
collapsed["geometry"] = collapsed["geometry"].apply(lambda geom: c4.smooth_wma(geom, 20))

widths = [ 800, 2000, 2000, 2000 ]
centers = [
    [ 302206.73, 5844230.70 ],
    [ 373579.7, 5860742.4 ],
    [ 330274.1, 5833503.5 ],
    [ 349350.5, 5796263.4 ],
]

# Création de la figure (Format vertical 8x12 comme demandé)
fig = plt.figure(figsize=(12, 24))

# On définit une grille de 3 lignes et 2 colonnes
gs = fig.add_gridspec(6, 2, height_ratios=[2, 1, 1, 2, 1, 1])

# --- 1. La vue principale (Toute la largeur de la ligne 0) ---
# gs[0, :] signifie : ligne 0, toutes les colonnes
sub1 = fig.add_subplot(gs[0, :])
sub1.set_title('Highway network before collapsing')

# --- 2. Les vues détaillées (2 par ligne) ---
# Ligne 1
sub2 = fig.add_subplot(gs[1, 0])
sub2.set_xlim(centers[0][0] - widths[0], centers[0][0] + widths[0])
sub2.set_ylim(centers[0][1] - widths[0], centers[0][1] + widths[0])

sub3 = fig.add_subplot(gs[1, 1])
sub3.set_xlim(centers[1][0] - widths[1], centers[1][0] + widths[1])
sub3.set_ylim(centers[1][1] - widths[1], centers[1][1] + widths[1])

# Ligne 2
sub4 = fig.add_subplot(gs[2, 0])
sub4.set_xlim(centers[2][0] - widths[2], centers[2][0] + widths[2])
sub4.set_ylim(centers[2][1] - widths[2], centers[2][1] + widths[2])

sub5 = fig.add_subplot(gs[2, 1])
sub5.set_xlim(centers[3][0] - widths[3], centers[3][0] + widths[3])
sub5.set_ylim(centers[3][1] - widths[3], centers[3][1] + widths[3])

# --- 1. La vue principale (Toute la largeur de la ligne 0) ---
# gs[0, :] signifie : ligne 0, toutes les colonnes
sub6 = fig.add_subplot(gs[3, :])
sub6.set_title('Highway network after collapsing and a slight smoothing')

# --- 2. Les vues détaillées (2 par ligne) ---
# Ligne 1
sub7 = fig.add_subplot(gs[4, 0])
sub7.set_xlim(centers[0][0] - widths[0], centers[0][0] + widths[0])
sub7.set_ylim(centers[0][1] - widths[0], centers[0][1] + widths[0])

sub8 = fig.add_subplot(gs[4, 1])
sub8.set_xlim(centers[1][0] - widths[1], centers[1][0] + widths[1])
sub8.set_ylim(centers[1][1] - widths[1], centers[1][1] + widths[1])

# Ligne 2
sub9 = fig.add_subplot(gs[5, 0])
sub9.set_xlim(centers[2][0] - widths[2], centers[2][0] + widths[2])
sub9.set_ylim(centers[2][1] - widths[2], centers[2][1] + widths[2])

sub10 = fig.add_subplot(gs[5, 1])
sub10.set_xlim(centers[3][0] - widths[3], centers[3][0] + widths[3])
sub10.set_ylim(centers[3][1] - widths[3], centers[3][1] + widths[3])

# --- Mise en forme globale ---
# On boucle sur tous les axes pour appliquer vos paramètres répétitifs
axes = [sub1, sub2, sub3, sub4, sub5, sub6, sub7, sub8, sub9, sub10]

for i, ax in enumerate(axes):
    ax.axes.get_xaxis().set_visible(False)
    ax.axes.get_yaxis().set_visible(False)

    if i < 5:
        for r in network.geometry:
            path = Path(numpy.asarray(r.coords)[:, :2])
            ax.add_patch(PathPatch(path, facecolor="none", edgecolor='gray', linewidth=0.5))
    else:
        for r in collapsed.geometry:
            path = Path(numpy.asarray(r.coords)[:, :2])
            ax.add_patch(PathPatch(path, facecolor="none", edgecolor='red', linewidth=0.5))

    ax.autoscale_view()

# Ajuste automatiquement les marges pour éviter les chevauchements
plt.tight_layout()
plt.show()