diff --git a/icons.svg b/icons.svg index 42163eb..1e4cb94 100644 --- a/icons.svg +++ b/icons.svg @@ -24,20 +24,20 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="16" - inkscape:cx="85.77483" - inkscape:cy="361.94213" + inkscape:zoom="0.35355339" + inkscape:cx="226.29957" + inkscape:cy="490.64693" inkscape:current-layer="layer1" inkscape:document-units="px" - showgrid="true" - showguides="true" + showgrid="false" + showguides="false" inkscape:guide-bbox="true" inkscape:object-paths="true" inkscape:snap-bbox="true" - inkscape:window-width="1518" - inkscape:window-height="1000" - inkscape:window-x="28" - inkscape:window-y="22" + inkscape:window-width="1440" + inkscape:window-height="855" + inkscape:window-x="2" + inkscape:window-y="0" inkscape:window-maximized="0"> + y="180" + ry="1" + rx="1" /> + inkscape:label="#path4154" + inkscape:connector-curvature="0" /> + style="fill:#808080;fill-opacity:1;stroke:none" + d="m 319.5,172 c 0.277,0 0.5,0.223 0.5,0.5 0,0.277 -0.223,0.5 -0.5,0.5 l 2,0 c -0.277,0 -0.5,-0.223 -0.5,-0.5 0,-0.277 0.223,-0.5 0.5,-0.5 l -2,0 z" + id="rect4274" + inkscape:connector-curvature="0" /> @@ -322,25 +325,25 @@ sodipodi:nodetypes="ccccccccccccc" inkscape:connector-curvature="0" id="bench" - d="m 19,218 0,1 2,0 -1,3 1,0 1,-3 4,0 1,3 1,0 -1,-3 2,0 0,-1 z" + d="m 19,170 0,1 2,0 -1,3 1,0 1,-3 4,0 1,3 1,0 -1,-3 2,0 0,-1 z" style="fill:#000000;stroke:none" inkscape:label="#path3043" /> + d="m 70,36 0,2 -2,0 0,3 2,0 0,2 3,0 0,-2 2,0 0,-3 -2,0 0,-2 -3,0" + inkscape:label="#d_clinic" + sodipodi:nodetypes="ccccccccccccc" /> + d="m 40,146 -6,2 0,1 6,-2 6,2 0,-1 -6,-2 z m -5,8 0,1 2,0 -1,3 1,0 1,-3 4,0 1,3 1,0 -1,-3 2,0 0,-1 -10,0 z" + style="fill:#808080;stroke:none" /> @@ -381,100 +385,90 @@ sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path3056" - d="m 52,56 2,6 4,0 2,-6 z" - style="color:#000000;fill:#a52a2a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="m 20,24 2,6 4,0 2,-6 z" + style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="M 24.125,21.5 C 23.996341,21.48209 23.883367,21.4955 23.75,21.53125 23.483267,21.60272 23.252961,21.778365 23.125,22 L 21,22 l -1,1 8,0 -1,-1 -2.15625,0 C 24.68835,21.734915 24.425204,21.541799 24.125,21.5 z" + style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="m 39,29 1,1 3,0 2,-9 -8,0 0,8 z" + style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="m 38,19 6,0 1,1 -8,0 z" + style="fill:#808080;stroke:none" /> + d="m 51,23 c 0,-1.662 1.338,-3 3,-3 l 4,0 c 1.662,0 3,1.338 3,3 z m 10,3 c 0,1.662 -1.338,3 -3,3 l -4,0 c -1.662,0 -3,-1.338 -3,-3 z" + style="fill:#808080;stroke:none" /> + d="m 50,24 -1,1 1,1 1,-1 10.5,0 0.5,1 1,-1 -1,-1 z" + style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="m 55.5,53.03125 c -2.132814,0 -3.60923,0.93793 -4.4375,2.28125 C 50.23423,56.65582 50,58.33078 50,60 l 1.03125,0 c 0,-1.56275 0.27118,-3.07559 0.9375,-4.15625 0.66632,-1.08066 1.678491,-1.78125 3.53125,-1.78125 1.852759,0 2.86493,0.70059 3.53125,1.78125 0.66632,1.08066 0.9375,2.5935 0.9375,4.15625 L 61,60 C 61,58.33078 60.76577,56.65582 59.9375,55.3125 59.10923,53.96918 57.632814,53.03125 55.5,53.03125 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1.03606772;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + d="m 19,50 0,12 1,0 0,-6 c 2,0 1,1 3,1 2,0 1,-1 3,-1 2,0 1,1 3,1 0,-2 0,-4 0,-6 -2,0 -1,-1 -3,-1 -2,0 -1,1 -3,1 -2,0 -1,-1 -3,-1 -2,0 -1,0 -1,0 z" + style="fill:#808080;stroke:none" /> + style="fill:#808080;fill-rule:evenodd;stroke:none" /> + d="m 75,58 c 0,0 0,-2.8556 0,-4 0,-1.65685 -1.343146,-3 -3,-3 -1.656854,0 -3,1.34315 -3,3 0,2.04205 0,4 0,4 l 1,0 c 0,0 0,-3 0,-4 0,-1.10457 0.89543,-2 2,-2 1.10457,0 2,0.89543 2,2 0,1 0,4 0,4 z" + style="fill:#808080;stroke:none" /> - - + style="fill:#808080" /> + x="287.40588" + y="182.3833" /> + inkscape:label="#rect3366" + inkscape:connector-curvature="0" /> + inkscape:label="#path3383" + inkscape:connector-curvature="0" /> + x="99" + y="19" + ry="1" + rx="1" /> - - + transform="matrix(0.875,0,0,0.875,-29.5,-25.5)" /> + d="m 166,52 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" + transform="translate(-48,-32)" /> + d="m 172,52 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" + transform="translate(-48,-32)" /> + d="m 120,28 -6,0 3,-6 z" + style="fill:#808080;fill-opacity:1;stroke:none" /> + style="fill:#808080;fill-opacity:1;stroke:none" + d="m 137,20 c -1.65685,0 -3,1.343146 -3,3 0,1.656854 1.34315,3 3,3 1.65685,0 3,-1.343146 3,-3 0,-1.656854 -1.34315,-3 -3,-3 z m 0,2 c 0.55228,0 1,0.447715 1,1 0,0.552285 -0.44772,1 -1,1 -0.55228,0 -1,-0.447715 -1,-1 0,-0.552285 0.44772,-1 1,-1 z" + id="path3429" + inkscape:connector-curvature="0" /> + x="132" + y="24" /> + d="m 146,35 5,5 0,4 -1,0 c -0.554,0 -1,0.446 -1,1 l 5,0 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 0,-4 5,-5 -11,0 z" + id="bar" + inkscape:connector-curvature="0" /> + inkscape:label="#path3091" + inkscape:connector-curvature="0" /> + x="227" + y="29" /> - + d="m 281,56 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" + transform="translate(-48,-32)" /> + inkscape:connector-curvature="0" /> - + d="m 276,34 0,10 1,0 0,-9 6,0 0,9 1,0 0,-10 -8,0 z m 4,7 0,2 -2,0 0,2 -2,0 0,1 3,0 0,-2 2,0 0,-2 1,0 0,-1 -2,0 z" + id="staircase" + inkscape:connector-curvature="0" /> @@ -803,65 +784,66 @@ sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path3125" - d="m 108.5,125.5 -4,0 0,-9 c 3,0 1,2 4,2 z" - style="fill:none;stroke:#75507b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + d="m 108.5,93.5 -4,0 0,-9 c 3,0 1,2 4,2 z" + style="fill:none;stroke:#d4aa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + d="m 103,51 c -0.554,0 -1,0.446 -1,1 l 0,2 c 0,0.554 0.446,1 1,1 l 2,0 c 0.554,0 1,-0.446 1,-1 l 0,-2 c 0,-0.554 -0.446,-1 -1,-1 l -2,0 z m 0,1 2,0 0,2 -2,0 0,-2 z" + style="fill:#808080;fill-opacity:1;stroke:none" /> + inkscape:label="#path3167" + inkscape:connector-curvature="0" /> + d="m 151,84 1,1 1,0 0,7 -1,0 -1,-1 z" + style="fill:#808080;stroke:none" /> + d="m 155,84 1,1 1,0 0,7 -1,0 -1,-1 z" + style="fill:#808080;stroke:none" /> + inkscape:label="#path4117" + inkscape:connector-curvature="0" /> + d="m 200,52 c -0.554,0 -1,0.446 -1,1 -0.554,0 -1,0.446 -1,1 l 0,3 c 0,0.554 0.446,1 1,1 0,0.554 0.446,1 1,1 l 0.5625,0 0,3 0.875,0 0,-3 0.5625,0 c 0.554,0 1,-0.446 1,-1 0.554,0 1,-0.446 1,-1 l 0,-3 c 0,-0.554 -0.446,-1 -1,-1 0,-0.554 -0.446,-1 -1,-1 l -2,0 z" /> + d="m 215,52 c -0.554,0 -1,0.446 -1,1 -0.554,0 -1,0.446 -1,1 l 0,3 c 0,0.554 0.446,1 1,1 0,0.554 0.446,1 1,1 l 0.5625,0 0,3 0.875,0 0,-3 0.5625,0 c 0.554,0 1,-0.446 1,-1 0.554,0 1,-0.446 1,-1 l 0,-3 c 0,-0.554 -0.446,-1 -1,-1 0,-0.554 -0.446,-1 -1,-1 l -2,0 z" /> + d="m 214,63 4,0 1,-3 -6,0 z" + style="fill:#808080;stroke:none" /> + y="178" + ry="1" + rx="1" /> + d="m 20,194 c -0.554,0 -1,0.446 -1,1 l 0,1 0,6 0,1 c 0,0.554 0.446,1 1,1 l 1,0 6,0 1,0 c 0.554,0 1,-0.446 1,-1 l 0,-1 0,-6 0,-1 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 -6,0 -1,0 z m 0.5,2 0.5,0 0.5,0 5,0 0.5,0 0.5,0 c 0.277,0 0.5,0.223 0.5,0.5 l 0,0.5 0,0.5 0,1 0,0.5 0,0.5 c 0,0.277 -0.223,0.5 -0.5,0.5 l -0.5,0 -0.5,0 -5,0 -0.5,0 -0.5,0 c -0.277,0 -0.5,-0.223 -0.5,-0.5 l 0,-0.5 0,-0.5 0,-1 0,-0.5 0,-0.5 c 0,-0.277 0.223,-0.5 0.5,-0.5 z m 0,5 1,0 c 0.277,0 0.5,0.223 0.5,0.5 l 0,1 c 0,0.277 -0.223,0.5 -0.5,0.5 l -0.5,0 -0.5,0 c -0.277,0 -0.5,-0.223 -0.5,-0.5 l 0,-0.5 0,-0.5 c 0,-0.277 0.223,-0.5 0.5,-0.5 z m 6,0 1,0 c 0.277,0 0.5,0.223 0.5,0.5 l 0,0.5 0,0.5 c 0,0.277 -0.223,0.5 -0.5,0.5 l -0.5,0 -0.5,0 c -0.277,0 -0.5,-0.223 -0.5,-0.5 l 0,-0.5 0,-0.5 c 0,-0.20775 0.13292,-0.39305 0.3125,-0.46875 0.0599,-0.0252 0.11825,-0.0312 0.1875,-0.0312 z m -6.5,4 0,1 -1.5,0 c -0.277,0 -0.5,0.223 -0.5,0.5 0,0.277 0.223,0.5 0.5,0.5 l 11,0 c 0.277,0 0.5,-0.223 0.5,-0.5 0,-0.277 -0.223,-0.5 -0.5,-0.5 l -1.5,0 0,-1 -1,0 0,1 -6,0 0,-1 -1,0 z" + id="train" + inkscape:connector-curvature="0" /> + x="132" + y="52" /> + x="134" + y="52" /> + x="136" + y="52" /> + x="321" + y="175" + ry="0.5" + rx="0.5" /> + d="m 325,180 c 0,-0.554 -0.446,-1 -1,-1 l -1,0 0,2 2,0 0,-1 z" + style="fill:#808080;fill-opacity:1;stroke:none" /> + d="m 321,184 c -0.554,0 -1,-0.446 -1,-1 l 0,-1 2,0 0,2 -1,0 z" + style="fill:#808080;fill-opacity:1;stroke:none" /> + x="328" + y="23" + ry="0.5" + rx="0.5" /> + x="330" + y="25" + ry="0.5" + rx="0.5" /> + x="324" + y="27" + ry="0.5" + rx="0.5" /> + x="328" + y="18" + ry="0.5" + rx="0.5" /> + x="327" + y="21" + ry="0.5" + rx="0.5" /> + inkscape:label="#path4362" + inkscape:connector-curvature="0" /> + inkscape:label="#rect4373" + inkscape:connector-curvature="0" /> + inkscape:label="#path4380" + inkscape:connector-curvature="0" /> + inkscape:label="#rect4405" + inkscape:connector-curvature="0" /> + inkscape:label="#rect4416" + inkscape:connector-curvature="0" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + inkscape:label="#rect4441" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cssccssscssscsssccsscccccccccc" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + d="m 51.5,83.5 4,4 4,-4" + style="color:#000000;fill:none;stroke:#d4aa00;stroke-width:1px;stroke-linecap:round;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + inkscape:label="#path4460" + inkscape:connector-curvature="0" /> + d="m 24,113 c 0,3 -6,3 -6,3 l 0,1 12,0 0,-1 c 0,0 -6,0 -6,-3 z" + style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="m 23,116 0,10 2,0 0,-10 -2,0" + style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="m 18,125 0,1 12,0 0,-1 z" + style="color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + y="116" + ry="0.5" + rx="0.5" /> + style="fill:#808080;fill-opacity:1;stroke:none" + rx="0.5" /> + y="116" + ry="0.5" + rx="0.5" /> @@ -1557,107 +1569,39 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path4516" - d="M 37.5,148.5 36,155" - style="color:#000000;fill:none;stroke:#3465a4;stroke-width:1px;stroke-linecap:round;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="M 37.5,116.5 36,123" + style="color:#000000;fill:#808080;stroke:#d4aa00;stroke-width:1px;stroke-linecap:round;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + d="m 45,116.5 2,6.5" + style="color:#000000;fill:#808080;stroke:#d4aa00;stroke-width:1px;stroke-linecap:round;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> + inkscape:connector-curvature="0" /> - - - - - - + d="m 18,92 2,0 c 0,-0.71048 0,-2.40071 0,-3 0,-6 3,-6 3,0 0,0.74214 0,2.1026 0,3 l 2,0 c 0,-0.81653 0,-2.33012 0,-3 0,-6 3,-6 3,0 0,0.72685 0,2.1184 0,3 l 2,0 c 0,-0.97247 0,-2.19286 0,-3 0,-8 -6,-8 -6,0 0,-8 -6,-8 -6,0 0,0.67417 0,2.21811 0,3 z" + style="fill:#808080;stroke:none" /> - - + sodipodi:nodetypes="sscssssssssscsssccsssccssssscsssccss" /> + transform="translate(217.5,-4)" /> @@ -1678,652 +1622,972 @@ sodipodi:nodetypes="cssc" inkscape:connector-curvature="0" id="path3279" - d="m 90.5,127 c 0,0 0,-7.5 0,-9.5 0,-2 -1,-3 -3,-3 -2,0 -2.5,0 -2.5,0" - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + d="m 90.5,95 c 0,0 0,-7.5 0,-9.5 0,-2 -1,-3 -3,-3 -2,0 -2.5,0 -2.5,0" + style="fill:none;stroke:#d4aa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="fill:#808080" + rx="1" /> + inkscape:label="#rect3287" + inkscape:connector-curvature="0" /> + d="m 116,86 c -0.554,0 -1,0.446 -1,1 l 0,7 c 0,0.554 0.446,1 1,1 l 7,0 c 0.554,0 1,-0.446 1,-1 l 0,-7 c 0,-0.554 -0.446,-1 -1,-1 l -7,0 z m 0,1 3,0 0,3 -3,0 0,-3 z m 4,0 3,0 0,3 -3,0 0,-3 z m -4,4 3,0 0,3 -3,0 0,-3 z m 4,0 3,0 0,3 -3,0 0,-3 z" + style="fill:#808080" /> + d="m 119.5,84.5 c 7,0 0,-7 0,0 z" + style="fill:none;stroke:#d4aa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + style="fill:none;stroke:#d4aa00" + d="m 40,57 c 0,0 0,0 0,0 0,-0.828427 0.671573,-1.5 1.5,-1.5 0.828427,0 1.5,0.671573 1.5,1.5 l 0,1" + id="path3315" + inkscape:connector-curvature="0" /> + style="fill:none;stroke:#d4aa00" + d="m 40,57 c 0,-0.828427 -0.671573,-1.5 -1.5,-1.5 -0.828427,0 -1.5,0.671573 -1.5,1.5 0,0 0,0 0,0 l 0,1 0,0" + id="path3317" + inkscape:connector-curvature="0" /> + style="fill:none;stroke:#d4aa00" + d="m 40,60 0,-6 c 0,0 0,0 0,0 0,-1.380712 1.119288,-2.5 2.5,-2.5 1.380712,0 2.5,1.119288 2.5,2.5 l 0,1" + id="path3321" + inkscape:connector-curvature="0" /> - + style="fill:none;stroke:#d4aa00" + d="m 40,54 c 0,-1.380712 -1.119288,-2.5 -2.5,-2.5 -1.380712,0 -2.5,1.119288 -2.5,2.5 0,0 0,0 0,0 l 0,1 0,0" + id="path3323" + inkscape:connector-curvature="0" /> + inkscape:label="#path3357" + inkscape:connector-curvature="0" /> + inkscape:label="#rect4180" + inkscape:connector-curvature="0" /> + inkscape:label="#rect4192" + inkscape:connector-curvature="0" /> + style="fill:#808080;stroke:none" + rx="0.5" /> + style="fill:#808080;stroke:none" + rx="0.5" /> + style="fill:#808080;stroke:none" /> + style="fill:#808080;stroke:none" + rx="1" /> + style="fill:#808080;stroke:none" + rx="0.5" /> + style="fill:#808080;stroke:none" + rx="0.5" /> + style="fill:#808080;stroke:none" + rx="0.5" /> + inkscape:label="#path4222" + inkscape:connector-curvature="0" /> + d="m 84,122 -2,0 0,5 1,0 0,-2 1,0 0,-1 -1,0 0,-1 1,0 z" + style="fill:#808080;stroke:none" /> + d="m 94,122 -2,0 0,5 2,0 0,-1 -1,0 0,-1 1,0 0,-1 -1,0 0,-1 1,0 z" + style="fill:#808080;stroke:none" /> + d="m 85,122 0,5 1,0 0,-2 1,2 1,0 -1,-2 -1,-1 0,-2 z" + style="fill:#808080;stroke:none" /> + style="fill:#808080;stroke:none" + rx="1" /> + y="188" + ry="0.5" + rx="0.5" /> + y="188" + ry="0.5" + rx="0.5" /> + y="181" + ry="0.75" + rx="0.75" /> + y="189" + ry="0.33333334" + rx="0.33333334" /> + y="189" + ry="0.33333334" + rx="0.33333334" /> + y="185" + ry="0.5" + rx="0.5" /> + y="185" + ry="0.5" + rx="0.5" /> + y="180" + ry="0.5" + rx="0.5" /> + y="190" + ry="0.5" + rx="0.5" /> + y="189" + ry="0.5" + rx="0.5" /> + y="189" + ry="0.5" + rx="0.5" /> + style="fill:#808080;stroke:none" + rx="1" /> + style="fill:#ffd5d5;stroke:none" + rx="0.5" /> + style="fill:#ffd5d5;stroke:none" + rx="0.5" /> + style="fill:#ffd5d5;stroke:none" + rx="0.75" /> + style="fill:#808080;stroke:none" + rx="0.33333334" /> + style="fill:#808080;stroke:none" + rx="0.33333334" /> + d="m 58.90625,178 a 0.50005,0.50005 0 0 0 -0.25,0.15625 l -2,2 a 0.50005,0.50005 0 1 0 0.6875,0.6875 l 2,-2 A 0.50005,0.50005 0 0 0 58.90625,178 z" + style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" /> + inkscape:label="#rect4376" + inkscape:connector-curvature="0" /> + inkscape:label="#rect4388" + inkscape:connector-curvature="0" /> + inkscape:label="#rect4452" + inkscape:connector-curvature="0" /> - + + inkscape:label="#rect4612" + inkscape:connector-curvature="0" /> + style="fill:#808080;stroke:none" /> + style="fill:#808080;stroke:none" /> + style="fill:#808080;stroke:none" /> + y="183" + ry="0.5" + rx="0.5" /> + y="183" + ry="0.5" + rx="0.5" /> + + + + + ry="1" + y="114" + x="58" + height="8" + width="2" + id="rect3407" + style="fill:#808080;stroke:none" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mapper.py b/mapper.py index cf1e13b..10a6afb 100644 --- a/mapper.py +++ b/mapper.py @@ -32,12 +32,6 @@ if not os.path.isfile(input_file_name): print 'Fatal: no such file: ' + input_file_name + '.' sys.exit(1) -#start_time = datetime.datetime.now() -#input_file = open(input_file_name) -#content = xml.dom.minidom.parse(input_file) -#input_file.close() -#print 'File readed in ' + str(datetime.datetime.now() - start_time) + '.' - node_map, way_map, relation_map = osm_reader.parse_osm_file(input_file_name) output_file = svg.SVG(open(sys.argv[2], 'w+')) @@ -60,7 +54,7 @@ tags_to_write = ['operator', 'opening_hours', 'cuisine', 'network', 'website', 'description', 'level', 'wikidata', 'name', 'alt_name', 'image', 'fax', 'old_name', 'artist_name', 'int_name', 'official_name', 'full_name', 'email', 'designation', - 'min_height', 'height'] + 'min_height', 'height', 'inscription', 'start_date'] prefix_to_write = ['addr', 'contact', 'name', 'operator', 'wikipedia', 'alt_name', 'description', 'old_name', 'inscription', @@ -372,9 +366,9 @@ def draw_ways(): elif v == 'residential': style += '8' elif v == 'service': style += '7' elif v == 'track': style += '3' - elif v in ['footway', 'pedestrian']: style += '2' + elif v in ['footway', 'pedestrian']: style += '1;stroke-dasharray:3,3;stroke-linecap:butt;stroke:#888888' elif v == 'steps': style += '5;stroke-dasharray:1,2;stroke-linecap:butt' - elif v == 'path': style += '1;stroke-dasharray:5,5;stroke-linecap:round' + elif v == 'path': style += '1;stroke-dasharray:5,5;stroke-linecap:butt' else: continue style += ';' @@ -498,6 +492,9 @@ def to_write(key): return False def get_icon(tags, scheme, fill='444444'): + tags_hash = ','.join(tags.keys()) + ':' + ','.join(tags.values()) + if tags_hash in scheme['cache']: + return scheme['cache'][tags_hash] main_icon = None extra_icons = [] processed = set() @@ -534,14 +531,21 @@ def get_icon(tags, scheme, fill='444444'): for key in element['tags'].keys(): processed.add(key) if main_icon: - return [main_icon] + extra_icons, fill, processed + returned = [main_icon] + extra_icons, fill, processed else: - return [], fill, processed + returned = [], fill, processed + scheme['cache'][tags_hash] = returned + return returned -def draw_nodes(): +def draw_nodes(show_missed_tags=False, overlap=14): print 'Draw nodes...' + start_time = datetime.datetime.now() + scheme = yaml.load(open('tags.yml')) + scheme['cache'] = {} + if overlap != 0: + points = [] node_number = 0 @@ -567,16 +571,32 @@ def draw_nodes(): draw_text(k + ': ' + p[k], x, y + 18 + text_y, '444444') text_y += 10 - for k in p: - if not no_draw(k) and not k in processed: - point(k, p[k], x, y, fill, text_y) - text_y += 10 + if show_missed_tags: + for k in p: + if not no_draw(k) and not k in processed: + point(k, p[k], x, y, fill, text_y) + text_y += 10 xxx = -(len(shapes) - 1) * 8 - for shape in shapes: - draw_point_shape(shape, x + xxx, y, fill) - xxx += 16 + + if overlap != 0: + for shape in shapes: + has_space = True + for p in points: + if x + xxx - overlap <= p.x <= x + xxx + overlap and \ + y - overlap <= p.y <= y + overlap: + has_space = False + break + if has_space: + draw_point_shape(shape, x + xxx, y, fill) + points.append(Vector(x + xxx, y)) + xxx += 16 + else: + for shape in shapes: + draw_point_shape(shape, x + xxx, y, fill) + xxx += 16 ui.write_line(-1, len(node_map)) + print 'Nodes drawed in ' + str(datetime.datetime.now() - start_time) + '.' #draw_raw_nodes() #draw_raw_ways() @@ -588,7 +608,10 @@ icons = extract_icon.IconExtractor('icons.svg') #sys.exit(0) #draw_ways() -draw_nodes() +draw_nodes(show_missed_tags=True, overlap=12) + +#draw_ways() +#draw_nodes() if flinger.space.x == 0: output_file.rect(0, 0, w, flinger.space.y, color='FFFFFF') diff --git a/osm_reader.py b/osm_reader.py index b15fa32..34418ba 100644 --- a/osm_reader.py +++ b/osm_reader.py @@ -9,7 +9,7 @@ import ui import sys -def parse_node_full(node_data, silent=False): +def parse_node_full(node_datae): """ Parse full node parameters using regular expressions: id, visible, version, etc. For faster parsing use parse_node(). @@ -23,22 +23,21 @@ def parse_node_full(node_data, silent=False): 'user': m.group(5), 'uid': m.group(6), 'lat': float(m.group(7)), 'lon': float(m.group(8))} else: - if not silent: - print 'Error: cannot parse node data: ' + node_data + '.' + print 'Error: cannot parse node data: ' + node_data + '.' return None def parse_node(text): """ Just parse node identifier, latitude, and longitude. """ - id = text[4:text.find('"', 6)] - lat_index = text.find('lat') - lon_index = text.find('lon') + node_id = text[4:text.find('"', 6)] + lat_index = text.find('lat="') + lon_index = text.find('lon="') lat = text[lat_index + 5:text.find('"', lat_index + 7)] lon = text[lon_index + 5:text.find('"', lon_index + 7)] - return {'id': int(id), 'lat': float(lat), 'lon': float(lon)} + return {'id': int(node_id), 'lat': float(lat), 'lon': float(lon)} -def parse_way_full(way_data, silent=False): +def parse_way_full(way_data): """ Parse full way parameters using regular expressions: id, visible, version, etc. For faster parsing use parse_way(). @@ -50,8 +49,7 @@ def parse_way_full(way_data, silent=False): 'changeset': m.group(3), 'timestamp': m.group(4), 'user': m.group(5), 'uid': m.group(6)} else: - if not silent: - print 'Error: cannot parse way data: ' + way_data + '.' + print 'Error: cannot parse way data: ' + way_data + '.' return None def parse_way(text): @@ -88,10 +86,28 @@ def parse_tag(text): v = text[v_index + 3:text.find('"', v_index + 4)] return k, v -def parse_osm_file(file_name, silent=False): - if not silent: - print 'Reading OSM file ' + file_name +def parse_osm_file(file_name): + print 'Reading OSM file ' + file_name start_time = datetime.datetime.now() + try: + node_map, way_map, relation_map = parse_osm_file_fast(file_name) + except Exception as e: + print '\033[31mFast parsing failed.\033[0m' + a = raw_input('Do you want to use slow but correct XML parsing? [y/n] ') + if a in ['y', 'yes']: + start_time = datetime.datetime.now() + input_file = open(input_file_name) + content = xml.dom.minidom.parse(input_file) + input_file.close() + else: + return None, None, None + print 'File readed in ' + \ + str(datetime.datetime.now() - start_time) + '.' + print 'Nodes: ' + str(len(node_map)) + ', ways: ' + \ + str(len(way_map)) + ', relations: ' + str(len(relation_map)) + '.' + return node_map, way_map, relation_map + +def parse_osm_file_fast(file_name): node_map = {} way_map = {} relation_map = {} @@ -158,9 +174,4 @@ def parse_osm_file(file_name, silent=False): ui.write_line(-1, lines_number) # Complete progress bar. - if not silent: - print 'File readed in ' + \ - str(datetime.datetime.now() - start_time) + '.' - print 'Nodes: ' + str(len(node_map)) + ', ways: ' + \ - str(len(way_map)) + ', relations: ' + str(len(relation_map)) + '.' return node_map, way_map, relation_map diff --git a/tags.yml b/tags.yml index 77bf08a..cd1d00e 100644 --- a/tags.yml +++ b/tags.yml @@ -2,11 +2,14 @@ colors: # Color names + 'black': '000000' 'blue': '2233AA' + 'brown': '964B00' 'gray': '888888' 'green': '4E9A06' 'grey': '888888' 'lightblue': '2288CC' + 'maroon': '800000' 'red': 'CC0000' 'violet': '75507B' 'yellow': 'EDD400' @@ -58,6 +61,8 @@ tags: icon: [bank] - tags: {amenity: pub} icon: [pub] +- tags: {amenity: kindergarten} + icon: [kindergarten] - tags: {amenity: post_office} icon: [post_office] - tags: {amenity: fast_food, 'operator:en': "McDonald's"} @@ -66,6 +71,8 @@ tags: icon: [fast_food] - tags: {amenity: shop, shop: fishing} icon: [fishing] +- tags: {amenity: shop, shop: convenience} + icon: [shop_convenience] - tags: {shop: gift} icon: [gift] - tags: {amenity: fountain} @@ -75,8 +82,6 @@ tags: add_icon: [microphone] - tags: {building: '*', 'roof:material': metal} icon: [metal_roof] -- tags: {railway: subway_entrance} - icon: [train] - tags: {natural: tree} icon: [tree] color: wood @@ -95,22 +100,43 @@ tags: - tags: {natural: tree, denotation: avenue} over_icon: [avenue_tree] under_icon: [tree, broadleaved, needleleaved] + + # Entrance - tags: {entrance: 'yes'} icon: [entrance] - tags: {entrance: main} icon: [main_entrance] - tags: {entrance: staircase} icon: [staircase] +- tags: {railway: subway_entrance} + icon: [train] +- tags: {railway: subway_entrance, entrance: 'yes'} + icon: [train] + - tags: {highway: bus_stop} icon: [bus_stop] +- tags: {highway: bus_stop, shelter: 'yes'} + icon: [bus_stop_with_shelter] +- tags: {highway: bus_stop, bench: 'yes'} + icon: [bus_stop_with_bench] +- tags: {highway: bus_stop, bench: 'yes', shelter: 'no'} + icon: [bus_stop_with_bench] +- tags: {highway: bus_stop, shelter: 'yes', bench: 'yes'} + icon: [bus_stop_with_shelter_and_bench] - tags: {highway: crossing} icon: [crossing] +- tags: {highway: crossing, crossing: zebra} + icon: [crossing] +- tags: {highway: crossing, crossing_ref: zebra} + icon: [crossing] - tags: {highway: crossing, crossing: uncontrolled} add_icon: [no_traffic_signals] - tags: {highway: crossing, crossing: traffic_signals} add_icon: [traffic_signals] - tags: {highway: traffic_signals} icon: [traffic_signals] +- tags: {traffic_calming: bump} + icon: [bump] - tags: {highway: street_lamp} icon: [street_lamp] - tags: {historic: memorial} @@ -119,6 +145,8 @@ tags: icon: [statue] - tags: {tourism: artwork, artwork_type: statue} icon: [statue] +- tags: {tourism: artwork, artwork_type: sculpture} + icon: [statue] - tags: {historic: memorial, memorial: plaque} icon: [plaque] - tags: {historic: tomb} @@ -141,6 +169,16 @@ tags: icon: [attraction] - tags: {tourism: attraction, attraction: amusement_ride} icon: [amusement_ride] +- tags: {public_transport: platform} + icon: [railway_platform] +- tags: {barrier: entrance} + icon: [entrance] +- tags: {amenity: atm} + icon: [atm] +- tags: {public_transport: stop_position} + icon: [public_transport_stop] +- tags: {crossing_ref: toucan} + icon: [toucan_crossing] - tags: {foot: 'yes'} add_icon: [foot] @@ -188,3 +226,23 @@ tags: color: yellow - tags: {colour: yellow} color: yellow +- tags: {color: black} + color: black +- tags: {colour: black} + color: black +- tags: {color: maroon} + color: maroon +- tags: {colour: maroon} + color: maroon +- tags: {color: gray} + color: gray +- tags: {colour: gray} + color: gray +- tags: {color: grey} + color: grey +- tags: {colour: grey} + color: grey +- tags: {color: brown} + color: brown +- tags: {colour: brown} + color: brown diff --git a/ui.py b/ui.py index 2c04c9f..e84fab7 100644 --- a/ui.py +++ b/ui.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- from __future__ import unicode_literals + """ Author: Sergey Vartanov (me@enzet.ru). """ @@ -5,12 +7,14 @@ Author: Sergey Vartanov (me@enzet.ru). import sys def write_line(number, total): + length = 20 + if number == -1: - print ('%3s' % '100') + ' %: [' + (100 * '=') + '].' + print ('%3s' % '100') + ' % ░' + (length * '░') + '░' elif number % 1000 == 0: p = number / float(total) - l = int(p * 100) - print ('%3s' % str(int(p * 1000) / 10)) + ' %: [' + (l * '=') + \ - ((100 - l) * ' ') + '].' + l = int(p * length) + print ('%3s' % str(int(p * 1000) / 10)) + ' % ░' + (l * '░') + \ + ((length - l) * ' ') + '░' sys.stdout.write("\033[F")