Do popełnienia tego wpisu zmotywowało mnie zmapowanie tego sanktuarium: https://www.openstreetmap.org/#map=19/49.66772/21.21565, jak również te budynki: https://www.openstreetmap.org/#map=19/50.19653/21.26857
W obydwu przypadkach zostały użyte relacje multipolygon, moim zdaniem zupełnie niepotrzebnie, co spróbuję uzasadnić robiąc prosty test.
Na potrzeby testu weźmy te dwa budynki, przylegające do siebie ścianami: https://www.openstreetmap.org/way/323889001
W pierwszym przypadku narysujmy je klasycznie, czyli jako dwie linie z dwoma węzłami wspólnymi (tak, jak jest teraz w OSM). Otrzymujemy:
- 7 węzłów
- 2 linie
- 2 tagi
Kod XML z tego przypadku (1211 znaków):
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' upload='true' generator='JOSM'>
<node id='-278463' action='modify' visible='true' lat='49.66744380074' lon='21.21626754735' />
<node id='-278461' action='modify' visible='true' lat='49.66737150969' lon='21.21642728848' />
<node id='-278459' action='modify' visible='true' lat='49.66728518865' lon='21.21633403283' />
<node id='-278456' action='modify' visible='true' lat='49.66741006663' lon='21.21605809099' />
<node id='-278454' action='modify' visible='true' lat='49.66735747982' lon='21.2161742917' />
<node id='-278452' action='modify' visible='true' lat='49.66742145131' lon='21.21624340243' />
<node id='-278451' action='modify' visible='true' lat='49.66747403804' lon='21.21612720171' />
<way id='-278460' action='modify' visible='true'>
<nd ref='-278454' />
<nd ref='-278459' />
<nd ref='-278461' />
<nd ref='-278463' />
<nd ref='-278452' />
<nd ref='-278454' />
<tag k='building' v='yes' />
</way>
<way id='-278453' action='modify' visible='true'>
<nd ref='-278451' />
<nd ref='-278452' />
<nd ref='-278454' />
<nd ref='-278456' />
<nd ref='-278451' />
<tag k='building' v='yes' />
</way>
</osm>
Rozważmy teraz drugi przypadek, czyli narysowanie tych budynków jako relacje type=multipolygon. Otrzymujemy:
- 7 węzłów
- 3 linie
- 2 relacje
- 4 tagi
- 4 role
Kod XML z tego przypadku (1690 znaków):
<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' upload='true' generator='JOSM'>
<node id='-278463' action='modify' visible='true' lat='49.66744380074' lon='21.21626754735' />
<node id='-278461' action='modify' visible='true' lat='49.66737150969' lon='21.21642728848' />
<node id='-278459' action='modify' visible='true' lat='49.66728518865' lon='21.21633403283' />
<node id='-278456' action='modify' visible='true' lat='49.66741006663' lon='21.21605809099' />
<node id='-278454' action='modify' visible='true' lat='49.66735747982' lon='21.2161742917' />
<node id='-278452' action='modify' visible='true' lat='49.66742145131' lon='21.21624340243' />
<node id='-278451' action='modify' visible='true' lat='49.66747403804' lon='21.21612720171' />
<way id='-278489' action='modify' visible='true'>
<nd ref='-278452' />
<nd ref='-278454' />
</way>
<way id='-278460' action='modify' visible='true'>
<nd ref='-278454' />
<nd ref='-278459' />
<nd ref='-278461' />
<nd ref='-278463' />
<nd ref='-278452' />
</way>
<way id='-278453' action='modify' visible='true'>
<nd ref='-278454' />
<nd ref='-278456' />
<nd ref='-278451' />
<nd ref='-278452' />
</way>
<relation id='-278516' action='modify' visible='true'>
<member type='way' ref='-278460' role='outer' />
<member type='way' ref='-278489' role='outer' />
<tag k='building' v='yes' />
<tag k='type' v='multipolygon' />
</relation>
<relation id='-278513' action='modify' visible='true'>
<member type='way' ref='-278453' role='outer' />
<member type='way' ref='-278489' role='outer' />
<tag k='building' v='yes' />
<tag k='type' v='multipolygon' />
</relation>
</osm>
Jak widać, w drugim przypadku wszystko jest bardziej skomplikowane i bajtowo zajmuje więcej pamięci (a to jest bardzo prosty przykład). Zalety? Ja ich tutaj nie widzę.
TL;DR
Sugeruję używać relacji type=multipolygon tylko tam, gdzie jest to zasadne - czyli np. gdy trzeba wyciąć otwór w jakimś obszarze. W innych przypadkach zasadność jest wątpliwa.
Reguła KISS: https://pl.wikipedia.org/wiki/KISS_%28regu%C5%82a%29