<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: TopoLines</title>
    <description>The latest articles on DEV Community by TopoLines (@topolines).</description>
    <link>https://dev.to/topolines</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4038960%2F5e9809ca-eef2-461e-b4ea-37a397e1c583.png</url>
      <title>DEV Community: TopoLines</title>
      <link>https://dev.to/topolines</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/topolines"/>
    <language>en</language>
    <item>
      <title>I built a web tool that turns real elevation data into topographic contour line art — SVG + PNG export</title>
      <dc:creator>TopoLines</dc:creator>
      <pubDate>Sat, 25 Jul 2026 14:50:45 +0000</pubDate>
      <link>https://dev.to/topolines/i-built-a-web-tool-that-turns-real-elevation-data-into-topographic-contour-line-art-svg-png-132m</link>
      <guid>https://dev.to/topolines/i-built-a-web-tool-that-turns-real-elevation-data-into-topographic-contour-line-art-svg-png-132m</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hey DEV Community 👋&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the past few months I've been building &lt;a href="https://topolines.app/" rel="noopener noreferrer"&gt;Topolines&lt;/a&gt; — a browser-based &lt;strong&gt;topographic contour map generator&lt;/strong&gt; that turns &lt;strong&gt;real-world elevation data&lt;/strong&gt; from anywhere on Earth into clean, stylised &lt;strong&gt;contour line art&lt;/strong&gt;. You draw a box on a map, pick your settings, and it renders publication-quality &lt;strong&gt;topographic lines&lt;/strong&gt; you can export as &lt;strong&gt;vector SVG&lt;/strong&gt; or &lt;strong&gt;high-resolution PNG&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is a follow-up to my &lt;a href="https://topolines.app/" rel="noopener noreferrer"&gt;first post&lt;/a&gt; about the designer workflow. This time I want to go deeper on &lt;strong&gt;how it actually works under the hood&lt;/strong&gt;, show a gallery of &lt;strong&gt;real places&lt;/strong&gt;, and talk about the elevation data pipeline — because a lot of you asked.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjltgauscz4k04fbtzlej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjltgauscz4k04fbtzlej.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Topolines editor — generating the Brittany coastline, France, from IGN RGE ALTI 5 m elevation data.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why topographic contour maps are surprisingly hard to make
&lt;/h2&gt;

&lt;p&gt;If you've ever needed &lt;strong&gt;topographic contour lines&lt;/strong&gt; — for a poster, a UI hero background, a book cover, a brand pattern, a hiking map, or a data visualization — you've probably hit the same wall I did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Heavy GIS software&lt;/strong&gt; like &lt;strong&gt;QGIS&lt;/strong&gt;, &lt;strong&gt;ArcGIS&lt;/strong&gt; or &lt;strong&gt;GRASS&lt;/strong&gt; has a brutal learning curve. Loading a &lt;strong&gt;DEM&lt;/strong&gt; (Digital Elevation Model), reprojecting it, running a &lt;strong&gt;contour algorithm&lt;/strong&gt;, then styling the output is a multi-hour job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static asset packs&lt;/strong&gt; give you pre-made &lt;strong&gt;contour patterns&lt;/strong&gt; that everyone else is also using — and you can't change the location, the &lt;strong&gt;contour interval&lt;/strong&gt;, or the resolution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generative noise tools&lt;/strong&gt; produce fake, math-looking squiggles that don't correspond to any &lt;strong&gt;real terrain&lt;/strong&gt; or &lt;strong&gt;elevation&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted something in between: &lt;strong&gt;real cartographic data&lt;/strong&gt;, but with the &lt;strong&gt;frictionless creative control&lt;/strong&gt; of a design tool. So I built it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Topolines does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Topolines&lt;/strong&gt; is a &lt;strong&gt;real-time topographic line generator&lt;/strong&gt;. Here's the full pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search any place on Earth&lt;/strong&gt; — cities, mountains, coastlines, islands, valleys, national parks — using the built-in geocoder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Draw a bounding box&lt;/strong&gt; on an interactive map to define your area of interest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Choose your elevation precision:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SRTM 30 m&lt;/strong&gt; (free) — global coverage, great for large regions and mountain ranges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;10 m GeoTIFF&lt;/strong&gt; (HD) — sharper terrain detail for smaller areas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IGN RGE ALTI 5 m&lt;/strong&gt; in France — some of the highest-resolution open &lt;strong&gt;elevation data&lt;/strong&gt; available anywhere.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set the contour interval&lt;/strong&gt; (e.g. every 5 m, 10 m, 20 m of elevation) to control line density.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style everything:&lt;/strong&gt; color gradients, stroke width, line taper, line join, simplification level, background, and optional elevation &lt;strong&gt;annotations / labels&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Export&lt;/strong&gt; as clean &lt;strong&gt;vector SVG&lt;/strong&gt; (opens perfectly in &lt;strong&gt;Figma&lt;/strong&gt;, &lt;strong&gt;Adobe Illustrator&lt;/strong&gt;, &lt;strong&gt;Inkscape&lt;/strong&gt;, or as inline web code) or as an &lt;strong&gt;HD PNG raster&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The whole thing runs in the browser with &lt;strong&gt;no software to install&lt;/strong&gt;, and the &lt;strong&gt;free tier lets you export PNGs without even creating an account&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The elevation data pipeline (for the curious)
&lt;/h2&gt;

&lt;p&gt;Under the hood, the terrain comes from public &lt;strong&gt;open elevation datasets&lt;/strong&gt; — primarily the AWS &lt;code&gt;elevation-tiles-prod&lt;/code&gt; open data bucket (&lt;strong&gt;SRTM&lt;/strong&gt; and derived &lt;strong&gt;GeoTIFF&lt;/strong&gt; tiles), plus &lt;strong&gt;IGN RGE ALTI&lt;/strong&gt; for France.&lt;/p&gt;

