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

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

buildings = [
    loads('POLYGON ((478686.19251617504 6046010.016499599, 478684.45785343956 6046012.721930693, 478683.7338567123 6046013.774858919, 478691.06966700795 6046018.114996324, 478692.9403414167 6046014.663765317, 478686.19251617504 6046010.016499599))'), 
    loads('POLYGON ((478673.0831107367 6046033.283093266, 478677.12888303626 6046035.893062257, 478682.4957480141 6046028.66632548, 478678.89706691855 6046026.197687237, 478677.4490697496 6046028.303546036, 478676.55000978446 6046027.7235535495, 478673.0831107367 6046033.283093266))'), 
    loads('POLYGON ((479106.8807260598 6046429.419751053, 479099.8701868485 6046426.858968585, 479094.603772853 6046440.1820308305, 479101.77831801993 6046452.704173328, 479105.3503660398 6046453.537309519, 479109.58764847595 6046449.749181725, 479101.43917310453 6046441.109831783, 479106.8807260598 6046429.419751053))'), 
    loads('POLYGON ((478711.87188172183 6046029.965612384, 478704.4921151254 6046022.949428211, 478701.1734519448 6046028.506527674, 478709.13144061243 6046034.62090471, 478711.87188172183 6046029.965612384))'), 
    loads('POLYGON ((478836.5861792035 6046419.764846511, 478837.922628656 6046419.89146649, 478838.8477984016 6046413.035194831, 478826.8099916672 6046411.300904435, 478826.39464010246 6046413.0923725795, 478837.3924461596 6046414.695142624, 478836.5861792035 6046419.764846511))'), 
    loads('POLYGON ((478803.7563365777 6046226.382878518, 478806.0863259019 6046223.816231331, 478793.7466894038 6046212.717976203, 478791.4142570024 6046215.135943818, 478803.7563365777 6046226.382878518))'), 
    loads('POLYGON ((478885.3105282305 6046371.369824607, 478882.4869766353 6046370.970376092, 478881.20027388644 6046382.88895237, 478883.87560695584 6046383.29085334, 478885.3105282305 6046371.369824607))'), 
    loads('POLYGON ((478859.77933674003 6046549.955737183, 478866.7141468687 6046547.907708235, 478864.67480882 6046541.100359551, 478857.7400035717 6046543.148385313, 478859.77933674003 6046549.955737183))'), 
    loads('POLYGON ((478820.35140959156 6046577.674567872, 478821.3466583243 6046566.057997764, 478817.0383506437 6046565.534345278, 478815.74175931164 6046576.858456744, 478820.35140959156 6046577.674567872))'), 
    loads('POLYGON ((478876.5613986902 6046560.683421742, 478881.0154887868 6046561.055914319, 478881.7606422129 6046552.269157118, 478877.30411256396 6046551.7479865905, 478876.5613986902 6046560.683421742))'), 
    loads('POLYGON ((478684.72340898396 6046055.992269413, 478693.4249364653 6046062.243109943, 478702.3727400383 6046047.372945464, 478702.20499641023 6046046.1860315, 478709.13144061243 6046034.62090471, 478701.1734519448 6046028.506527674, 478694.103666998 6046040.37142876, 478693.2070454203 6046039.940107369, 478683.6736883313 6046055.266053453, 478684.72340898396 6046055.992269413))'), 
    loads('POLYGON ((478673.3888045325 6046060.93821718, 478679.4699264795 6046052.063848188, 478665.21119477757 6046041.443460677, 478661.1654234589 6046038.833484547, 478654.6372020278 6046047.566499901, 478659.28316284233 6046050.6127022635, 478662.44207842404 6046053.38603918, 478673.3888045325 6046060.93821718))'), 
    loads('POLYGON ((478700.3354393666 6046293.526084527, 478712.5585848402 6046306.559790939, 478726.8645246195 6046292.939111028, 478714.64137688075 6046279.905444579, 478700.3354393666 6046293.526084527))'), 
    loads('POLYGON ((478813.50449438696 6046278.271662741, 478823.62582263 6046289.704077844, 478832.2340303116 6046281.233738439, 478821.8187027889 6046269.954919039, 478813.50449438696 6046278.271662741))'), 
    loads('POLYGON ((478836.5861792035 6046419.764846511, 478837.3924461596 6046414.695142624, 478826.39464010246 6046413.0923725795, 478823.4228550197 6046412.695353692, 478822.34456441103 6046419.256720934, 478824.4245711519 6046419.519767068, 478823.5140476182 6046427.268101949, 478835.25054293795 6046428.709948083, 478836.5861792035 6046419.764846511))'), 
    loads('POLYGON ((478758.8477383718 6046281.405759642, 478771.2313848596 6046295.180289183, 478780.2818680407 6046286.553972574, 478767.4560001826 6046272.935491794, 478758.8477383718 6046281.405759642))'), 
    loads('POLYGON ((478731.75240538846 6046373.908258575, 478744.4179342212 6046386.78601585, 478758.42018493905 6046372.724032312, 478746.0535414057 6046359.990092883, 478731.75240538846 6046373.908258575))'), 
    loads('POLYGON ((478746.537380858 6046272.091454396, 478755.1505290418 6046263.918555349, 478742.62605631474 6046250.592521761, 478733.86468930665 6046258.767845151, 478746.537380858 6046272.091454396))'), 
    loads('POLYGON ((478842.1967299899 6046526.60017327, 478853.4837993072 6046527.7520070085, 478855.2950385421 6046511.660450024, 478844.6008873237 6046510.498817231, 478842.1967299899 6046526.60017327))'), 
    loads('POLYGON ((478813.0461091659 6046539.128340943, 478824.18985189474 6046540.580021444, 478826.2560640221 6046521.956016084, 478815.40635080484 6046520.350762304, 478813.0461091659 6046539.128340943))'), 
    loads('POLYGON ((478779.7762097456 6046400.181048703, 478795.2353250278 6046402.602433088, 478797.12724940636 6046391.4174229745, 478781.5174885075 6046388.849818752, 478779.7762097456 6046400.181048703))'), 
    loads('POLYGON ((478688.03447756026 6046212.531390274, 478703.6836318664 6046226.549395093, 478711.5434721228 6046217.645457092, 478695.7461018074 6046203.629928651, 478688.03447756026 6046212.531390274))'), 
    loads('POLYGON ((478854.89417986263 6046433.144088491, 478862.3224420076 6046434.062271092, 478863.15557603183 6046430.627999943, 478871.62139861064 6046431.529016176, 478873.3723409552 6046420.792433949, 478857.17205791373 6046418.383437775, 478854.89417986263 6046433.144088491))'), 
    loads('POLYGON ((478807.60349148425 6046487.613007561, 478820.9754153935 6046489.325285146, 478821.9926403905 6046479.046928027, 478806.83715972846 6046477.066701928, 478806.65718012454 6046475.1363452645, 478801.46201734827 6046474.776069205, 478800.15564879455 6046485.505352056, 478807.13927723473 6046486.4309371915, 478807.60349148425 6046487.613007561))'), 
    loads('POLYGON ((478796.93404437025 6046433.804894855, 478808.5223208658 6046435.249227893, 478811.0283243893 6046416.320743598, 478799.58829519997 6046414.873966867, 478796.93404437025 6046433.804894855))'), 
    loads('POLYGON ((478626.4502020799 6046209.086962048, 478635.36593311676 6046219.349696498, 478638.0875622045 6046222.57645644, 478645.5442859525 6046216.207366611, 478633.7587035077 6046202.720339032, 478626.4502020799 6046209.086962048))'), 
    loads('POLYGON ((478626.4502020799 6046209.086962048, 478619.1392505839 6046215.304910401, 478630.4850476318 6046229.096665031, 478638.0875622045 6046222.57645644, 478635.36593311676 6046219.349696498, 478626.4502020799 6046209.086962048))'), 
    loads('POLYGON ((478772.74706786417 6046170.830546361, 478786.2357358929 6046179.679092713, 478793.6092732599 6046168.255048053, 478780.41216797277 6046159.104280763, 478772.74706786417 6046170.830546361))'), 
    loads('POLYGON ((478653.49402615277 6046312.145492565, 478662.4183833423 6046304.859800309, 478651.2230997235 6046291.214196108, 478642.44452809164 6046298.348743845, 478653.49402615277 6046312.145492565))'), 
    loads('POLYGON ((478757.14381023945 6046213.7690520575, 478767.4979382159 6046221.33104626, 478777.2015280732 6046207.340328992, 478767.60071442474 6046200.5094749825, 478764.12892093754 6046205.771813116, 478762.93584046117 6046205.345389672, 478757.14381023945 6046213.7690520575))'), 
    loads('POLYGON ((478581.60390504915 6046186.628013545, 478594.27138464747 6046199.654388874, 478608.1253586054 6046185.595388619, 478595.4603178399 6046172.717726385, 478581.60390504915 6046186.628013545))'), 
    loads('POLYGON ((478823.90527896705 6046207.460602444, 478835.1927504239 6046217.683924296, 478843.0500066829 6046208.631204283, 478831.6118754225 6046198.2616807595, 478823.90527896705 6046207.460602444))'), 
    loads('POLYGON ((478711.66453702573 6046179.870315101, 478725.0073798157 6046188.8700859165, 478727.458746517 6046184.665623059, 478724.75906798895 6046182.776957607, 478729.0957755583 6046176.013231196, 478730.14063157915 6046176.4421066865, 478732.0113242861 6046172.99080575, 478720.6221940523 6046165.594623926, 478711.66453702573 6046179.870315101))'), 
    loads('POLYGON ((478820.08472741186 6046335.864301144, 478830.5156158333 6046330.0406638915, 478829.7451916552 6046328.26881698, 478836.6529590689 6046324.585438857, 478831.4399726918 6046314.112848596, 478813.95311211667 6046323.622290657, 478820.08472741186 6046335.864301144))'), 
    loads('POLYGON ((478839.74037620897 6046368.108081381, 478851.47679543315 6046369.549896168, 478853.58689291985 6046353.602399949, 478842.1444948123 6046352.00701364, 478839.74037620897 6046368.108081381))'), 
    loads('POLYGON ((478848.58558258554 6046319.926679044, 478862.25774900615 6046312.85969663, 478857.0447391493 6046302.387135435, 478843.37014146923 6046309.305426727, 478848.58558258554 6046319.926679044))'), 
    loads('POLYGON ((478752.39576428226 6046484.361350165, 478744.68955507956 6046502.6322961645, 478756.18585292436 6046507.498752057, 478758.18529452337 6046502.855443968, 478761.1717589857 6046504.144556582, 478767.02916944097 6046490.663122764, 478752.39576428226 6046484.361350165))'), 
    loads('POLYGON ((478848.2403803395 6046398.156941214, 478858.6452814649 6046399.769485489, 478859.2064047755 6046397.826891288, 478863.8110780993 6046398.345610814, 478865.4113572887 6046387.462845544, 478860.9524682682 6046386.793000437, 478861.3433751282 6046383.51477698, 478850.6420481507 6046381.9071407495, 478849.44732396473 6046390.403727349, 478848.2403803395 6046398.156941214))'), 
    loads('POLYGON ((478711.2264344764 6046234.455332951, 478723.6245883297 6046249.121898889, 478732.0919568051 6046241.100165955, 478719.69868257106 6046226.730971852, 478711.2264344764 6046234.455332951))'), 
    loads('POLYGON ((478781.68331165955 6046308.689320316, 478792.0986335965 6046319.968236662, 478800.71422891854 6046311.943923433, 478789.8518002592 6046300.523702696, 478781.68331165955 6046308.689320316))'), 
    loads('POLYGON ((478803.7563365777 6046226.382878518, 478791.4142570024 6046215.135943818, 478782.3858384374 6046225.100261667, 478784.9519764595 6046227.883407918, 478782.189532013 6046231.200766644, 478787.76158792316 6046236.462366819, 478790.8204714939 6046233.140104596, 478794.57970060536 6046236.3496716665, 478803.7563365777 6046226.382878518))'), 
    loads('POLYGON ((478795.9094422716 6046272.167792832, 478804.81410005066 6046263.692597138, 478791.98822755687 6046250.074187355, 478783.3848962232 6046258.841805105, 478795.9094422716 6046272.167792832))'), 
    loads('POLYGON ((478671.54873364285 6046255.930655649, 478664.90258954925 6046248.455998998, 478664.45060845336 6046248.017321249, 478661.2336910444 6046250.747297746, 478656.1063617073 6046245.478265822, 478648.6593809187 6046252.442080626, 478660.8823930464 6046265.47579876, 478671.54873364285 6046255.930655649))'), 
    loads('POLYGON ((478671.54873364285 6046255.930655649, 478674.61742959387 6046253.203121701, 478679.90031637764 6046258.9157209, 478687.0581597029 6046252.402791946, 478674.9760255425 6046238.920661042, 478664.45060845336 6046248.017321249, 478664.90258954925 6046248.455998998, 478671.54873364285 6046255.930655649))'), 
    loads('POLYGON ((478741.72264739283 6046349.056686403, 478755.59859761054 6046336.335292318, 478761.0249244174 6046341.748096378, 478768.03211149655 6046335.088814784, 478755.65573948825 6046321.7602433935, 478742.2244768007 6046334.4742694, 478736.6475030723 6046328.915232132, 478729.6451800153 6046335.871834236, 478741.72264739283 6046349.056686403))'), 
    loads('POLYGON ((478848.19787171436 6046278.292924178, 478856.97870042274 6046271.3068604665, 478851.821920742 6046264.253844001, 478852.993022256 6046263.3421932, 478844.82053728326 6046253.216048988, 478834.8661709449 6046260.965060643, 478848.19787171436 6046278.292924178))'), 
    loads('POLYGON ((478731.7908915018 6046150.53885372, 478745.42526431574 6046159.236321618, 478747.7308362214 6046155.1829883205, 478745.03116237844 6046153.294335389, 478749.51117485156 6046146.230828374, 478750.2620333543 6046146.8132703, 478752.56515804486 6046142.611269524, 478741.6207042723 6046135.207792666, 478731.7908915018 6046150.53885372))'), 
    loads('POLYGON ((478799.77739050647 6046182.7269462, 478812.86297376524 6046194.110249548, 478819.9864657698 6046185.515843203, 478806.90088606946 6046174.132561522, 478799.77739050647 6046182.7269462))'), 
    loads('POLYGON ((478834.5216316379 6046483.598759609, 478851.30759388936 6046485.551978654, 478852.75479346176 6046474.374204873, 478835.67240457796 6046472.425892494, 478834.5216316379 6046483.598759609))'), 
    loads('POLYGON ((478809.65287371015 6046386.7488809135, 478827.9233130592 6046388.826296796, 478829.6620845937 6046377.346395988, 478811.09033869504 6046374.976535442, 478809.65287371015 6046386.7488809135))'), 
    loads('POLYGON ((478793.4187170126 6046499.596211637, 478791.3524407632 6046518.220162317, 478799.6725581586 6046519.272385109, 478800.4348876825 6046511.526422485, 478807.8632101931 6046512.444659361, 478809.16713056207 6046501.566664902, 478793.4187170126 6046499.596211637))'), 
    loads('POLYGON ((478822.8749888709 6046262.055597422, 478828.60019502934 6046267.612087388, 478832.10617803177 6046264.431121372, 478826.9616374154 6046258.121464676, 478822.8749888709 6046262.055597422))'), 
    loads('POLYGON ((479010.6277966872 6046472.654530375, 479020.1434727698 6046474.281618421, 479021.7925002143 6046466.372275562, 479028.6279131079 6046467.300136045, 479030.51955528976 6046456.114993983, 479014.4600491081 6046453.257793953, 479010.6277966872 6046472.654530375))'), 
    loads('POLYGON ((478959.0145132418 6046498.642125399, 478975.0643017428 6046500.904730346, 478976.50890132604 6046489.578239156, 478960.4591330721 6046487.315639741, 478959.0145132418 6046498.642125399))'), 
    loads('POLYGON ((478984.611911253 6046414.341805295, 478995.9013013882 6046415.6421174165, 478998.41668090585 6046397.308325668, 478987.4213130397 6046395.854436903, 478984.611911253 6046414.341805295))'), 
    loads('POLYGON ((478959.7753812137 6046454.757758326, 478975.8373180015 6046457.76373615, 478977.73391635524 6046446.87597133, 478961.8202220362 6046443.867547834, 478959.7753812137 6046454.757758326))'), 
    loads('POLYGON ((478856.8206434204 6046243.648636224, 478867.3548802568 6046253.140844821, 478877.40366389166 6046242.118533865, 478866.71876595676 6046232.48012696, 478856.8206434204 6046243.648636224))'), 
    loads('POLYGON ((478871.78705371876 6046513.767216193, 478882.3403200888 6046515.377302008, 478884.4455085194 6046499.1321806, 478874.0380415269 6046497.370971104, 478871.78705371876 6046513.767216193))'), 
    loads('POLYGON ((478968.9186403093 6046334.5922254035, 478981.8980220337 6046348.505403335, 478991.38323511236 6046339.276756937, 478978.2580763207 6046325.514735491, 478968.9186403093 6046334.5922254035))'), 
    loads('POLYGON ((478909.4434027677 6046513.590530463, 478926.22943871486 6046515.543612594, 478927.3825444027 6046504.5193711035, 478910.59897369595 6046502.714971477, 478910.47763897304 6046504.352880185, 478907.3600394914 6046504.107015553, 478906.7362512052 6046511.255817, 478909.1127310333 6046511.5139419045, 478909.4434027677 6046513.590530463))'), 
    loads('POLYGON ((478933.3140061222 6046360.314333035, 478949.06709239155 6046362.581854979, 478950.66481471766 6046351.550442683, 478934.61530434963 6046349.28783114, 478933.3140061222 6046360.314333035))'), 
    loads('POLYGON ((478986.8973206809 6046472.155021709, 478997.7421138731 6046473.462699735, 478999.6964101784 6046457.071403752, 478988.99986033107 6046455.761277263, 478986.8973206809 6046472.155021709))'), 
    loads('POLYGON ((478885.3105282305 6046371.369824607, 478883.87560695584 6046383.29085334, 478882.17356481263 6046397.000913914, 478892.7218049648 6046398.313613779, 478896.1576266193 6046372.826289186, 478885.3105282305 6046371.369824607))'), 
    loads('POLYGON ((478875.8256621267 6046308.471292696, 478886.85425313906 6046302.935150024, 478877.66039770964 6046284.79528859, 478866.48849029816 6046290.631208208, 478875.8256621267 6046308.471292696))'), 
    loads('POLYGON ((478879.71058652276 6046355.401119054, 478895.45876180375 6046357.371385223, 478896.90099589824 6046345.896415144, 478880.8612854682 6046344.228407444, 478879.71058652276 6046355.401119054))'), 
    loads('POLYGON ((478935.82919334533 6046387.041626186, 478952.02454994 6046389.153116521, 478953.9162725333 6046377.968089514, 478937.71360124164 6046375.410578135, 478935.82919334533 6046387.041626186))'), 
    loads('POLYGON ((479034.06490136136 6046392.256692129, 479051.6491595057 6046406.6884853095, 479059.3581394699 6046397.637832839, 479050.93778523436 6046390.490154978, 479050.0606852203 6046391.248260701, 479040.89678668045 6046383.964174036, 479034.06490136136 6046392.256692129))'), 
    loads('POLYGON ((478957.28606138896 6046420.593988148, 478968.1283413145 6046421.753018719, 478970.2431312753 6046406.102753042, 478959.69242495496 6046404.641469126, 478957.28606138896 6046420.593988148))'), 
    loads('POLYGON ((479115.46566510573 6046410.539199722, 479126.70722016244 6046417.937528182, 479131.7750556148 6046410.566440019, 479120.3828351336 6046403.021903573, 479115.46566510573 6046410.539199722))'), 
    loads('POLYGON ((478874.7700366287 6046271.3100683475, 478895.27421024936 6046283.016815667, 478901.763258934 6046271.904604896, 478894.5777982733 6046267.710742003, 478895.4280133154 6046265.317249389, 478882.25998461 6046257.950620466, 478874.7700366287 6046271.3100683475))'), 
    loads('POLYGON ((478995.559364253 6046331.771857711, 478991.3269811694 6046335.857230097, 478996.7583442271 6046341.567238183, 478986.1093722822 6046352.153596476, 478992.2940803591 6046358.594728797, 479007.3212116853 6046343.771842951, 478995.559364253 6046331.771857711))'), 
    loads('POLYGON ((478913.94409793906 6046444.659683851, 478930.60867343977 6046448.250640816, 478932.6437693331 6046436.765738062, 478910.9274063142 6046432.514774705, 478909.698510711 6046438.929942528, 478914.7625454928 6046440.333342709, 478913.94409793906 6046444.659683851))'), 
    loads('POLYGON ((478906.27962825046 6046339.197792193, 478924.2682168568 6046342.1719508525, 478926.1501856919 6046330.392289133, 478915.15002411895 6046328.640970749, 478915.9635712143 6046324.017336315, 478908.8293942985 6046322.945631904, 478906.27962825046 6046339.197792193))'), 
    loads('POLYGON ((478903.5958256966 6046401.405511374, 478920.5225354374 6046402.910099287, 478922.25874450925 6046391.281485883, 478916.46829222864 6046390.782414016, 478916.84451113775 6046386.612131024, 478905.4069475203 6046385.314173181, 478903.5958256966 6046401.405511374))'), 
    loads('POLYGON ((478977.1951633122 6046522.284925219, 478993.2376617948 6046524.101468272, 478994.8280203322 6046512.623813045, 478978.4866479471 6046510.663503553, 478977.1951633122 6046522.284925219))'), 
    loads('POLYGON ((479010.5846835034 6046433.988691991, 479028.8772864333 6046437.40379059, 479031.2062512193 6046425.765294501, 479013.21011734375 6046422.345297845, 479010.5846835034 6046433.988691991))'), 
    loads('POLYGON ((478863.3080092057 6046475.984306462, 478874.44434872945 6046476.989880359, 478876.79955512437 6046457.915062432, 478865.6632394245 6046456.909493689, 478863.3080092057 6046475.984306462))'), 
    loads('POLYGON ((478918.52395759 6046488.7530776225, 478939.90978457243 6046490.927466527, 478940.62797828816 6046480.505321239, 478925.9244743752 6046478.963975671, 478926.0091344722 6046475.095910114, 478919.91973465896 6046474.453062896, 478918.52395759 6046488.7530776225))'), 
    loads('POLYGON ((478913.43013865233 6046530.627222661, 478906.78202473896 6046532.075667258, 478907.4433688076 6046536.228854641, 478914.09637489496 6046535.077765682, 478913.43013865233 6046530.627222661))'), 
    loads('POLYGON ((478850.506344629 6046572.119528176, 478866.403125971 6046574.087443695, 478867.4105326044 6046563.2142675035, 478851.36798888136 6046561.397486097, 478850.506344629 6046572.119528176))'), 
    loads('POLYGON ((478820.35140959156 6046577.674567872, 478836.6855411664 6046579.1891495325, 478837.83388054185 6046567.867482768, 478821.3466583243 6046566.057997764, 478820.35140959156 6046577.674567872))'), 
    loads('POLYGON ((478809.57892994216 6046598.822132958, 478825.91065573745 6046600.188058777, 478826.76988952496 6046589.317305849, 478810.43085520604 6046587.505345336, 478809.57892994216 6046598.822132958))'), 
    loads('POLYGON ((478857.5064454282 6046619.147967173, 478869.08764392737 6046620.146210726, 478870.14552439854 6046603.323341762, 478858.8656871495 6046602.617558337, 478857.5064454282 6046619.147967173))'), 
    loads('POLYGON ((478807.9328275867 6046643.019261846, 478796.8793353155 6046647.068714073, 478801.39042625774 6046659.932857104, 478812.14992170036 6046656.0369745195, 478807.9328275867 6046643.019261846))'), 
    loads('POLYGON ((478796.8793353155 6046647.068714073, 478781.40345213 6046652.6784547, 478785.76385385817 6046665.396383124, 478801.39042625774 6046659.932857104, 478796.8793353155 6046647.068714073))'), 
    loads('POLYGON ((478831.85922502034 6046628.346540009, 478842.98842319346 6046628.906131121, 478844.0536847608 6046612.529287874, 478832.9245071917 6046611.969699149, 478831.85922502034 6046628.346540009))'), 
    loads('POLYGON ((478799.8180024834 6046600.321963423, 478803.669434589 6046600.1095793685, 478803.4576977106 6046596.246362586, 478799.4580413959 6046596.461196591, 478799.8180024834 6046600.321963423))'), 
    loads('POLYGON ((478755.8217509893 6046602.685020172, 478753.8191142344 6046598.107796056, 478746.3157521687 6046601.652339829, 478748.1677179661 6046606.083337112, 478755.8217509893 6046602.685020172))'), 
    loads('POLYGON ((478898.32312646 6046603.749620848, 478899.1993816976 6046593.919612205, 478899.6822892829 6046587.219234372, 478888.1060188728 6046586.518393515, 478886.60105260706 6046603.199908059, 478898.32312646 6046603.749620848))'), 
    loads('POLYGON ((478898.32312646 6046603.749620848, 478902.0312204901 6046603.837004418, 478902.7616901815 6046594.158126592, 478899.1993816976 6046593.919612205, 478898.32312646 6046603.749620848))'), 
    loads('POLYGON ((478935.4875069662 6046564.616409481, 478954.50191654766 6046566.8300198745, 478956.08744263876 6046555.054958926, 478937.06572314934 6046552.395318813, 478935.4875069662 6046564.616409481))'), 
    loads('POLYGON ((478914.578612914 6046546.372428002, 478930.7718122271 6046548.335316904, 478932.0682516258 6046537.011224827, 478916.0257422566 6046535.1945671495, 478914.578612914 6046546.372428002))'), 
    loads('POLYGON ((478882.13932846976 6046548.247478355, 478881.7606422129 6046552.269157118, 478881.0154887868 6046561.055914319, 478880.62702538917 6046564.4828831665, 478891.46702797705 6046565.493348452, 478893.1226478907 6046548.958130911, 478882.13932846976 6046548.247478355))'), 
    loads('POLYGON ((478956.6329445232 6046543.148404289, 478974.90129698993 6046545.076871786, 478976.5039113183 6046534.3425846305, 478958.07268407266 6046531.524505526, 478956.6329445232 6046543.148404289))'), 
    loads('POLYGON ((478882.2293178708 6046625.877680672, 478893.2509691499 6046619.895292354, 478890.1862319113 6046613.8484550435, 478881.084195387 6046619.352926353, 478882.2293178708 6046625.877680672))'), 
    loads('POLYGON ((478890.44883835706 6046539.633059462, 478890.95706194284 6046543.491346164, 478895.3940341239 6046542.823080813, 478894.7375837366 6046538.967246391, 478890.44883835706 6046539.633059462))'), 
    loads('POLYGON ((478722.7506103445 6046448.712777478, 478737.49065189884 6046452.484614553, 478740.70202017535 6046440.385450958, 478737.1324535084 6046439.700844224, 478738.796377907 6046432.683645873, 478727.3343667621 6046429.898681773, 478725.6704337665 6046436.915875747, 478722.7506103445 6046448.712777478))'), 
    loads('POLYGON ((478504.18101197225 6046112.35968549, 478505.3911303202 6046113.826839897, 478506.12246929895 6046113.219928888, 478509.75282687414 6046117.621391952, 478509.1697057127 6046118.225858477, 478510.3798256957 6046119.693013164, 478512.7196229934 6046117.721160942, 478506.66902651155 6046110.385391506, 478504.18101197225 6046112.35968549))'), 
    loads('POLYGON ((478501.1098748223 6046114.938444971, 478502.3199930131 6046116.405600228, 478501.734433916 6046116.861394655, 478505.36722836894 6046121.411532937, 478506.0985679785 6046120.8046214115, 478507.1604698033 6046122.27422201, 478510.3798256957 6046119.693013164, 478509.1697057127 6046118.225858477, 478509.75282687414 6046117.621391952, 478506.12246929895 6046113.219928888, 478505.3911303202 6046113.826839897, 478504.18101197225 6046112.35968549, 478501.1098748223 6046114.938444971))'), 
    loads('POLYGON ((478848.2403803395 6046398.156941214, 478849.44732396473 6046390.403727349, 478846.17665728566 6046389.862943036, 478845.122820143 6046397.911057389, 478848.2403803395 6046398.156941214))'), 
]

gdf = gpd.GeoDataFrame(geometry=buildings, crs=3857)
typified = c4.typify_buildings_matching(gdf, 25000, 50000)

fig = plt.figure(1, (12, 6))

#############################################################

sub1 = fig.add_subplot(121)
sub1.axes.get_xaxis().set_visible(False)
sub1.axes.get_yaxis().set_visible(False)

for building in buildings:
    poly = Path.make_compound_path(Path(numpy.asarray(building.exterior.coords)[:, :2]),*[Path(numpy.asarray(ring.coords)[:, :2]) for ring in building.interiors])
    sub1.add_patch(PathPatch(poly, facecolor="grey", edgecolor='none'))

sub1.autoscale_view()

sub2 = fig.add_subplot(122)
sub2.axes.get_xaxis().set_visible(False)
sub2.axes.get_yaxis().set_visible(False)

for building in typified.geometry:
    poly = Path.make_compound_path(Path(numpy.asarray(building.exterior.coords)[:, :2]),*[Path(numpy.asarray(ring.coords)[:, :2]) for ring in building.interiors])
    sub2.add_patch(PathPatch(poly, facecolor="grey", edgecolor='none'))

sub2.autoscale_view()

plt.show()