style.mapcss 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835
  1. /*
  2. * This file is part of OsmInEdit, released under ISC license (see LICENSE.md)
  3. *
  4. * Copyright (c) Adrien Pavie 2019
  5. * Copyright (c) Daimler AG 2019
  6. *
  7. * Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  10. *
  11. */
  12. meta {
  13. title: 'OsmInEdit indoor map stylesheet';
  14. }
  15. /****************************************************************************
  16. * Labels
  17. */
  18. *[name],
  19. *[ref] {
  20. font-family: Arial;
  21. font-size: 12;
  22. font-weight: bold;
  23. text-color: black;
  24. text-offset: 6; /** Half of the font-size **/
  25. }
  26. line[name],
  27. line[ref] {
  28. text-position: line;
  29. }
  30. /****************************************************************************
  31. * Default rules
  32. */
  33. node, way {
  34. symbol-size: 24;
  35. color: #8EBEFF;
  36. opacity: 1;
  37. fill-color: white;
  38. fill-opacity: 0.7;
  39. }
  40. line {
  41. color: #8EBEFF;
  42. opacity: 1;
  43. }
  44. relation[type=multipolygon] way {
  45. width: 0;
  46. opacity: 0;
  47. }
  48. /****************************************************************************
  49. * Indoor structures
  50. */
  51. /*
  52. * Labelled features
  53. */
  54. *[indoor][ref],
  55. *[buildingpart][ref],
  56. *[room][ref] {
  57. text: ref;
  58. }
  59. *[indoor][name],
  60. *[buildingpart][name],
  61. *[room][name],
  62. *[public_transport=platform][name],
  63. *[railway=platform][name],
  64. area[highway][name],
  65. relation[type=multipolygon][highway][name] {
  66. text: name;
  67. }
  68. /*
  69. * Surface of objects
  70. */
  71. /** Rooms **/
  72. area[indoor=room],
  73. area[buildingpart=room],
  74. area[room],
  75. relation[type=multipolygon][indoor=room],
  76. relation[type=multipolygon][buildingpart=room],
  77. relation[type=multipolygon][room] {
  78. fill-color: #E0E0E0;
  79. fill-opacity: 0.5;
  80. z-index: -5;
  81. }
  82. /** Walls **/
  83. area[indoor=wall][area=yes],
  84. relation[type=multipolygon][indoor=wall] {
  85. fill-color: #444444;
  86. fill-opacity: 0.9;
  87. z-index: -2;
  88. }
  89. /** Areas (travelling spaces) **/
  90. area[indoor=~/area|corridor|level/],
  91. area[buildingpart=~/corridor|hall/],
  92. area[room=~/corridor|hall|entry|gallery|collection|entrance/],
  93. area[highway=~/pedestrian|footway|corridor/],
  94. area[railway=platform],
  95. area[public_transport=platform],
  96. area[shop=mall],
  97. relation[type=multipolygon][indoor=~/area|corridor|level/],
  98. relation[type=multipolygon][buildingpart=~/corridor|hall/],
  99. relation[type=multipolygon][room=~/corridor|hall|entry|gallery|collection|entrance/],
  100. relation[type=multipolygon][highway=~/pedestrian|footway|corridor/],
  101. relation[type=multipolygon][railway=platform],
  102. relation[type=multipolygon][public_transport=platform],
  103. relation[type=multipolygon][shop=mall] {
  104. fill-color: #EEEEEE;
  105. fill-opacity: 0.5;
  106. z-index: -6;
  107. }
  108. /** Restricted room/areas **/
  109. area[indoor=~/room|area|corridor/][access=~/private|no/],
  110. area[buildingpart][access=~/private|no/],
  111. area[room=technical],
  112. relation[type=multipolygon][indoor=~/room|area|corridor/][access=~/private|no/],
  113. relation[type=multipolygon][buildingpart][access=~/private|no/],
  114. relation[type=multipolygon][room=technical]{
  115. fill-color: #A2A2A2;
  116. }
  117. /*
  118. * Walls of objects
  119. */
  120. /** Hard wall **/
  121. area[indoor=room],
  122. area[buildingpart=~/room|hall/],
  123. area[room],
  124. *[indoor=column],
  125. *[indoor=wall],
  126. area[building],
  127. area[building:part],
  128. relation[type=multipolygon][indoor=~/room|corridor/],
  129. relation[type=multipolygon][buildingpart=~/room|corridor|hall/],
  130. relation[type=multipolygon][room],
  131. relation[type=multipolygon][building],
  132. relation[type=multipolygon][building:part] {
  133. color: #444444;
  134. opacity: 1;
  135. width: 7;
  136. }
  137. /** No wall **/
  138. area[indoor=~/area|corridor/],
  139. area[buildingpart=corridor],
  140. area[railway=platform],
  141. area[public_transport=platform],
  142. area[indoor=level],
  143. area[highway=~/pedestrian|footway|corridor/],
  144. relation[type=multipolygon][indoor=~/area|corridor/],
  145. relation[type=multipolygon][railway=platform],
  146. relation[type=multipolygon][public_transport=platform],
  147. relation[type=multipolygon][indoor=level],
  148. relation[type=multipolygon][highway=~/pedestrian|footway|corridor/] {
  149. color: #AAAAAA;
  150. opacity: 1;
  151. width: 0.5;
  152. }
  153. /** Pillars **/
  154. *[indoor=column],
  155. *[man_made=pillar],
  156. *[building:part=column] {
  157. fill-color: #999999;
  158. fill-opacity: 0.5;
  159. }
  160. /*
  161. * Room/area icons
  162. */
  163. area[room],
  164. area[area][area!=yes],
  165. relation[type=multipolygon][room],
  166. relation[type=multipolygon][area][area!=yes] {
  167. icon-image-aliases: '"amphitheatre": "auditorium", "reception": "administration", "refectory": "restaurant", "checkroom": "locker"';
  168. icon-width: 16;
  169. icon-height: 16;
  170. icon-opacity: 1;
  171. }
  172. area[room],
  173. relation[type=multipolygon][room] {
  174. icon-image: url('room_$[room].png');
  175. }
  176. area[area][area!=yes],
  177. relation[type=multipolygon][area][area!=yes] {
  178. icon-image: url('room_$[area].png');
  179. }
  180. /*
  181. * Doors
  182. */
  183. node[door][door!=no],
  184. node[entrance] {
  185. color: #003F05;
  186. fill-color: #00AB0D;
  187. opacity: 1;
  188. fill-opacity: 1;
  189. width: 5;
  190. symbol-size: 14;
  191. }
  192. line[door][door!=no],
  193. line[entrance] {
  194. color: #006804;
  195. opacity: 1;
  196. width: 12;
  197. linecap: none;
  198. }
  199. /** Passages **/
  200. node[door=no] {
  201. color: #AAAAAA;
  202. fill-color: #EEEEEE;
  203. opacity: 1;
  204. width: 1;
  205. symbol-size: 14;
  206. icon-opacity: 0;
  207. }
  208. line[door=no] {
  209. color: #AAAAAA;
  210. fill-color: #EEEEEE;
  211. opacity: 1;
  212. width: 12;
  213. linecap: none;
  214. icon-opacity: 0;
  215. }
  216. /*
  217. * Vertical passages
  218. */
  219. /** General definition **/
  220. area[buildingpart=verticalpassage],
  221. area[buildingpart:verticalpassage],
  222. area[room=~/stairs|escalator/],
  223. area[indoor=elevator],
  224. area[highway=~/elevator|lift|steps/],
  225. area[stairs=yes] {
  226. color: #7495DA;
  227. fill-color: #AEBDDA;
  228. opacity: 1;
  229. fill-opacity: 0.5;
  230. width: 2.5;
  231. z-index: -1;
  232. }
  233. /** Icons **/
  234. *[buildingpart=verticalpassage],
  235. *[buildingpart:verticalpassage],
  236. *[room=~/stairs|escalator/],
  237. *[indoor=elevator],
  238. *[highway=elevator],
  239. *[stairs=yes] {
  240. icon-width: 16;
  241. icon-height: 16;
  242. icon-opacity: 1;
  243. }
  244. *[buildingpart:verticalpassage=elevator],
  245. *[indoor=elevator],
  246. *[highway=~/elevator|lift/] {
  247. icon-image: url('highway_elevator.png');
  248. }
  249. *[buildingpart:verticalpassage=stairway],
  250. *[room=stairs],
  251. *[stairs=yes],
  252. area[highway=steps] {
  253. icon-image: url('highway_steps.png');
  254. }
  255. *[buildingpart:verticalpassage=escalator],
  256. *[room=escalator],
  257. *[conveying=yes],
  258. area[conveying=~/yes|forward|backward|reversible/] {
  259. icon-image: url('passage_escalator.png');
  260. }
  261. /** Emergency stairs **/
  262. area[buildingpart=verticalpassage][access=emergency],
  263. area[room=stairs][access=emergency],
  264. area[stairs=yes][access=emergency] {
  265. color: #009262;
  266. fill-color: #C0FFCB;
  267. icon-image: url('emergency_stairs.png');
  268. }
  269. /*
  270. * Building delimitation
  271. */
  272. area[building],
  273. area[building:part],
  274. relation[type=multipolygon][building],
  275. relation[type=multipolygon][building:part] {
  276. fill-color: #D4CACA;
  277. fill-opacity: 0.6;
  278. z-index: -10;
  279. width: 5;
  280. color: #8F5467;
  281. }
  282. /** Gradins **/
  283. area[building:part=tier],
  284. relation[type=multipolygon][building:part=tier] {
  285. color: #B4ADB3;
  286. opacity: 1;
  287. width: 1;
  288. fill-color: #BABABA;
  289. fill-opacity: 0.5;
  290. z-index: -4;
  291. }
  292. /****************************************************************************
  293. * Road objects
  294. */
  295. line[highway] {
  296. color: #9E8747;
  297. opacity: 1;
  298. width: 10;
  299. linecap: none;
  300. }
  301. line[highway=footway] {
  302. color: #C97582;
  303. dashes: 10,3;
  304. }
  305. line[highway=steps] {
  306. color: #5B8D62;
  307. dashes: 8,3;
  308. }
  309. /** Escalator **/
  310. line[conveying=~/yes|forward|backward|reversible/] {
  311. color: #848484;
  312. dashes: 8,3;
  313. }
  314. line[conveying=~/yes|forward|backward|reversible/][highway!=footway] {
  315. icon-image: url('passage_escalator.png');
  316. }
  317. /****************************************************************************
  318. * Barriers
  319. */
  320. *[barrier] {
  321. icon-image: url('barrier_$[barrier].png');
  322. color: #5B5B5B;
  323. opacity: 1;
  324. fill-opacity: 0.5;
  325. fill-color: #5B5B5B;
  326. linecap: none;
  327. }
  328. node[barrier] {
  329. fill-color: white;
  330. fill-opacity: 0.7;
  331. }
  332. line[barrier] {
  333. width: 6;
  334. icon-image: none;
  335. }
  336. *[barrier=hedge] {
  337. color: #8CD16E;
  338. }
  339. *[barrier=shelf] {
  340. color: #DBA0A0;
  341. fill-color: #DBA0A0;
  342. }
  343. /****************************************************************************
  344. * Railway
  345. */
  346. way[railway=~/rail|subway|light_rail|monorail|narrow_gauge|tram/] {
  347. color: #888888;
  348. opacity: 1;
  349. width: 15;
  350. linecap: none;
  351. dashes: 5,5;
  352. }
  353. *[railway=~/platform|subway_entrance/] {
  354. icon-image: url('railway_$[railway].png');
  355. icon-width: 16;
  356. icon-height: 16;
  357. icon-opacity: 1;
  358. }
  359. node[railway] {
  360. color: #888888;
  361. }
  362. /****************************************************************************
  363. * Aeroways
  364. */
  365. *[aeroway] {
  366. icon-image: url('aeroway_$[aeroway].png');
  367. icon-width: 16;
  368. icon-height: 16;
  369. icon-opacity: 1;
  370. }
  371. node[aeroway] {
  372. color: #0092DA;
  373. }
  374. /****************************************************************************
  375. * Labels
  376. */
  377. *[name][amenity] {
  378. text-color: #3E3E3E;
  379. }
  380. *[name][shop] {
  381. text-color: #AC39AC;
  382. }
  383. *[name][tourism] {
  384. text-color: #0099E4;
  385. }
  386. /****************************************************************************
  387. * Public transport objects
  388. */
  389. *[highway=bus_stop] {
  390. icon-image: url('highway_bus_stop.png');
  391. icon-width: 16;
  392. icon-height: 16;
  393. icon-opacity: 1;
  394. color: #0092DA;
  395. }
  396. /****************************************************************************
  397. * Amenities
  398. */
  399. /** All amenities **/
  400. *[amenity][amenity!=showcase] {
  401. fill-color: #FFDAAD;
  402. opacity: 1;
  403. fill-opacity: 0.5;
  404. icon-image: url('amenity_$[amenity].png');
  405. icon-width: 16;
  406. icon-height: 16;
  407. icon-opacity: 1;
  408. text: name;
  409. }
  410. node[amenity] {
  411. color: #734A08;
  412. fill-opacity: 0.8;
  413. fill-color: white;
  414. }
  415. /** All devices **//** fill-color: #FFDAAD;**/
  416. *[device][device!=showcase] {
  417. fill-color: #FFDAAD;
  418. opacity: 1;
  419. fill-opacity: 1;
  420. icon-image: url('device_$[device].png');
  421. icon-width: 8;
  422. icon-height: 8;
  423. icon-opacity: 1;
  424. text: name;
  425. }
  426. node[device] {
  427. color: #00E5EE;
  428. fill-opacity: 1;
  429. fill-color: white;
  430. }
  431. *[area_type] {
  432. color: #828282;
  433. opacity: 0.9;
  434. width: 1;
  435. }
  436. *[area_type=none] {
  437. fill-color: #ffffff;
  438. fill-opacity: 1;
  439. }
  440. *[area_type=background] {
  441. fill-color: #e8e8e8;
  442. fill-opacity: 0.9;
  443. }
  444. *[area_type=catering] {
  445. fill-color: #efe5ce;
  446. fill-opacity: 1;
  447. }
  448. *[area_type=shop] {
  449. fill-color: #d8e0ca;
  450. fill-opacity: 1;
  451. }
  452. *[area_type=service] {
  453. fill-color: #d0dee2;
  454. fill-opacity: 1;
  455. }
  456. *[area_type=toilet] {
  457. fill-color: #ead6d6;
  458. fill-opacity: 1;
  459. }
  460. *[area_type=counter] {
  461. fill-color: #e8c377;
  462. fill-opacity: 1;
  463. }
  464. /** Comfort amenities **/
  465. *[amenity=toilets],
  466. *[public_transport=waiting_area],
  467. *[room=waiting],
  468. *[area=waiting] {
  469. fill-color: #E3C8E3;
  470. }
  471. /** Small amenities **/
  472. *[amenity=~/atm|photo_booth|post_box|piano|telephone|parking_space/] {
  473. color: #FFBA66;
  474. }
  475. /** Large, landuse-like, amenities **/
  476. area[amenity=~/school|college|university|hospital|parking/],
  477. area[leisure=sports_centre],
  478. area[public_transport=station] {
  479. z-index: -9;
  480. }
  481. /** Independant amenities **/
  482. *[amenity=~/parking|parking_space|taxi|bus_station|shelter/] {
  483. color: #E0BF96;
  484. width: 1;
  485. }
  486. /** Parking for disabled people **/
  487. *[amenity=parking_space][wheelchair=yes],
  488. *[amenity=parking_space][capacity:disabled] {
  489. icon-image: url('parking_disabled.png');
  490. }
  491. /** Toilets **/
  492. *[amenity=toilets][female=~/yes|only|designated/][!male],
  493. *[amenity=toilets][female=~/yes|only|designated/][male=no] {
  494. icon-image: url('amenity_toilets_women.png');
  495. }
  496. *[amenity=toilets][male=~/yes|only|designated/][!female],
  497. *[amenity=toilets][male=~/yes|only|designated/][female=no] {
  498. icon-image: url('amenity_toilets_men.png');
  499. }
  500. *[amenity=toilets][wheelchair=~/yes|only|designated/] {
  501. icon-image: url('amenity_toilets_disabled.png');
  502. }
  503. /****************************************************************************
  504. * Shops
  505. */
  506. *[shop] {
  507. icon-image: url('shop_$[shop].png');
  508. icon-width: 16;
  509. icon-height: 16;
  510. icon-opacity: 1;
  511. opacity: 1;
  512. text: name;
  513. }
  514. node[shop] {
  515. color: #AC39AC;
  516. }
  517. *[shop][!name][brand] {
  518. text: brand;
  519. }
  520. area[shop] {
  521. fill-color: #FFDAAD;
  522. fill-opacity: 0.5;
  523. }
  524. /** Store departements **/
  525. *[department] {
  526. fill-color: #FFCFCC;
  527. color: #D29494;
  528. fill-opacity: 0.5;
  529. z-index: -4;
  530. opacity: 1;
  531. width: 0.5;
  532. }
  533. /****************************************************************************
  534. * Tourism-related objects
  535. */
  536. *[tourism=~/aquarium|artwork|attraction|gallery|hostel|hotel|motel|museum/],
  537. *[information=~/office|map/] {
  538. icon-image: url('tourism_$[tourism].png');
  539. icon-width: 16;
  540. icon-height: 16;
  541. icon-opacity: 1;
  542. color: #BF9962;
  543. fill-color: #FFF6AD;
  544. opacity: 1;
  545. fill-opacity: 0.5;
  546. text: name;
  547. }
  548. /** Glass cabinet **/
  549. *[indoor=glass_cabinet] {
  550. color: #A2CCC8;
  551. fill-color: #E3F3F5;
  552. opacity: 1;
  553. fill-opacity: 0.5;
  554. width: 2;
  555. z-index: -1;
  556. }
  557. /** Showcase **/
  558. *[amenity=showcase] {
  559. color: #A2CCC8;
  560. fill-color: #A2CCC8;
  561. opacity: 1;
  562. fill-opacity: 0.5;
  563. width: 2;
  564. z-index: -1;
  565. }
  566. /** Historic elements **/
  567. *[historic] {
  568. text: name;
  569. }
  570. node[historic] {
  571. color: #8E7409;
  572. }
  573. way[historic],
  574. relation[type=multipolygon][historic] {
  575. color: #C0B0A2;
  576. opacity: 0.5;
  577. width: 0.5;
  578. fill-color: #C0B0A2;
  579. z-index: -1;
  580. }
  581. *[historic=tomb] {
  582. icon-image: url('historic_tomb.png');
  583. icon-width: 16;
  584. icon-height: 16;
  585. icon-opacity: 1;
  586. }
  587. *[historic=artifact] {
  588. icon-image: url('tourism_archaeological.png');
  589. icon-width: 16;
  590. icon-height: 16;
  591. icon-opacity: 1;
  592. }
  593. /** Grass **/
  594. area[landuse=grass],
  595. relation[type=multipolygon][landuse=grass] {
  596. opacity: 0;
  597. width: 0;
  598. fill-color: #CFECA8;
  599. fill-opacity: 0.5;
  600. z-index: -1;
  601. }
  602. /****************************************************************************
  603. * Craft/office
  604. */
  605. *[craft] {
  606. color: #FFDAAD;
  607. fill-color: #FFDAAD;
  608. fill-opacity: 0.5;
  609. }
  610. *[office] {
  611. color: #299CEA;
  612. fill-color: #299CEA;
  613. fill-opacity: 0.5;
  614. }
  615. /****************************************************************************
  616. * Railway
  617. */
  618. *[railway=buffer_stop] {
  619. icon-image: url('railway_$[railway].png');
  620. icon-width: 16;
  621. icon-height: 16;
  622. icon-opacity: 1;
  623. }
  624. /****************************************************************************
  625. * Emergency
  626. */
  627. *[emergency] {
  628. icon-image: url('emergency_$[emergency].png');
  629. icon-width: 16;
  630. icon-height: 16;
  631. icon-opacity: 1;
  632. }
  633. node[emergency] {
  634. color: #FA0032;
  635. }
  636. /****************************************************************************
  637. * Man made
  638. */
  639. *[man_made=~/surveillance|lamp|street_lamp/] {
  640. icon-image: url('man_made_$[man_made].png');
  641. icon-image-aliases: '"street_lamp": "lamp"';
  642. icon-width: 16;
  643. icon-height: 16;
  644. icon-opacity: 1;
  645. }
  646. /****************************************************************************
  647. * Natural
  648. */
  649. *[natural=~/tree/] {
  650. icon-image: url('natural_$[natural].png');
  651. icon-width: 16;
  652. icon-height: 16;
  653. icon-opacity: 1;
  654. }
  655. way[natural] {
  656. color: #1E6B00;
  657. width: 5;
  658. }
  659. node[natural] {
  660. color: #1F6C02;
  661. }
  662. /****************************************************************************
  663. * Signaletics
  664. */
  665. *[advertising] {
  666. color: #5B5B5B;
  667. opacity: 1;
  668. icon-image: url('pub_$[advertising].png');
  669. icon-image-aliases: '"sign": "poster_box", "wall_painting": "poster_box"';
  670. }
  671. *[advertising=billboard][support=pole] {
  672. icon-image: url('pub_$[advertising]_$[support].png');
  673. }
  674. *[pole=landmark_sign] {
  675. icon-image: url('pole_landmark_sign.png');
  676. icon-width: 16;
  677. icon-height: 16;
  678. icon-opacity: 1;
  679. text: ref;
  680. }
  681. *[highway=milestone] {
  682. icon-image: url('poi_point_of_interest.png');
  683. icon-width: 16;
  684. icon-height: 16;
  685. icon-opacity: 1;
  686. text: name;
  687. }
  688. *:active {
  689. color: red;
  690. fill-color: red;
  691. }