{"id":20777,"date":"2021-04-14T10:31:58","date_gmt":"2021-04-14T10:31:58","guid":{"rendered":"http:\/\/www.highcharts.com\/blog\/?p=20777"},"modified":"2026-01-13T11:18:54","modified_gmt":"2026-01-13T11:18:54","slug":"create-custom-maps-with-highcharts-maps","status":"publish","type":"post","link":"https:\/\/www.highcharts.com\/blog\/tutorials\/create-custom-maps-with-highcharts-maps\/","title":{"rendered":"Create custom maps with Highcharts Maps"},"content":{"rendered":"<p>I was looking for a website that included a map of all the music schools in Luxembourg. Unfortunately, I could not find one, so I decided to create one.<\/p>\n<p>I started by laying out my requirements: one, a list of all the music schools&#8217; addresses. Two, a Luxembourg map in a GeoJSON form. Three, a Javascript library to create the project.<\/p>\n<p>I received approximately 120 addresses of music schools and institutions from the <a href=\"https:\/\/data.public.lu\" target=\"_blank\" rel=\"noopener\">Luxembourg public repository<\/a>.<br \/>\nFor the library, I choose Highcharts Maps because it uses JavaScript and offers <a href=\"http:\/\/code.highcharts.com\/mapdata\/\" target=\"_blank\" rel=\"noopener\">various maps<\/a>, including the map of Luxembourg. However, the map was not detailed enough for my project! So I had to make some changes and add customization. Luckily Highcharts offers a step-by-step tutorial on <a href=\"https:\/\/www.highcharts.com\/docs\/maps\/create-custom-maps\" target=\"_blank\" rel=\"noopener\">how to create a custom map<\/a>; the steps are very simple to follow.<\/p>\n<p>I used a supplemental Luxembourg map (shapefile) from <a href=\"https:\/\/data.public.lu\/en\/datasets\/limites-administratives-du-grand-duche-de-luxembourg\/\" target=\"_blank\" rel=\"noopener\">The Luxembourgish data platform<\/a>. The initial map was too detailed for my project. Therefore, I uploaded the shapefile into <a href=\"https:\/\/www.qgis.org\/en\/site\/\" target=\"_blank\" rel=\"noopener\">QGIS<\/a> (free software) to reach a reasonable output that could be loaded faster by minimizing the details up to 100 meters. The result was a 130kb file, instead of a 1.6 MB file, with details of 102 communes of Luxembourg to give an impression of relative distances. Then, I exported the file as geoJSON, added the header <code>Highcharts.maps[\"Luxembourg\"]<\/code>, and changed the extension to <code>.JS<\/code>.<\/p>\n<p>Next, I simply transposed the geocoded schools&#8217; addresses locations on the Luxembourg map. I got inspired by the <a href=\"https:\/\/www.highcharts.com\/demo\/maps\/flight-routes\" target=\"_blank\" rel=\"noopener\">Highcharts Maps simple flight routes demo<\/a>.<\/p>\n<p class=\"demo-comtainer\"><iframe style=\"width: 100%;\" title=\"Simple flight routes\" src=\"https:\/\/codepen.io\/mushigh\/embed\/xxRmpWy?height=265&amp;theme-id=light&amp;default-tab=result\" height=\"780\" frameborder=\"no\" scrolling=\"no\" allowfullscreen=\"allowfullscreen\" title=\"A UK map displays simple internal flight routes\"><br \/>\nSee the Pen <a href=\"https:\/\/codepen.io\/mushigh\/pen\/xxRmpWy\">Simple flight routes<\/a> by mustapha mekhatria<br \/>\n(<a href=\"https:\/\/codepen.io\/mushigh\">@mushigh<\/a>) on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.<br \/>\n<\/iframe><\/p>\n<p>To create a compelling interactive map, I split the music schools into five categories, music school, music school dependencies, conservatoires, conservatoire dependencies, and other music institutions.<br \/>\nThe final result was a simple and <a href=\"https:\/\/www.expatnotes.lu\/music-schools-and-conservatoires-in-luxembourg\/\" target=\"_blank\" rel=\"noopener\">informative map<\/a>:<\/p>\n<p class=\"demo-comtainer\"><iframe style=\"width: 100%;\" title=\"Localization and Tooltip Using Highmaps\" src=\"https:\/\/codepen.io\/ExpatNotesLux\/embed\/XWNoEWJ?height=265&amp;theme-id=light&amp;default-tab=result\" height=\"780\" frameborder=\"no\" scrolling=\"no\" allowfullscreen=\"allowfullscreen\" title=\"A Luxembourg map displays music schools locations\"><br \/>\nSee the Pen <a href=\"https:\/\/codepen.io\/ExpatNotesLux\/pen\/XWNoEWJ\">Localization and Tooltip Using Highmaps<\/a> by ExpatNotesLux<br \/>\n(<a href=\"https:\/\/codepen.io\/ExpatNotesLux\">@ExpatNotesLux<\/a>) on <a href=\"https:\/\/codepen.io\">CodePen<\/a>.<br \/>\n<\/iframe><\/p>\n<p>Creating an interactive map was easy and smooth, thanks to the Highcharts library that does the heavy lifting. A big thanks to the support team and the fact that users can use Highcharts for free as long as it is not for commercial use.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Learn how to customize your map with Highcharts Maps and QGIS.<\/p>\n","protected":false},"author":263,"featured_media":20788,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"meta_title":"","meta_description":"","hc_selected_options":[],"footnotes":""},"categories":[210],"tags":[876],"coauthors":[875],"class_list":["post-20777","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-highcharts-maps"],"_links":{"self":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/20777","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/users\/263"}],"replies":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/comments?post=20777"}],"version-history":[{"count":1,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/20777\/revisions"}],"predecessor-version":[{"id":29343,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/posts\/20777\/revisions\/29343"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/media\/20788"}],"wp:attachment":[{"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/media?parent=20777"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/categories?post=20777"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/tags?post=20777"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.highcharts.com\/blog\/wp-json\/wp\/v2\/coauthors?post=20777"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}