<div class="twins"><p></p></div> <div class="header"><h1><a href="/" style="text-decoration: none"><img height="32px" src="/favicon.png"></a> MapComposer</h1></div> <div class="story"><div class="item paragraph"><p>MapComposer is open source and in active development on Github . This project is led by OSU professor Bernie Jenny .</p></div> <div class="item paragraph"><p>MapComposer is an application and web service that generates web map tiles adhering to the Google / OpenStreetMap schema. The application generates these tiles dynamically, upon request from a browser, and it also can generate batch tile output for a given bounding box and zoom range.</p></div> <div class="item image"><img class="thumbnail" src="data:image/png;base64,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"><p>A binary layer mask delineating the glacial area around Mt. Hood.</p></div> <div class="item paragraph"><p>The rendering engine is raster based, focusing on the final compositing stages of the rendering pipeline. Source tiles are fetched from remote servers via http or locally from the file system. Different layers are then composited and cut accordingly based on being supplied with a binary mask tile set.</p></div> <div class="item paragraph"><p>Layer masks are images that are used to set the opacity for a given pixel of a given layer based on the gray scale value of the mask. This may either function as a binary mask, creating a sharp cut for a given layer, or the mask may have a gray value indicating an opacity between 0 and 1. Blurring and shadow effects create a useful effect when applied to a given layer mask.</p></div> <div class="item paragraph"><p>Because both source and mask tiles are often loaded via HTTP, fetching several layers of tiles to create the final composite can take some time. The rendering engine addresses this issue by caching these tiles locally, thus drastically accelerating subsequent renderings utilizing these tiles. I have two tiers of caching, (1) a memory cache using Google's Guava library, and (2) a SQLite cache that persists to a single file on disk.</p></div> <div class="item paragraph"><p>More details about this project can be found on the Oregon State University Cartography web site as well as Github .</p></div></div>