{"id":3280,"date":"2024-10-14T08:32:40","date_gmt":"2024-10-14T08:32:40","guid":{"rendered":"https:\/\/www.go-inicio.com\/?p=3280"},"modified":"2025-03-25T12:59:37","modified_gmt":"2025-03-25T12:59:37","slug":"anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2","status":"publish","type":"post","link":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2","title":{"rendered":"Anatomy of a mapserver: how to leverage and visualize your geographical data"},"content":{"rendered":"\n<p>At Inicio we built Eywa, an algorithm that can find the best solar power plant location, using billions of geographical data points. Sometimes, it can be hard to make sense of all this data: forests, wet areas, cadastral parcels, etc. <\/p>\n\n<p>To help our teams get a sense of what this data actually *looks* like, we set up a tool to allow visualization in multiple clients. It\u2019s a server that builds maps, it is built on a library called MapServer. <\/p>\n\n<p>Now, we use this server everywhere: from QA to visualize that our algorithm does what it\u2019s supposed to, with the right data, to the business development teams who use it to select from the best location that the algorithm has found.<\/p>\n\n<p>This blog post will guide you through the things I wish I had known when I started setting up this piece of software at Inicio.<\/p>\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44-1024x556.png\" alt=\"\" class=\"wp-image-2857\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44-1024x556.png 1024w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44-300x163.png 300w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44-768x417.png 768w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png 1158w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The types of soil in Brittany, each color represents a type of soil: Minerals, Limestone, Wet, etc.<\/figcaption><\/figure>\n\n<h2 class=\"wp-block-heading\">Why do you need a MapServer?<\/h2>\n\n<ul class=\"wp-block-list\">\n<li><strong>Visualize<\/strong>: Geographical data is inherently visual. We all have some affinity with reading maps and visualizing data in space. You can do as many transformations as you want on your spatial data, it will be hard to extract useful insights if you can never visualize it.<br\/>Showcase: Publish and showcase your insights to the world.  <\/li>\n\n\n\n<li><strong>Showcase<\/strong>: Publish and showcase your insights to the world.<\/li>\n\n\n\n<li><strong>Share<\/strong>: Integrate your data to many GIS tools and web map visualizations. You have created an awesome data visualization and want to share it to the world?<br\/>It can be enough to setup an interactive map visualization on your website.  <\/li>\n\n\n\n<li><strong>Build<\/strong>: Create a robust and always-up source to fit your business needs.<\/li>\n<\/ul>\n\n<h3 class=\"wp-block-heading\">What does it do?<\/h3>\n\n<p>A mapping server connect to various geographical data sources. It can perform transformations, filtering, combinations, and styling. Then, it makes the data available through a server.  <\/p>\n\n<p>This may sound relatively simple, but geographical data is challenging. You need to take care of projections, indexing, and serving very complex geometries efficiently. <\/p>\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"370\" height=\"206\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d46c770995a81705a99e91_Untitled-1.png\" alt=\"\" class=\"wp-image-2860\" style=\"width:342px;height:auto\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d46c770995a81705a99e91_Untitled-1.png 370w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d46c770995a81705a99e91_Untitled-1-300x167.png 300w\" sizes=\"(max-width: 370px) 100vw, 370px\" \/><\/figure>\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" width=\"377\" height=\"100\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d46c8b4732c6c8c352cfd6_Untitled.png\" alt=\"\" class=\"wp-image-2863\" style=\"width:286px;height:auto\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d46c8b4732c6c8c352cfd6_Untitled.png 377w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d46c8b4732c6c8c352cfd6_Untitled-300x80.png 300w\" sizes=\"(max-width: 377px) 100vw, 377px\" \/><\/figure>\n\n<h3 class=\"wp-block-heading\">Why MapServer vs. Geoserver <br\/><\/h3>\n\n<p>In the world of mapping servers there are two main alternatives: MapServer and Geoserver.<\/p>\n\n<p>At Inicio, we quickly realized we would need an extensible, flexible and fast mapping server to serve our large and ever growing amount of geographical data that we both ingest and produce.<\/p>\n\n<ul class=\"wp-block-list\">\n<li>MapServer is fast: it is built in C and makes heavy use of both the most established and fastest libraries for geometrical data manipulation: GDAL and PROJ.<\/li>\n\n\n\n<li>MapServer is lightweight<\/li>\n\n\n\n<li>MapServer is configurable and scriptable<\/li>\n\n\n\n<li>MapServer is open-source, and has been actively maintained by a large community for almost 30 years, and funded by large organizations such as NASA! (And when I say actively, I mean it: the latest release to date is from April 2023) <\/li>\n<\/ul>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"772\" height=\"272\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a6fc75b99ee241fac7c_Screenshot-2024-03-11-at-18.06.52.png\" alt=\"\" class=\"wp-image-2866\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a6fc75b99ee241fac7c_Screenshot-2024-03-11-at-18.06.52.png 772w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a6fc75b99ee241fac7c_Screenshot-2024-03-11-at-18.06.52-300x106.png 300w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a6fc75b99ee241fac7c_Screenshot-2024-03-11-at-18.06.52-768x271.png 768w\" sizes=\"(max-width: 772px) 100vw, 772px\" \/><\/figure>\n\n<h2 class=\"wp-block-heading\">Anatomy of a Mapserver<\/h2>\n\n<p>The components of a MapServer are:<\/p>\n\n<h3 class=\"wp-block-heading\">What is a mapfile exactly?<\/h3>\n\n<p>A mapfile is simply a config file written in MapServer\u2019s configuration language. It defines everything the server needs to know to draw your map. Objects are defined with an opening tag, and .  <\/p>\n\n<p>Here is a minimal example of a mapfile. The indents are optional, but useful to keep the whole structure clear. <\/p>\n\n<p>Here\u2019s an example file with comments:<\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"631\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a7bfca3e5cbb81a9d50_Screenshot-2024-03-11-at-18.07.02.png\" alt=\"\" class=\"wp-image-2869\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a7bfca3e5cbb81a9d50_Screenshot-2024-03-11-at-18.07.02.png 776w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a7bfca3e5cbb81a9d50_Screenshot-2024-03-11-at-18.07.02-300x244.png 300w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a7bfca3e5cbb81a9d50_Screenshot-2024-03-11-at-18.07.02-768x624.png 768w\" sizes=\"(max-width: 776px) 100vw, 776px\" \/><\/figure>\n\n<p>Choosing to make a custom config language for the MapServer configuration files is an surprising choice.<\/p>\n\n<p>It probably made sense when this library was created, but it doesn\u2019t seem to add any advantage over something like JSON or TOML, which are well supported nowadays and come with a lot of tooling.<\/p>\n\n<p>At Inicio, we actually use Pydantic models that mirror the structure of these config files, and serialized them to the mapfile format! This allows us to generate and manipulate these config files as Python object, without worrying about the uncommon syntax. \u201cConfiguration-as-code\u201d  <\/p>\n\n<h3 class=\"wp-block-heading\">What kind of data sources can I use?<\/h3>\n\n<p>You can serve a lot of different type of geographical data from MapServer. These data sources are the backbone of your server. <\/p>\n\n<p>Data can be read from a file in one of the many supported formats (e.g. Shapefile, GML, GeoJSON, KML, <a href=\"https:\/\/mapserver.org\/input\/vector\/index.html#vector\">and many more<\/a>).<\/p>\n\n<p>Another option that we use a lot at Inicio is the ability to read data directly from a database. We run a Postgis-enabled database to store most of our geographical data, and our MapServer directly fetches what it needs from it. <\/p>\n\n<p>Running a query against a database in a mapfile looks something like this:<\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"772\" height=\"246\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a8cd901cdffeb1dde70_Screenshot-2024-03-11-at-18.07.09.png\" alt=\"\" class=\"wp-image-2872\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a8cd901cdffeb1dde70_Screenshot-2024-03-11-at-18.07.09.png 772w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a8cd901cdffeb1dde70_Screenshot-2024-03-11-at-18.07.09-300x96.png 300w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a8cd901cdffeb1dde70_Screenshot-2024-03-11-at-18.07.09-768x245.png 768w\" sizes=\"(max-width: 772px) 100vw, 772px\" \/><\/figure>\n\n<p>The required fields are one unique `<code>id<\/code>` and a `<code>geometry<\/code>` (or postigs `<code>geography<\/code>`). Here we export extra fields that will be used to display information within the layer, such as coloring the area depending on the type of vegetal. <\/p>\n\n<p>&#8216;When serving a lot of data, using spatial indexes is crucial, and the server knows how to take advantage of them when displaying data within a bounding box.<\/p>\n\n<h3 class=\"wp-block-heading\">What is a layer? How can I make one? <\/h3>\n\n<p>Layers are the underlying structure of the data you will make available with the server.<\/p>\n\n<p>The layer below is an example of serving forest data directly from the database to a WMS endpoint.<\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"632\" height=\"827\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a9a225432767308ceca_Screenshot-2024-03-11-at-18.07.23.png\" alt=\"\" class=\"wp-image-2929\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a9a225432767308ceca_Screenshot-2024-03-11-at-18.07.23.png 632w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3a9a225432767308ceca_Screenshot-2024-03-11-at-18.07.23-229x300.png 229w\" sizes=\"(max-width: 632px) 100vw, 632px\" \/><\/figure>\n\n<p>At Inicio, we use standard protocols for serving our data, such as WMS. It is supported by most GIS software and libraries, and allows serving a lot of data efficiently. <\/p>\n\n<h4 class=\"wp-block-heading\">What is WMS?<\/h4>\n\n<p>The Web Map Service is a standard for serving geographical data. It is based on XML, and usually serves data in the form of images (PNG, JPEG, etc.). <\/p>\n\n<p>This format makes it simple to display complex spatial data in a visual way. It can serve vector and raster data within a bounding box by rendering said data to an image and sending it back. <\/p>\n\n<p>Let\u2019s go step by step, decoding the layer definition above:<\/p>\n\n<h3 class=\"wp-block-heading\">What metadata should I add for a WMS server layer?<\/h3>\n\n<p>The first part contains a bunch of metadata for your layer. There are a some required metadata for serving data through WMS such as `<code>\u00ab wms_include_items \u00bb<\/code>` which specifies if all the input data should be included in the layer. <\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"632\" height=\"257\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3aad225432767308d78b_Screenshot-2024-03-11-at-18.07.29.png\" alt=\"\" class=\"wp-image-2932\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3aad225432767308d78b_Screenshot-2024-03-11-at-18.07.29.png 632w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3aad225432767308d78b_Screenshot-2024-03-11-at-18.07.29-300x122.png 300w\" sizes=\"(max-width: 632px) 100vw, 632px\" \/><\/figure>\n\n<h3 class=\"wp-block-heading\">Definition<\/h3>\n\n<p>This part defines the source of the data, how to access it, if it should be displayed, the extent it covers and the projection it should be available in.<\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"630\" height=\"366\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3abaf8e4f848f879a704_Screenshot-2024-03-11-at-18.07.33.png\" alt=\"\" class=\"wp-image-2935\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3abaf8e4f848f879a704_Screenshot-2024-03-11-at-18.07.33.png 630w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3abaf8e4f848f879a704_Screenshot-2024-03-11-at-18.07.33-300x174.png 300w\" sizes=\"(max-width: 630px) 100vw, 630px\" \/><\/figure>\n\n<h3 class=\"wp-block-heading\">How do you specifiy the style?<\/h3>\n\n<p>The last part is about styling the layer. This means defining the color, width opacity and all the other details of the layer\u2019s object. <\/p>\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"629\" height=\"240\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3ac5f9bc37c3b307d317_Screenshot-2024-03-11-at-18.07.38.png\" alt=\"\" class=\"wp-image-2938\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3ac5f9bc37c3b307d317_Screenshot-2024-03-11-at-18.07.38.png 629w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65ef3ac5f9bc37c3b307d317_Screenshot-2024-03-11-at-18.07.38-300x114.png 300w\" sizes=\"(max-width: 629px) 100vw, 629px\" \/><\/figure>\n\n<p>The neat part here is that the color can be returned as part of the SQL query.<\/p>\n\n<h3 class=\"wp-block-heading\">How can I run it? With a CGI-capable server <\/h3>\n\n<p>We now talk about the front-side of our server.<\/p>\n\n<p>This is maybe another marker of MapServer\u2019s respectable age, but the recommended way of running it is through a CGI-capable server, which usually means an Apache HTTP server (which is getting close to 30 years old!).<br\/><\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d5d2a2e895bef4e35a98ba_Untitled-2-1024x683.png\" alt=\"\" class=\"wp-image-2941\" srcset=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d5d2a2e895bef4e35a98ba_Untitled-2-1024x683.png 1024w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d5d2a2e895bef4e35a98ba_Untitled-2-300x200.png 300w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d5d2a2e895bef4e35a98ba_Untitled-2-768x512.png 768w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d5d2a2e895bef4e35a98ba_Untitled-2-1536x1024.png 1536w, https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d5d2a2e895bef4e35a98ba_Untitled-2-2048x1365.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n<p>This is a battle tested server software, that is currently running incredibly many servers in small and large structures. It is also super customizable, making it an overall reliable and powerful software. However, this comes at the cost of simplicity, and it is easy to get lost in the customization options which basically let you do anything (including dangerous stuff \u2620\ufe0f).  <\/p>\n\n<p>For our production server, we chose to get an Apache server running with a good config inside a well protected part of our infra. Then, another front-facing reverse-proxy handles all the heavy-lifting of HTTPS, authentication, serving other services as well as some static files. <\/p>\n\n<h3 class=\"wp-block-heading\">Where to go next?<\/h3>\n\n<ul class=\"wp-block-list\">\n<li>Once you have a MapServer serving WMS up and running, and you are getting some usage, you might want to consider caching the tiles served to make access quicker (at the cost of storage and complexity). At Inicio, we use <a href=\"https:\/\/mapproxy.org\/\">mapproxy<\/a> to cache our WMS tiles. <a href=\"https:\/\/mapserver.org\/mapcache\/index.html\">MapCache<\/a>, from the same developers as MapServer, could also be worth a try. <\/li>\n\n\n\n<li>Scripting the creation of layers. Once you start serving several data sources, writing Mapfiles may start to feel repetitive, and it gets very tempting to script their generation. You could cook up your own solution like we did, or use an external library such as <a href=\"https:\/\/mapserver.org\/mapscript\/index.html\">MapScript<\/a>.  <\/li>\n\n\n\n<li>There are a lot of potential optimizations and tuning to be done on a MapServer, depending on your use case. The <a href=\"https:\/\/mapserver.org\/optimization\/index.html\">MapServer doc<\/a> has some great tips to get you started. <\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>At Inicio we built Eywa, an algorithm that can find the best solar power plant location, using billions of geographical data points. Sometimes, it can be hard to make sense of all this data: forests, wet areas, cadastral parcels, etc. To help our teams get a sense of what this data actually *looks* like, we [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":2858,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[],"class_list":["post-3280","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Anatomy of a mapserver: how to leverage and visualize your geographical data - Inicio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Anatomy of a mapserver: how to leverage and visualize your geographical data - Inicio\" \/>\n<meta property=\"og:description\" content=\"At Inicio we built Eywa, an algorithm that can find the best solar power plant location, using billions of geographical data points. Sometimes, it can be hard to make sense of all this data: forests, wet areas, cadastral parcels, etc. To help our teams get a sense of what this data actually *looks* like, we [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2\" \/>\n<meta property=\"og:site_name\" content=\"Inicio\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-14T08:32:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-25T12:59:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1158\" \/>\n\t<meta property=\"og:image:height\" content=\"629\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Hugo Cisneros\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hugo Cisneros\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2\",\"url\":\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2\",\"name\":\"Anatomy of a mapserver: how to leverage and visualize your geographical data - Inicio\",\"isPartOf\":{\"@id\":\"https:\/\/www.go-inicio.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png\",\"datePublished\":\"2024-10-14T08:32:40+00:00\",\"dateModified\":\"2025-03-25T12:59:37+00:00\",\"author\":{\"@id\":\"https:\/\/www.go-inicio.com\/#\/schema\/person\/db6543e3c7cd9ae98ee5ca24e158c03b\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#primaryimage\",\"url\":\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png\",\"contentUrl\":\"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png\",\"width\":1158,\"height\":629},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.go-inicio.com\/en\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tech\",\"item\":\"https:\/\/www.go-inicio.com\/en\/category\/tech-en\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Anatomy of a mapserver: how to leverage and visualize your geographical data\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.go-inicio.com\/#website\",\"url\":\"https:\/\/www.go-inicio.com\/\",\"name\":\"INICIO\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.go-inicio.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.go-inicio.com\/#\/schema\/person\/db6543e3c7cd9ae98ee5ca24e158c03b\",\"name\":\"Hugo Cisneros\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.go-inicio.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b39fdb1d3585fca3736fd8ca5960dea8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b39fdb1d3585fca3736fd8ca5960dea8?s=96&d=mm&r=g\",\"caption\":\"Hugo Cisneros\"},\"sameAs\":[\"http:\/\/hugocisneros.com\"],\"url\":\"https:\/\/www.go-inicio.com\/en\/author\/cisnerosgo-inicio-com\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Anatomy of a mapserver: how to leverage and visualize your geographical data - Inicio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2","og_locale":"en_US","og_type":"article","og_title":"Anatomy of a mapserver: how to leverage and visualize your geographical data - Inicio","og_description":"At Inicio we built Eywa, an algorithm that can find the best solar power plant location, using billions of geographical data points. Sometimes, it can be hard to make sense of all this data: forests, wet areas, cadastral parcels, etc. To help our teams get a sense of what this data actually *looks* like, we [&hellip;]","og_url":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2","og_site_name":"Inicio","article_published_time":"2024-10-14T08:32:40+00:00","article_modified_time":"2025-03-25T12:59:37+00:00","og_image":[{"width":1158,"height":629,"url":"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png","type":"image\/png"}],"author":"Hugo Cisneros","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Hugo Cisneros","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2","url":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2","name":"Anatomy of a mapserver: how to leverage and visualize your geographical data - Inicio","isPartOf":{"@id":"https:\/\/www.go-inicio.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#primaryimage"},"image":{"@id":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#primaryimage"},"thumbnailUrl":"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png","datePublished":"2024-10-14T08:32:40+00:00","dateModified":"2025-03-25T12:59:37+00:00","author":{"@id":"https:\/\/www.go-inicio.com\/#\/schema\/person\/db6543e3c7cd9ae98ee5ca24e158c03b"},"breadcrumb":{"@id":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#primaryimage","url":"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png","contentUrl":"https:\/\/www.go-inicio.com\/wp-content\/uploads\/2024\/06\/65d469b05e92c038908306f7_Screenshot_2024-01-19_at_17.24.44.png","width":1158,"height":629},{"@type":"BreadcrumbList","@id":"https:\/\/www.go-inicio.com\/en\/anatomy-of-a-mapserver-how-to-leverage-and-visualize-your-geographical-data-2#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.go-inicio.com\/en"},{"@type":"ListItem","position":2,"name":"Tech","item":"https:\/\/www.go-inicio.com\/en\/category\/tech-en"},{"@type":"ListItem","position":3,"name":"Anatomy of a mapserver: how to leverage and visualize your geographical data"}]},{"@type":"WebSite","@id":"https:\/\/www.go-inicio.com\/#website","url":"https:\/\/www.go-inicio.com\/","name":"INICIO","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.go-inicio.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.go-inicio.com\/#\/schema\/person\/db6543e3c7cd9ae98ee5ca24e158c03b","name":"Hugo Cisneros","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.go-inicio.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b39fdb1d3585fca3736fd8ca5960dea8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b39fdb1d3585fca3736fd8ca5960dea8?s=96&d=mm&r=g","caption":"Hugo Cisneros"},"sameAs":["http:\/\/hugocisneros.com"],"url":"https:\/\/www.go-inicio.com\/en\/author\/cisnerosgo-inicio-com"}]}},"_links":{"self":[{"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/posts\/3280"}],"collection":[{"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/comments?post=3280"}],"version-history":[{"count":2,"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/posts\/3280\/revisions"}],"predecessor-version":[{"id":3614,"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/posts\/3280\/revisions\/3614"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/media\/2858"}],"wp:attachment":[{"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/media?parent=3280"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/categories?post=3280"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.go-inicio.com\/en\/wp-json\/wp\/v2\/tags?post=3280"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}