&lt;p&gt;The processing chain is pure Python — &lt;strong&gt;rasterio&lt;/strong&gt; to read the &lt;strong&gt;DEM&lt;/strong&gt;, &lt;strong&gt;scikit-image&lt;/strong&gt;'s marching-squares implementation to trace the &lt;strong&gt;iso-elevation contours&lt;/strong&gt;, &lt;strong&gt;shapely&lt;/strong&gt; for geometry simplification, and &lt;strong&gt;Pillow&lt;/strong&gt; for the raster output. Each &lt;strong&gt;contour line&lt;/strong&gt; is a true &lt;strong&gt;iso-line&lt;/strong&gt; connecting points of equal &lt;strong&gt;altitude&lt;/strong&gt; — real cartography, not decorative noise.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;SVG is generated entirely server-side&lt;/strong&gt; and streamed to you, so what you download is a genuine, editable &lt;strong&gt;vector file&lt;/strong&gt; with real paths — not a traced bitmap.&lt;/p&gt;

&lt;h2&gt;
  
  
  A gallery of real places
&lt;/h2&gt;

&lt;p&gt;All of these were generated straight from real &lt;strong&gt;elevation data&lt;/strong&gt;, no manual editing:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6nkahfon6myu8xa3i68.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6nkahfon6myu8xa3i68.jpg" alt=" " width="800" height="565"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Sarajevo, Bosnia and Herzegovina&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx8lssjp79fy3qt08215l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx8lssjp79fy3qt08215l.jpg" alt=" " width="800" height="565"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Funchal, Madeira, Portugal&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzsxbo6biqduhjhjsgi2o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzsxbo6biqduhjhjsgi2o.jpg" alt=" " width="800" height="565"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Montenegro mountains&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Graphic designers &amp;amp; art directors&lt;/strong&gt; building brand systems, patterns, and print layouts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI/UX &amp;amp; web designers&lt;/strong&gt; who need &lt;strong&gt;topographic hero backgrounds&lt;/strong&gt; and &lt;strong&gt;SVG textures&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cartography &amp;amp; GIS enthusiasts&lt;/strong&gt; who want fast, good-looking &lt;strong&gt;contour maps&lt;/strong&gt; without a full GIS setup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hikers, climbers and outdoor brands&lt;/strong&gt; visualising &lt;strong&gt;terrain&lt;/strong&gt; and &lt;strong&gt;elevation&lt;/strong&gt; of real trails and peaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data visualization&lt;/strong&gt; folks who want &lt;strong&gt;iso-line&lt;/strong&gt; aesthetics grounded in real data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Makers &amp;amp; print-on-demand&lt;/strong&gt; sellers producing &lt;strong&gt;topographic posters&lt;/strong&gt; and wall art of meaningful places.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it with your hometown
&lt;/h2&gt;

&lt;p&gt;The best way to get it is to generate a place you actually know — your city, the mountain you last climbed, the coastline you grew up on. The &lt;strong&gt;terrain&lt;/strong&gt; you recognise makes the &lt;strong&gt;contour lines&lt;/strong&gt; click.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://topolines.app/" rel="noopener noreferrer"&gt;topolines.app&lt;/a&gt;&lt;/strong&gt; — free PNG export, no account needed.&lt;/p&gt;

&lt;p&gt;I'd genuinely love feedback from this community: feature requests, edge cases, weird places that break it, export formats you'd want. Drop a comment with the place you generated — I read every one. 🙏&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>design</category>
      <category>dataviz</category>
      <category>maps</category>
    </item>
    <item>
      <title>I built a vector topographic contour map generator for designers (SVG export)</title>
      <dc:creator>TopoLines</dc:creator>
      <pubDate>Tue, 21 Jul 2026 00:40:34 +0000</pubDate>
      <link>https://dev.to/topolines/i-built-a-vector-topographic-contour-map-generator-for-designers-svg-export-5hj</link>
      <guid>https://dev.to/topolines/i-built-a-vector-topographic-contour-map-generator-for-designers-svg-export-5hj</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwu76o2w4pr437z1wbfa9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwu76o2w4pr437z1wbfa9.jpg" alt=" " width="800" height="565"&gt;&lt;/a&gt;&lt;br&gt;
Hey everyone! 👋&lt;/p&gt;

&lt;p&gt;As a designer, I constantly needed high-quality vector topographic contour lines and generative patterns for branding, UI hero backgrounds, and print projects. Most existing tools were either heavy GIS software (like QGIS) or required static file purchases.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;&lt;a href="https://topolines.app" rel="noopener noreferrer"&gt;Topolines&lt;/a&gt;&lt;/strong&gt;—a fast, web-based vector topographic generator.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎛️ Key Features:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parametric Control:&lt;/strong&gt; Fine-tune elevation density, noise scale, detail, and line weights in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Styling:&lt;/strong&gt; Full visual control over color palettes, gradients, contrast, and backgrounds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean Vector Export:&lt;/strong&gt; Instant SVG exports (perfect for Figma, Illustrator, or web code) and HD PNGs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frictionless Free Tier:&lt;/strong&gt; Direct PNG exports without even needing an account.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'd love for you to try it out at &lt;strong&gt;&lt;a href="https://topolines.app" rel="noopener noreferrer"&gt;topolines.app&lt;/a&gt;&lt;/strong&gt; and let me know your feedback or feature requests!&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>design</category>
      <category>webdev</category>
      <category>svg</category>
    </item>
  </channel>
</rss>
