meta { title: "Direction Cones"; icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADYAAAA2CAYAAACMRWrdAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA+lJREFUaIHt2lmoVlUUB/DfKS0vTtcsKYUcKrEICx9KSzKDKOill6KiMOkhe6uEgqikHsRoniAMkhCLiqKiqIdSQxrIIJBoHqmMLhYOETS5ethHutTlu2fY594UFxy4fN+a/mvtu/Y6a31FRDgQ6ZDRdqArOghsf6MxuRUWRXE4TsRcTMcx6JeCOBG7sBcD+BHf4CN8HRF7s/nRtngURTEF5+EsLMZJksOf4Lvy7x0l+y+YIAV0mgR6JuaVn72HLdiELRHxe2O/mgArimIyLsGlWIit2Ig38W5E7Gyg81gswplSoI7GK1iPVyPir1oKI6Lyg5PxmBT517AMU+voqGFrLm7Cx9iOW3BkZfmKRubjJezEnZjZBZge9hfjWezB3VWCOZzCsVhXAlqFSSMJaAh/TsAT+BnX9OLtWe4j4g+poq2LiNsiYnetc56ZIuIzXCEdzd7FoUKU5mA35o5mtgb5czU+wJjGR3GQsjV44X8AahJ+wNnD8lZUOLFM//mjDOwePFOJt4bS5fgQY0cJ1PFSEZtdhb9Or/i4VG5X1JDJSffjwYj4qhJ3zagtwk9qXJSZsnWu1J5NqCzTwMgGPDSCoMZIVfDyWnINDM2QOvT5IwTseryt7Gs7A1YauxWvjwCoo6Qu4/S6sk27+z6pQl4XEc/XVlDdziMYFxFX1hZuEc2L8UVpuItsnSKV9+lN5BuPBiLiaXyLa5vqGIbuwx0Rsb2RdMuonqpFVHvovQhfanEacowG1krdyPJWiv7RN06agayMiOcaK8oQ3WlS5TotU7ZuxsbWejI5sxJvqXnXDKFnhnS0W9+RueaKD+AIXNZSzxpsiIhtrT3KkbEy2hdI/dz4hvILZexDs02CI+JlbMONdWWLoiik7v32iNgxHH9Vh3JmbZ7UR86qKbdM5ne9rMBKJ+/FUzX4J+B7md/OuwDWL83ll1TkX40Xs/uRW2Hp7Aq8j0OH4ZtTHt3sE7Cu1kiPosBVw/DdhbUR8Wl2D7rIWJmNpdKmpR99WFB+Nq8Eve/7yV3Yz74fGxSwTUVR7FsLzcb4QV9vL8GtiohdXTnQVcbOkHrI6PG8o6PBUOvufigqimKWtMSbWoH9DZwTGbeZdLeDXq0aKFiifY/5H8qesXLbOYDDaohtjoilOf3oImML1AMFC8t+MRt1AWxKA5lx0pWQjboANtBAZk9E/JrTiS6AbZWWF3VoU24nsgOLiN+kvXUdeji3H11dzlPwud6X875nfSc+dNh5HCe9PPYC9aSuJsldASvB9eGGfwH8U/qfurBL2520VENRURTjpSM6EC1+I1XZ3kgBG2k6YH+veBDY/kZ/A0rZwZ8UbE1gAAAAAElFTkSuQmCC"; version: "1.2.0"; description: "Shows direction tags on nodes as cones"; author: "Tobias Knerr"; link: "https://github.com/tordanik/direction-cones-style"; min-josm-version: 19439; } /* Numeric and cardinal directions */ node[direction>=0][direction<360]::direction_cone_layer { set has_cone; icon-rotation: degree_to_radians(tag(direction)); } node[direction=~/^(north|east|south|west|N|E|S|W|NE|SE|SW|NW)$/]::direction_cone_layer { set has_cone; icon-rotation: cardinal_to_radians(tag(direction)); } /* Numeric and cardinal directions (copies for camera:direction and light:direction) */ node["camera:direction">=0]["camera:direction"<360]::direction_cone_layer { set has_cone; icon-rotation: degree_to_radians(tag("camera:direction")); } node["camera:direction"=~/^(north|east|south|west|N|E|S|W|NE|SE|SW|NW)$/]::direction_cone_layer { set has_cone; icon-rotation: cardinal_to_radians(tag("camera:direction")); } node["light:direction">=0]["light:direction"<360]::direction_cone_layer { set has_cone; icon-rotation: degree_to_radians(tag("light:direction")); } node["light:direction"=~/^(north|east|south|west|N|E|S|W|NE|SE|SW|NW)$/]::direction_cone_layer { set has_cone; icon-rotation: cardinal_to_radians(tag("light:direction")); } /* Secondary intercardinal direction (not supported by cardinal_to_radians) */ node[camera:direction=NNE]::direction_cone_layer, node[light:direction=NNE]::direction_cone_layer, node[direction=NNE]::direction_cone_layer { set has_cone; icon-rotation: 22.5deg; } node[camera:direction=ENE]::direction_cone_layer, node[light:direction=ENE]::direction_cone_layer, node[direction=ENE]::direction_cone_layer { set has_cone; icon-rotation: 67.5deg; } node[camera:direction=ESE]::direction_cone_layer, node[light:direction=ESE]::direction_cone_layer, node[direction=ESE]::direction_cone_layer { set has_cone; icon-rotation: 112.5deg; } node[camera:direction=SSE]::direction_cone_layer, node[light:direction=SSE]::direction_cone_layer, node[direction=SSE]::direction_cone_layer { set has_cone; icon-rotation: 157.5deg; } node[camera:direction=SSW]::direction_cone_layer, node[camera:direction=SSW]::direction_cone_layer, node[direction=SSW]::direction_cone_layer { set has_cone; icon-rotation: 202.5deg; } node[camera:direction=WSW]::direction_cone_layer, node[light:direction=WSW]::direction_cone_layer, node[direction=WSW]::direction_cone_layer { set has_cone; icon-rotation: 247.5deg; } node[camera:direction=WNW]::direction_cone_layer, node[light:direction=WNW]::direction_cone_layer, node[direction=WNW]::direction_cone_layer { set has_cone; icon-rotation: 292.5deg; } node[camera:direction=NNW]::direction_cone_layer, node[light:direction=NNW]::direction_cone_layer, node[direction=NNW]::direction_cone_layer { set has_cone; icon-rotation: 337.5deg; } /* Forward/backward direction along the parent way angle */ way[oneway != -1] > node[stop_position:direction=forward]::direction_cone_layer, way[oneway != -1] > node[railway:signal:direction=forward]::direction_cone_layer, way[oneway != -1] > node[traffic_sign:direction=forward]::direction_cone_layer, way[oneway != -1] > node[traffic_signals:direction=forward]::direction_cone_layer, way[oneway != -1] > node[direction=forward]::direction_cone_layer { set has_cone; icon-rotation: parent_way_angle() - 180deg; } way[oneway != -1] > node[stop_position:direction=backward]::direction_cone_layer, way[oneway != -1] > node[railway:signal:direction=backward]::direction_cone_layer, way[oneway != -1] > node[traffic_sign:direction=backward]::direction_cone_layer, way[oneway != -1] > node[traffic_signals:direction=backward]::direction_cone_layer, way[oneway != -1] > node[direction=backward]::direction_cone_layer { set has_cone; icon-rotation: parent_way_angle(); } /* Render the cone icon for all previously matched nodes */ node|z17-.has_cone::direction_cone_layer { icon-image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAgZJREFUOI2llL+LE0EUx79vNpKIcLhybHY2P9zCKp2FlUVasRTO4oqDQ0H8GwT9Dyyu9BBT2OiJrYLFdfcPHAgiSDjCzGyio52J2Z1nYU7W5DZZL194xbzH9zOP+fGImZHXcDisO+duMfMVAAzAMTMLIWrOuTEREQABgIjICiHeB0GQ5Bk0g17QWm8RUcTMCYB3UsqvWCGt9SYR3QYQMLOSUh4AmJJSansGey2lPFkFWrJBm4juMrMSAGJr7d46QACQUp5Ya/cAxMLzvOe+7++sAzyV7/u7aZr2RBAECRFVR6NRuA4wSZIAALVaLSUAwFq7P51O1+rWOXd/Mpn0gD9PA51O5xeAT8aYG+cBKqWuM/NxHMdjAAAz/w2t9WNmpnyuTGitn+TXYm7TN1rrO//TpTFmi4je5nP/QMMw/MjM15IkuVQGOBgMLgK4Wq/XjwuhAJCm6bMsy3bLQD3Pe5Bl2Yv5/AK03W5/B/DTGBMvAyqlWkT0o9FofFsoFhy+p5R6VOJyKmfVFjqdKSOiI2NMt6DLm865IwDpWfUiKMIwPATQBeDNe4ioG0XRhyJvIRQAhBAvtdbb+ZwxZifLsoOlvmXFIAi+ANjs9/uXAcBau8HMG81m8/O5oQBQqVT2a7XaPQAYj8cPq9Vqb5XndPIv1ewIJsxciaLo1UpDyf9NSqmnZefCbxRLiDzSbdPZAAAAAElFTkSuQmCC"; icon-width: 32; icon-offset-y: -8; z-index: -1; }