Create Your Own Filled Maps in Tableau

A step-by-step guide to Richard Leeke’s TabGeoHack for creating your own filled maps in Tableau Software

Filled Map United Kingdom and LondonWay back in 2009, we had a beautiful guest post by Giedre Aleknonyte describing a workaround to generate Choropleth Maps with Tableau (using version 5.0 by the way).

Those days are over. One of the major new features of Tableau 7 is Filled Maps (or Choropleth Maps as we used to call them in all blog posts here).

Did I say those days are over? Well, not quite. While Tableau provides filled maps down to the zip code areas in the United States, the level of detail in other countries is more or less rudimentary. In Germany, for example, you can create filled maps only for the 16 states (Bundesländer). This is nowhere near sufficient to do really compelling geographical data analysis and visualization. Up to now there was no way to do anything about it.

My friend Richard Leeke recently developed a fantastic tool called TabGeoHack which allows you to import literally any geographic level of detail of any region in the world into Tableau in order to use them for visualizations using filled maps. Richard is a co-founder of Equinox Ltd, a New Zealand based IT consulting firm and if you are a long time reader of this blog, you certainly already know him from the fantastic guest post series on Site Catchment Analysis. Even if you haven’t seen those articles, you probably know him from the Tableau Forum.

Surprisingly enough, Richard made his tool generously available for free in this Tableau Viz Talk post.

Please be aware that TabGeoHack – as its name suggests – is a totally unsupported hack utility, using an open back door of Tableau. The tool is a workaround with a certainly limited lifetime. It is beyond question that Tableau will provide similar built-in functionality with one of its next versions.

Richard was kind enough to grant me a sneak preview of TabGeoHack before publishing. Although the download includes a very detailed description and instruction manual, it took me quite a while to cut my teeth on the use of TabGeoHack. That’s why I thought it would be a good idea to write a step-by-step article on how to use TabGeoHack, including an example on Tableau Public, visualizing unemployment rates in Germany, broken down by counties, on a Filled Map.

So, do you want to create your own filled map of e.g. English counties, Spanish municipalities or even the individual sales regions of your company?

Here you go.

A Step-by-Step Guide to TabGeoHack

The following step-by-step guide is reduced to the max and only covers a very small part of all the possible settings and features of TabGeoHack. Its single purpose is to give you a quick start into how to use the tool and how to arrive at visualization in Tableau with filled maps not provided by the built-in geocoding. This article does not replace the detailed, comprehensive instruction manual Richard provides.

This post is just a jump start into using TabGeoHack. No more, no less.

Step 1 – Download and install TabGeoHack

Download TabGeoHack and unzip it to a folder on your local drive. This could be any folder on your hard disk. To keep it as simple as possible, I used C:\TabGeoHack in the example below.

Note that at this point in his detailed instructions Richard suggests that you add TabGeoHack to your system PATH so that you can run it from anywhere. This might be worthwhile if, like Richard, you have lots of different sets of custom geocoding files which you want to store in the folder structure for the projects they relate to. Personally, I prefer to keep it simple, store all my YAML configuration files in the TabGeoHack directory and always run it from that location – that way I didn’t need to modify my system PATH. So these instructions assume you have not put it on the PATH.

Step 2 – Download and install GDAL

TabGeoHack requires a publicly available geographical library called GDAL (Geographic Data Abstraction Library). You can download it here: GDAL 1.9. Save the zipped folder to your local drive and unzip it to a folder. I copied the files to the following path: C:\GDAL Mapserver.

Step 3 – General settings

Let me start this section with a brief aside: The YAML File Format

TabGeoHack uses YAML files for general configuration and for settings related to each set of geocoding files. YAML is a markup language and I will not go into the details here. One reason is that I do not know anything about it. More important, however you do not need to know much about it either to use TabGeoHack.

All you need to know in the first step is the fact that YAML files are text files and basically you can open and edit them with any given text editor.

However, YAML heavily depends on correct textual indentation. And YAML expects spaces used for indentation, not tabs. If you are using a standard text editor like Window’s NotePad, you should choose a font with a fixed width like Courier New.

The best and easiest way of editing the TabGeoHack configuration files is using an editor which understands and supports YAML, like the free NotePad++ or Scite.

Within the folder C:\TabGeoHack you will find a file called tabgeohack.yml. In my example set-up, TableauGeoHack.yml has to look like this:

TabGeoHack Config File

All you have to change here is the text in black. Set the path of your Tableau Repository and the GDAL path, i.e. the folder you copied the GDAL files to in Step 2 (C:\GDAL Mapserver in my case).

Step 4 – Find and download spatial files

In the next step we have to bring the spatial files to the process.

TabGeoHack can basically handle any polygon spatial data format as long as it is supported by the Geographic Data Abstraction Library (which we downloaded and installed in step 2). ESRI format is the most commonly found data format and the only format I have tested so far.

A search string in Google like “ESRI Shape Files download” will point you to a variety of resources providing Shape Files for download.

One of the most comprehensive sites I have found is Global Administrative Areas, including the ESRI Shape Files of all administrative regions of all countries in the world. In my own example here, however, I used a different resource: Geodatenzentrum, because those shape files already include the same IDs of the counties (Kreise) I had in the data source I wanted to visualize with Tableau.

The files for download are usually zipped folders, containing several different files. The following 4 file types are the crucial ones you need for TabGeoHack: DBF, PRJ, SHP and SHX. The zipped folder I downloaded from Geodatenzentrum includes those 4 files for 4 different administrative regions: Bundesland (state), Regierungsbezirk (district), Kreis (county) and Stadt (city):

Shape Files Germany - Geodatenzentrum

Create a new folder within your TabGeoHack folder, e.g.C:\TabGeoHack\Germany and copy your shape files to it.

Step 5 – Create your own YAML configuration file and change the main settings

We have the shape files now, but we do not know much about the data they include. Thus we need to explore the content of the shape file. Before we can do this, we have to create a YAML configuration file to give TabGeoHack the information needed to access and analyze the shape files.

The TabGeoHack download comes with an example YAML file (“Porirua Tsunami Warnings.yml”) and a generic template (“geocoding_template.yml”) where Richard provides a very detailed description of all sections of the configuration file in his comments.

Copy one of those files to C:\TabGeoHack, rename it (germany.yml in this case) and open it. For this step you can ignore most of the lines. This is an example of the bare minimum you need to have in your file:

TabGeoHack Configuration File Germany - Basic

Here is what you definitely have to change:

Line 3: Specify the directory where you copied your shape files to in step 4

Line 6: Specify the directory where you want to store the output files of TabGeoHack. To keep it simple, we are using the same path as in line 3

Line 10: Specify the name of the geographic role. In this example, we are using “Kreise”, the German word for counties.

Line 12: The shape file name (the file including the extension SHP for ESRI format or whatever extension applies if you are using other spatial file formats)

Another brief aside: The DOS Command Prompt

TabGeoHack has no fancy user interface. You have to run it from the DOS command prompt. The command prompt is a native Windows program which lets you run programs without a user interface. I suspect many of you rarely, if ever, use it. Don’t worry if you are not familiar with it. It is pretty easy. Here is what you need to know:

  • In the Windows Explorer, keep the SHIFT key pressed and right click on the TabGeoHack folder. From the drop down select “open command window here”. A new window will pop up and this is where you have to run the tool:

DOS Command Prompt

The shift right-click shortcut works with Windows 7 and as far as I know also with Windows Vista. If the shortcut is not available on your system, go to the Windows start menu, click on Run and type in cmd.

  • If you don’t have the shortcut described above, you need to navigate to your TabGeoHack directory first. You can change the directory by using the DOS command cd (change directory, e.g. cd C:\TabGeoHack). Cd.. takes you one level up in the directory hierarchy and cd \ brings you to the top of the directory tree (i.e. C:\).
  • Simply type the commands described in the next steps.
  • Pressing Enter runs the command you typed.
  • You can navigate within the command line using the left and right arrow keys, the HOME and END key.
  • You can use the arrow up and arrow down keys to loop through the commands you already entered earlier.

That’s pretty much it. For our purposes you do not need to know more about the DOS command prompt.

Step 6 – Analyze the fields in your shape files – the info option

In the command window run TabGeoHack with the –info option for the file germany.yml:

tabgeohack –info germany.yml

You get the following result:

TabGeoHack --info Option

TabGeoHack provides some information on the spatial file itself, like the geometry, the coordinate reference system and others. More important to us are the following fields of the shape files and the first 5 data sets. From this information we can easily see which field contains which information. Counties in Germany (Kreise) are usually identified by a 5 digit ID (Kreisschlüssel), i.e. the field RS in the spatial file is this ID. GEN contains the real names of the counties like Flensburg and Kiel. So, what we need in our custom geocoding are the fields RS and GEN.

Step 7 – Define the required geocoding fields in your YAML file

Knowing (or at least assuming) the relevant data fields, we now have to complete the configuration file germany.yml. In the end it will look like this:

TabGeoHack Configuration File Germany - Final

What we added to the file created in step 5 is the following:

  • In lines 15 to 19 we define the required geocoding fields identified in the previous step: RS and GEN. We specify RS as the unique identifier and aliases for the fields which are easier to understand.
  • In the section purge_roles_exceptions (line 37) we say that we wish to purge at the level of country (which implicitly purges all roles beneath country) and we define Germany as the only exception – that is we keep Germany and all data related to Germany (in case we want to use the built-in geocoding data for Germany in our viz). We are purging all the other countries in order to minimize the size of the custom geocoding and to maximize Tableau’s performance. Purging also helps to minimize the file size of a packaged workbook and thereby the usage of your Tableau Public storage.

Please be advised that purging is an important factor. You can easily try to load too much detailed map data which would result in either poor performance or Tableau running out of memory. Please consult the TabGeoHack documentation for more details on how to avoid this, including how to simplify complex boundaries with too many points.

Important note:

Please be advised that purging the way described above removes all other geographical information. As long as you have your custom geocoding in place, geographical visualizations for other regions (like the United States) will not be possible. This applies to already existing workbooks and to new ones. It also applies to packaged workbooks.

To make them work again, you have to remove the TabGeoHack custom geocoding from Tableau (Map | Geocoding | Remove Custom Geocoding). You can easily and quickly add it back when you need it with another TabGeoHack option: –activate.

Step 8 – Generate the input file for custom geocoding – the roles option

After completing the configuration file, we can now let the tool create the database for the custom geocoding (the –roles option):

tabgeohack –roles germany.yml

TabGeoHack --roles Option

Richard’s tool is extremely fast. Within only 2 seconds it created the CSV we can use for importing the custom geocoding into Tableau. However, be aware that the time TabGeoHack takes to finish one of the steps depends on the spatial files and the size of the custom geocoding. Creating custom geocoding files for all postal zones in Australia, for instance, can take up to 30 minutes or more. So, if TabGeoHack seems to be stuck for a couple of minutes, please be patient. If there is a problem, the tool will throw an error. As long as it doesn’t, it is probably just still busy.

Before importing into Tableau, let’s have a look at the file first. It is stored in the following directory:

C:\TabGeoHack\ Germany\Custom Geocoding Files

and it looks like this:

Custom Geocoding File

The file contains the fields we specified using the aliases as the field names (ID_Kreis and Kreis) and the latitudes and longitudes of the centres of the shapes. All we need for importing the custom geocoding to Tableau.

Don’t let the strange characters in some of the strings confuse you. Those are substitutes for the so called German Umlaute (ä, ö, ü). We do not have to take care of this, though. TabGeoHack will do all the work for us in the background.

Step 9 – Import custom geocoding into Tableau

The next step is simple and I bet most of you have already done this before: Import the custom geocoding into Tableau.

Open Tableau and create a new workbook (New | File). You do not have to connect to a data source. We will only import the custom geocoding and do not yet need a data source.

From the main menu select Map | Geocoding | Import Custom Geocoding. Browse to the folder containing the CSV we created in Step 8 (C:\TabGeoHack\Germany\Custom Geocoding Files) and click OK.

After Tableau finished the import, simply close Tableau. It is important that all copies of Tableau are closed before running the next step.

Step 10 – Associated shapes and custom geocoding – the shapes option

We are almost there. We have the custom geocoding in Tableau, but we do not have the shapes assigned to it. Thus, we have to run TabGeoHack again, this time using the –shapes option:

tabgeohack –shapes germany.yml

TabGeoHack --shapes Option

That’s it.

TabGeoHack can call it a day now.

Step 11 – Get your data source ready

However, we can’t. Not yet. We want to see the new filled maps for Germany’s Kreise, don’t we? So, let’s grab some data. Here is a database with figures of civilian labor force and unemployed by German counties (Kreise) from October 2009 to October 2011:

Germany Unemployment Rates Data

As mentioned already in step 4, I was lucky enough to find shape files with an ID that matched the IDs in the data source I wanted to use for my visualization (standard ID of Germany’s Kreise).

Sometimes, however, you will have to map the IDs in your own data to the IDs used in the custom geocoding created by TabGeoHack. This is yet more work, but usually not a big deal to create a mapping table or to enhance your data set with an additional field containing the custom geocoding IDs.

Step 12 – Use custom geocoding in your Tableau workbook

Open Tableau and connect to the data source (the German labor force / unemployment database).

In the data window, right-click on Kreisschlüssel (ID of the county) and select Geographic Role. You will notice that the custom geocoding created a new entry in the list of geographic roles: Kreise. This is exactly the name we specified in germany.yml. Click on Kreise and select ID_Kreis. This makes the connection between the dimension Kreisschlüssel in our database and the field ID_Kreis in the custom geocoding. This way, the shapes are assigned correctly to the values in the database:

Import Custom Geocoding into Tableau

Next, drag Kreisschlüssel to the Level of Detail Shelf, select filled maps as the Mark Type and you can already see the map of Germany divided by Kreise:

Filled Maps Germany by Kreise

You see: it works. 12 steps and you are good to go. Create filled maps on any level of detail. All you need to do is to find the shape files and to go through the step-by-step process described above.

Example on Tableau Public

Enough storyboarding. Let’s shoot something.

Using the German unemployment database and Richard’s fabulous TabGeoHack tool, I created the following visualization:

 

 

The visualization is hopefully self-explanatory. Here are just a few hints:

  • The visualization has 3 tabs: filled maps by counties, districts and states. Compare the maps and you will easily see how much more insight the map by counties provides into the geographical distribution of the data compared to the map by states.
  • Use the month slider filter to walk through the period from October 2009 to October 2011.
  • The state filter gives you the option to get down to one selected state. Please note that this is filtering the data and not zooming into the map. Thus, the color range and the fill colors will change. Filter by Bavaria, for instance, and you will see what I mean.
  • Of course the map is fully functional, i.e. you can zoom in and out, pan around by shift click, the tooltips are working, etc.

There is much more…

As mentioned at the beginning of this article, TabGeoHack offers many more options and settings, way more than I am able to cover in this guest post. Here are just 2 examples:

  • You can use more than one instance (i.e. shape files) within one custom geocoding. This is what I did in my example posted above on Tableau Public. The custom geocoding includes the districts (Regierungsbezirke) and counties (Kreise). You can include both geographic instances by simply inserting one more role instance in your YAML file.
  • If you need to create more than one instance of custom geocoding (e.g. for different countries) and you want to switch between them, TabGeoHack offers the –activate option to do so. Please refer to the manual for further details.

So: please be aware of the fact that this post does not cover all the functionality of Richard’s tool.

This post is not intended to replace the instructions Richard provides in his manual. It was only supposed to be a heads-up and a step-by-step guide into TabGeoHack. Please read Richard’s manual thoroughly and you will find all the other features fully described.

International Issues

If you are working with a Windows language version other than English, you have to take care of a few things in order to make the process of creating your own filled maps with TabGeoHack as smooth as possible:

  • Change the Date and Number format settings of Windows to English (Start button | Control Panel | Clock, Language & Region | Format Tab and select English from the drop down list). This is necessary because the CSV created in step 8 is in English format, i.e. commas as the field separators and decimal points. In German and other European countries you have semicolons as field separators and a comma as the decimal separator. If you are not switching to the English number format, you will get problems during the import of the custom geocoding. 
  • If you are using a German or French version of Tableau, switch to the English user interface (Help | Choose Language). This is necessary because if you are using e.g. German as the interface language, Tableau expects to find fields called Breitengrad and Längengrad in the CSV. TabGeoHack, however, creates the CSV with Latitude and Longitude as the column headers. 
  • Since Tableau 7, the folder names in the Tableau Repository are in German if you are running a German version of Windows or in French if you are running a French version. The folder containing the custom geocoding is called Local Data in English, Lokale Daten in German and Données Locale in French.  

German users have the option to add the following line to the configuration file created in step 3:

tableau_country_code: DE

If you do so, you do not have to take care of the different folder names.

In French, however, Richard didn’t manage to get this working. The workaround is very simple. After you have done the import of the custom geocoding into Tableau and before your run TabGeoHack with the –shapes option, you rename Données Locale in your Tableau Repository to Local Data. Don’t forget to rename it back to Données Locale after TabGeoHack is finished and before you open Tableau again.

After you finished your work with TabGeoHack, you can turn back the number format and the Tableau interface language back to your own language.

You see: a few more little things to know and take care of if you are outside of the English language area, but no big deal. 

Warnings

TabGeoHack is in fact a hack. Brilliant, no doubt about it, but still a hack and totally unsupported:

  • Don’t expect any support from Richard if it doesn’t work for you. If you run into a problem, you can leave a comment on Richard’s Tableau Viz Talk post. Richard will keep an eye on the discussion going on there. No promise or commitment, though.
  • Don’t expect Tableau to support anything created using this tool. They probably would not even know what you are talking about.
  • Any future release of Tableau (even a minor one) could stop TabGeoHack altogether. Even a custom geocoding setup you had created previously. Don’t rely on your workbooks using TabGeoHack custom geocodings to work forever.
  • No warranty. Neither Richard nor I will be liable for any errors or problems arising from the use of TabGeoHack.

In a nutshell: use it with caution. If you are creating a Tableau workbook you are desperately relying on, refrain from using a custom geocoding created by TabGeoHack.

An Alternative: ShapeToTab

If you don’t want to use the custom geocoding produced by TabGeoHack, you can still fall back on the polygon workaround for filled maps with Tableau: Polygon Files Structure. The basic idea is adding polygon data of all geographic regions to the data source and using Polygon as the Mark Type and the polygon data field on the Path Shelf. Until version 6, this workaround has also been described in the manual. The only problem was getting one’s hands on the polygon data.

This problem is solved now. Almost as a by-product, Richard has provided another awesome tool: ShapeToTab.

The use of ShapeToTab is very easy:

  • Download ShapeToTab and unzip it to a new folder on your local drive
  • Download the GDAL library (see step 2 above, if you haven’t already for TabGeoHack)
  • Edit the configuration file called shapetotab.yml. This file only has one line in, specifying the path to the GDAL folder (comparable to step 3 above)
  • Copy the spatial data file (e.g. vg2500_krs.shp in the example above) to the ShapeToTab folder
  • Open the command prompt and type

shapetotab vg2500_krs.shp

The tool will then create 2 CSV files in the ShapeToTab folder, one with the feature data and one with the polygon points.

That’s it.

Last, but not least

A big time thank you very much goes to Richard Leeke for developing and sharing this fabulous tool. I have no clue how Richard managed to get this far with TabGeoHack. This is really impressive. I am feeling very honored that Richard let me have a sneak preview and to allow me to post about it on Clearly and Simply.

Many thanks, Richard!

If you find TabGeoHack useful for your own work, please drop Richard a line of thanks here or on his Tableau Viz Talk post.

Many thanks go also to Shawn Wallwork who thoroughly tested TabGeoHack before publishing and helped Richard to track down some bugs. Richard told me that Shawn also came up with a lot of very helpful ideas for improvement. Many thanks for your time Shawn.

What’s next?

The still missing parts of Sheel Bhatiani’s guest post series “Expand your Reach in Tableau with Parameters” and other Tableau and Excel articles will come soon.

Stay tuned.

Comments

148 responses to “Create Your Own Filled Maps in Tableau”

  1. Russian Sphinx Avatar

    Beautiful maps, I am a bit jealous, I work with data from Russia and I don’t think that I would be able to find so detailed geo data. There are many open data on state/region level.
    Maybe to create such maps it is worth to change country of interest lol 🙂

  2. Robert Avatar

    Russian Sphinx,
    many thanks for your comment.
    You do not have to move to another country. Did you notice the link to the Global Administrative Areas website?
    They provide ESRI shape files for Russia, too. I have to admit I do not know anything about Russia’s administrative areas, but the download includes 3 different levels:
    Level 1 are regions / territories / provinces (like Kamchatka, etc.)
    Level 2 are districts (like Adygey, Aga Buryat, Altay, etc.)
    Level 3 are rayons (like Malgobek, Mayskiy, etc.)
    So, at first sight, the data seems to be quite detailed. The zipped folder also contains CSV files which will help you to check which data is inside the shape files.
    I didn’t import the files using TabGeoHack (I just looked at the CSV files), but I can give it a try if you want me to.

  3. Robert Avatar

    Russian Sphinx,
    well, with my first comment I proved that – in fact – I don’t know anything about Russia’s
    geography or administrative regions.
    Now that I had a closer look at the data, I understood that what I called level 2 (and what I thought would be districts) are in fact regions too.
    So please disregard my statement about level 2 in my comment above. Sorry for the confusion.
    However, I used the shape files from Global Administrative Areas and managed to create this map of Russia using TabGeoHack and Tableau within less than 20 minutes:
    Map of Russia

  4. Kirdan Lees Avatar
    Kirdan Lees

    Love this idea but frustrating day getting this up and running. I have a nice New Zealand mapping setup using the shape to tab idea to get polygon maps at at regional and sub-regional level.
    But the detail I have on the maps (from Statistics New Zealand) works Tableau pretty hard so I’m keen to use Richard’s TabGeoHack to get something more user friendly.
    All the files seem to run through OK. I can use the info options to see what’s going on. The roles command seems to create a nice csv of the regions and I can create the shape files. I can import the geocoding but simply can’t connect up the dots.
    Interested if others have similar experiences or if anyone can see anything wrong with the yml file I have. Can appreciate this stuff is frontier but extremely useful to communicating economics if I can crack this. And hats off to people that can create work arounds like this. Awesome.
    Kirdan

  5. Robert Avatar

    Kirdan,
    thanks for your message. Can you send me your YAML file and the link where you got your shape files from by email (email-link see on the left side of the blog)?
    I am everything else than an expert on Richard’s tool, but I managed to get this working with different shape files of different countries, so maybe I can find what’s wrong with your configuration file.

  6. Richard Leeke Avatar
    Richard Leeke

    Just a couple of other thoughts beyond what I said on your Viz Talk comment.
    It almost sounds as if the whole process may have worked but you just haven’t assigned the custom geocoding quite right – or haven’t got the geocoded field on the view quite right. Or something like that.
    The key to seeing what’s happening is really to see your tabgeohack.log file or a sample workbook, as I said on Viz Talk, though.
    I’m sure we’ll get this sorted really quickly. Once we have, you will probably still have a bit of work to do on simplifying the boundaries to get the workbook nice and responsive – even little old NZ has enough details in it’s spatial boundary definitions to make Tableau work quite hard.
    A couple of things that could help with that.
    Firstly, make sure you have the low resolution boundary files from Statistics New Zealand – the 2011 Census Based set is what I have been using (ESRI Census Based 2011_NZTM.zip from https://www3.stats.govt.nz/digitalboundaries/census/ESRI%20Census%20Based%202011_NZTM.zip) – they have already been generalised down to 20 metre accuracy.
    For most purposes you will probably want to simplify those further. Both tabgeohack and shapetotab let you do that, but there’s some trial and error involved. As I’ve already done that for these roles:
    AreaUnit
    CommunityBoard
    ElectoralDistrict
    Meshblock
    MaoriElectoralDistrict
    RegionalCouncil
    TerritorialAuthority
    UrbanArea
    Ward
    so I’d be happy to pass you a copy of my YAML file to get you going on that if you want.
    Richard

  7. Richard Leeke Avatar
    Richard Leeke

    Whoops – as well as succeeding in messing up the format of the reply (by trying to drag the text box bigger – sorry Robert!) I also managed to put a closing bracket on the end of the URL – so clicking on that donload link won’t work. Just edit the bracket off in the browser address bar.

  8. Richard Leeke Avatar
    Richard Leeke

    It was a bug. Fixed in version 1.0.6 available now.

  9. Russian Sphinx Avatar

    Robert,
    I did this map of Kazakhstan in Tableau 6.1 http://russiansphinx.blogspot.com/2011/10/virtual-kazakhstan.html
    Links to tutorial and everything that I used are below. I am afraid that the method I followed will create “too heavy file”, if I used it for counties in Russia. What a country, everything is big, even files lol
    It is my mistake, I did not write properly, I just wanted to say that in Russia it is hard to find open data for counties. For example unemployment rate by county. There are some data for example I found few data sets for Moscow’s districts.
    The map of Germany is perfect, still there is Eastern and Western Germany 🙁

  10. jack gallastegui Avatar
    jack gallastegui

    Thanks for the post – it’s exactly what i’ve been looking for.
    However, the link to geotabhack no longer works and i can therefore not download it – could you re-post it or send it to me?
    this would be very much appreciated

  11. Robert Avatar

    Jack,
    thanks for your comment. I just tried the download links and they worked for me. Maybe an issue caused by a security setting on your computer or in your environment?
    Anyway, I will send you the zipped folder by email in a minute.

  12. Daan (Infotopics) Avatar

    super! 1 hour work, and it works great!

  13. Juracy Avatar
    Juracy

    Hi there, I was folloing the step by step and on the part tabgeohack –info germany.yml
    I got that error:
    The ordinal 2630 could not be located in the dynamic link library LIBEAY32.dll
    Does anyone have same issue?

  14. Robert Avatar

    Juracy,
    Many thanks for your comment. There seems to be a problem with posting comments at the moment. Richard was kind enough to answer your question in almost no time (much appreciated, Richard!), but he couldn’t post it here, so he asked me to do to this for him:
    A quick Google on that error message shows it’s a problem that can happen in lots of applications.
    It seems to be caused because you have some other (badly behaved) application installed on your machine which has installed a different version of that DLL into the Windows system32 directory – which causes the GDAL library used by tabgeohack to pick up the wrong version. The thread I just read talks about a wireless driver doing it, but it could be anything in your case.
    You could try following the suggestions in this thread:
    http://eai.ittoolbox.com/groups/technical-functional/tibco-l/the-ordinal-3212-could-be-located-in-the-dynamic-link-library-libeay32dll-580474
    Or just Google on the error message and read some of the other threads. Options seem to be finding the rogue application and seeing if there is a newer version which uses the version GDAL wants or moving or deleting the conflicting version out of the system32 directory.

  15. Juracy Avatar
    Juracy

    Hi Robert and Richard.
    Thank you for your help, it work great now.The conflicting version was cause me some headache, but now I able to finish your step-by-step and Wooooww, this is great.
    I live in Brazil and use you post to do my fillep map in Tableau for my country, nice work Robert, thank you.
    A big thank you very much goes to Richard Leeke for developing and sharing this fabulous tool, this is fantastic.

  16. Richard Leeke Avatar
    Richard Leeke

    Glad you are finding it useful Juracy.
    As a matter of interest, what did you have to do to get past your DLL conflict? Did you find what the conflicting application was? (That might just help someone else who runs into the problem in the future.)

  17. Juracy Avatar
    Juracy

    Richard you right,
    I just went to C:\WINDOWS\system32 and made a backup of LIBEAY32.dll file (I don’t know how to check which application was), after that I copy sample file from C:\GDAL Mapserver\bin to C:\WINDOWS\system32.I dit that because I realize my version of LIBEAY32.dll is from 2003 and the same file from C:\GDAL Mapserver\bin folder is from 2010.
    I did try again the command line tabgeohack –info germany.yml and work just fine.
    Thank you again

  18. Shawn Wallwork Avatar
    Shawn Wallwork

    Hey Robert, thanks for the shout-out! (Just noticed it.)
    –Shawn

  19. Carlos Martinez Avatar
    Carlos Martinez

    How could you add more than 1 country cities to the map? I have been trying to add 6 central american countries one by one, but I can just add one. Is it possible to add more than one?

  20. Carlos Martinez Avatar
    Carlos Martinez

    It was so easy… just add the 6 *.shp as different layers in the *.yml!!

  21. Ilya Kuzminov Avatar

    Dear Robert and Richard,
    Thank you for the tool and the detailed step-by-step instructions. Everything works fine, and I got all the 2314 municipalities of Russia into Tableau.
    However, there is a real problem with Tableau’s stubborn reluctance to show geographic entities’ borders in a symbol map mode.
    See Example:
    http://46.39.227.52:8000/views/Municipalities_Russia_Perm_Test_1/Municipalities_Russia_Perm?:embed=y
    User: Interactor; Password: Interactor.
    It is acceptable that default Tableau’s sub-country borders cannot be seen at certain zoom levels (because tiles are used). But when a user feeds custom geodata in Tableau (for instance, using TabGeoHack), he would expect to see the shapes’ borders at every zoom level. After all, in that case vector shapes are used, not png-tiles.
    Unfortunately, trying to google for an anwer, I haven’t found any forum threads on the subject, only an official Talbeau’s article (as always, too brief) mentioning that “Many layers are only visible at specific zoom levels”.
    Could you please help me find a way to set visibility options of the shapes’ borders in Tableu? Or just to make them always visible, regardless of zoom level and map type.

  22. Andy Avatar
    Andy

    Thanks for this walkthrough, I was planning on trying this, but before i get started is this only relevant to the full tableau desktop software or does this also work for tableau public (v7.0.7)?
    Thanks, Andy.

  23. Robert Avatar

    Andy,
    I am working with Tableau Desktop, so I am not 100% sure, but since Tableau Public has the full functionality of Tableau Desktop (except for the limitation to max. 100,000 rows and the fact that you can save workbooks only to the Tableau Public Server), TabGeoHack should work with Tableau Public too.

  24. Andy Avatar
    Andy

    Thanks Robert for the quick reply. It looks like i can do the shapefile alternative method but the shapetotab is complaining about the shapefiles i have… so off to try find alternatives and will let you know if it works.

  25. Robert Avatar

    Andy,
    before you are investing too much time into this: Please be careful, because the polygon approach for creating your own filled maps is based on a big amount of data.
    Example: Germany’s zipcode 2 (first 2 digits of the 5 digit zipcode) divides Germany into 95 regions. The corresponding polygon file has almost 180,000 data points and will already exceed the 100,000 data rows limit of Tableau Public. It depends on your data / map, but it is very likely that the polygon data will be too big to save it to the Tableau Public Server.

  26. Chris Avatar
    Chris

    Hmm…..
    This seems like just what I am looking for. I can get the first step to work just fine.
    OGRFeature(USA_adm1):2
    ID_0 (Integer) = 240
    ISO (String) = USA
    NAME_0 (String) = United States
    ID_1 (Integer) = 28
    NAME_1 (String) = Nebraska
    NL_NAME_1 (String) = (null)
    VARNAME_1 (String) = NE|Nebr.
    TYPE_1 (String) = State
    ENGTYPE_1 (String) = State
    POLYGON : 1200 points
    OGRFeature(USA_adm1):3
    ID_0 (Integer) = 240
    ISO (String) = USA
    NAME_0 (String) = United States
    ID_1 (Integer) = 29
    NAME_1 (String) = Nevada
    NL_NAME_1 (String) = (null)
    VARNAME_1 (String) = NV|Nev.
    TYPE_1 (String) = State
    ENGTYPE_1 (String) = State
    POLYGON : 1025 points
    When I add ID_1, and NAME_1 to my YML file and run it, I get an error message:
    C:\TabGeoHack\TabGeoHack>tabgeohack –roles us.yml
    Generating custom geocoding files…
    More than one unique ID field defined for role: State
    at tabgeohack.pl line 530
    Any help on where to begin troubleshooting this would be helpful. At first, I thought it was because the role_name I declared (State) was the same as the roles at the bottom in the Exclude area of the YML. However, that was not the case, as I tried running it with role_name changed State1. This resulted in the same error, only the role was changed to State1.
    Thoughts?

  27. Richard Avatar
    Richard

    You must have got unique_id: true specified for more than one field in the yml file. You need to specify just a single field which uniquely identifies each row in the file , or if the file does not have a single field like that, don’t specify one at all and lleave tabgeohack to generate a unique id number.
    In your case it sounds as if NAME_1 is state name and may be unique – though I’m not sure why you would be needing to load state boundaries – tableau already has those.

  28. Chris Avatar
    Chris

    At first I thought, aha! that was it, but no. As to your question, why I would want to do this? Well, here’s the problem I am trying to solve. I have zip data for locations across the US. Map works fine to display that data. Now, the request has come down to color the map by our regions. These regions are defined by the boundaries of states. So, my thinking is that I would pull the state files and merge the points generated to make my regions. Is there a simpler way to do this that I am missing?

  29. Richard Leeke Avatar

    The easiest way for me to help solve the unique ID issue is if you can let me have a copy of your YAML file to have a look at. I don’t think there’s a way to attach files here, so just email it to me at:
    richard(dot)leeke(at)equinox(dot)co(dot)nz
    As to the question of merging your ZIP data up to your region level, there are a few ways you might be able to do that. Certainly it is possible to create custom shapes by merging shapes – but you’ll need a GIS tool or a spatial database in order to do it, and it’s certainly not trivial. If you do it that way, you would then need to export the merged shapes as a “regions” shape file, which you could then load using tabgeohack.
    Another approach you can take is to do the grouping in Tableau. If you structure your data appropriately, you can calculate numbers at the regional level but display it at the State level – colouring all States for a Region the same colour. Generally you will need to use table calculations in order to get the numbers how you want them. If you turn off borders that can give a pretty effective display and is an awful lot simpler than going down the route of merging your shape files.
    I discussed a bit more about how to do that and posted a sample workbook in this Tableau forum thread: http://community.tableausoftware.com/thread/117038
    I do have an item on the to do list for tabgeohack to provide support for merging – but it has been sitting there untouched for 8 months and I’m unlikely to get to it any time soon, so I wouldn’t hold your breath.

  30. Juracy Avatar
    Juracy

    Robert and Richard,
    Now I try to get a city with some zip code area by using the second command line :
    tabgeohack –ROLES DisRM07_SAO_PAULO.yml
    and get a error message “C:\TabGeoHack>tabgeohack –ROLES DisRM07_SAO_PAULO.yml
    Generating custom geocoding files…
    Can’t transform coordinates, source layer has no coordinate system. Use -s_srs to set one.”

    Do you guys have any thoughts??
    The first step work fine as you can see bellow:
    C:\TabGeoHack>tabgeohack –info DisRM07_SAO_PAULO.yml
    Displaying shapefile metadata using ogrinfo…
    SAO_PAULO_BAIRROS
    =================
    INFO: Open of `C:\TabGeoHack\DisRM07_SAO_PAULO\DisRM07.
    using driver `ESRI Shapefile’ successful.
    Layer name: DisRM07
    Geometry: Polygon
    Feature Count: 5
    Extent: (-47.208125, -24.063483) – (-45.694801, -23.182
    Layer SRS WKT:
    (unknown)
    ID: Integer (10.0)
    MUN_SIGLA: String (8.0)
    MUN_NOME: String (32.0)
    COD_IBGE: Real (12.0)
    SIGLA: String (5.0)
    NOME: String (32.0)
    NOMECAPS: String (32.0)
    POP_2000: Real (12.0)
    DENS_DEMO: Real (12.0)
    AREA_KM2: Real (12.6)
    OGRFeature(DisRM07):0
    ID (Integer) = 235
    MUN_SIGLA (String) = MJC
    MUN_NOME (String) = MOJI DAS CRUZES
    COD_IBGE (Real) = 353060725
    SIGLA (String) = TPB
    NOME (String) = Taiaþupeba
    NOMECAPS (String) = TAIACUPEBA
    POP_2000 (Real) = 4561
    DENS_DEMO (Real) = 58
    AREA_KM2 (Real) = 78.351753
    POLYGON : 387 points
    OGRFeature(DisRM07):1
    ID (Integer) = 230
    MUN_SIGLA (String) = MJC
    MUN_NOME (String) = MOJI DAS CRUZES
    COD_IBGE (Real) = 353060710
    SIGLA (String) = BRC
    NOME (String) = Brßs Cubas
    NOMECAPS (String) = BRAS CUBAS
    POP_2000 (Real) = 91929
    DENS_DEMO (Real) = 2475
    AREA_KM2 (Real) = 37.154804
    POLYGON : 365 points
    OGRFeature(DisRM07):2
    ID (Integer) = 232
    MUN_SIGLA (String) = MJC
    MUN_NOME (String) = MOJI DAS CRUZES
    COD_IBGE (Real) = 353060705
    SIGLA (String) = MJZ
    NOME (String) = Moji das Cruzes
    NOMECAPS (String) = MOJI DAS CRUZES
    POP_2000 (Real) = 151668
    DENS_DEMO (Real) = 562
    AREA_KM2 (Real) = 270.106781
    POLYGON : 943 points
    OGRFeature(DisRM07):3
    ID (Integer) = 233
    MUN_SIGLA (String) = MJC
    MUN_NOME (String) = MOJI DAS CRUZES
    COD_IBGE (Real) = 353060707
    SIGLA (String) = BBU
    NOME (String) = Biritiba-Ussu
    NOMECAPS (String) = BIRITIBA USSU
    POP_2000 (Real) = 4763
    DENS_DEMO (Real) = 68
    AREA_KM2 (Real) = 69.980385
    POLYGON : 393 points

  31. Richard Leeke Avatar

    Hi Juracy
    The error message means that the shapefile does not contain the details which define what coordinate reference system is used to define the locations, so you will need to provide an extra option in the yml file to specify that. The error message you got is actually slightly misleading because it is directly from an underlying utility in the GDAL libraries which I used, so the -s_srs option mentioned in the message is an option for the ogr2ogr utility I used, not an option for tabgeohack.
    You need to add a ‘source_crs’ line to your yml file. If you look in the last section of the word document you will find where to put that in the yml. I don’t know for certain what coordinate reference system your file will be using, but I can see from the details you posted above that it is using a geogrpagic CRS (i.e. it is expressed in lat/long), so it is quite probably WGS84 (which needs to be specified as ‘EPSG:4326’). Even if it isn’t the correct CRS, the results may well be close enough.
    It wants to look like this, up near the top of the file.
    source_crs: EPSG:4326
    Let me know how you get on.
    Richard

  32. Juracy Americo Avatar
    Juracy Americo

    Hi Richard, thank you.
    I did what you said and worked fine, as you can see below:
    C:\Data\Tableau\TabGeoHack>tabgeohack –roles DisRM07_SAO_PAULO.yml
    Generating custom geocoding files…
    DisRM07… (162)
    Done in 1 seconds
    However, when I try to run tabgeohack –shapes DisRM07_SAO_PAULO.yml I got a new error as you can see below:
    C:\Data\Tableau\TabGeoHack>tabgeohack –shapes DisRM07_SAO_PAULO.yml
    Generating shapes…
    Use of uninitialized value $text in concatenation (.) or string at tabgeohack.pl
    line 1624.
    Use of uninitialized value $text in concatenation (.) or string at tabgeohack.pl
    line 1625.
    at tabgeohack.pl line 819
    Could you please help me here as well?
    Thank you in advanced.

  33. Richard Leeke Avatar

    Hi Juracy
    Well that one looks like it must be a bug of mine – I’ll take a look. It’s likely that it’s some particular condition in your shapefile, since nobody else has reported this. If I can’t spot what is happening I may need to get you to send me a copy of your YAML file and your shape file so I can reproduce the issue.
    Richard

  34. Richard Leeke Avatar

    I had a quick look and can’t immediately spot what is happening. I really need to see the YAML file and probably the shapefile. I’ll contact you offline to work out a way to get those from you.

  35. Richard Leeke Avatar

    Closing off this issue, this is now working for Juracy, following updating to the latest version of tabgeohack (1.0.11) and changing Date and Number format settings to Windows English (as per Robert’s advice in the article above). I’m 99% sure it will have been the number format issue.
    I’ll try to improve the error handling for that issue sometime…

  36. Juracy Avatar
    Juracy

    Hi Richard,
    I’m working with some related shapefiles, which contains all shp, dbf, shx, prj files. I noticed that the shp files have more than one.
    And they’re structured as follows:
    UF.shp = States
    MU.shp = Municipalities and Districts
    MI.shp = Micro-regions
    ME.shp = Meso-regions
    Each with its corresponding dbf, shx, prj file.
    My question is, I can create my custom map using all files in a single YML or have to create a single YML for each?
    Thank you in advance

  37. Robert Avatar

    Juracy,
    you can include different shape files in one YML configuration file. Have a look at the tabgeohack manual Richard provides.
    The example Richard uses in the manual has 2 roles (Porirua_Meshblock and Porirua_Tsunami) and 2 different shape files (porirua_mb_wgs84.shp and porirua-tsunami-evacuatio.shp).

  38. Juracy Avatar
    Juracy

    Hi Robert, you are absolutely right, thank you for the quick replay

  39. Bonurbe Avatar

    Hi there and thanks for the great tutorial.
    I’m having a problem at the shapes creation stage where I get this result “Custom geocoding directory bot found at C:\…..
    You must import custom geocoding files created with the –roles option before running the –shapes option at tabgeohack.pl line 233”.
    Not sure what I’m doing wrong, because I can create the roles, have the CSV file with the data inside and the fields created and imported the custom geocoding into Tableau.
    The only thing I can think of is the roles. I’ve added the same ones that your example above but maybe I shouldn’t have.
    My shapefile is a world map with country polygons.
    Thanks in advance.

  40. Robert Avatar

    Bonurbe,
    thanks for your comment. I am not sure why you want to create a world map by countries since Tableau is providing this as a built-in filled map, but maybe you are just using this example to try the technique.
    I agree with you, the problem is probably the definition of the roles in the YAML file. If you used the example I provided above, I guess you took out the purge_role_exceptions, right?
    Can you post your YAML file and shape files somewhere for download?

  41. Robert Avatar

    Bonurbe,
    I forwarded your comment to Richard and asked for his advice.
    Richard suspects you may have set the wrong Tableau Repository path (or not updated it after downloading the example). Open the tabheohack.yml and check if “tableau_repository_path” is set to the correct path.

  42. Bonurbe Avatar

    Robert,
    I just sent you a shared Dropbox folder with the yml files, some screen shots of the steps and the shapefiles.
    Any feedback would be greatly appreciated!
    Thanks,
    Bonurbe

  43. Robert Avatar

    Bonurbe,
    I had a very quick look at your files and I think the problem is what Richard already suspected: the path to your Tableau Repository in the TabGeoHack.yml.
    You have the following statement:
    tableau_repository_path: C:\Users\wb278875\Desktop\TabGeoHack\My Tableau Repository
    It should be something like this:
    tableau_repository_path: C:\Users\wb278875\Documents\My Tableau Repository
    To get the exact path on your computer, open Tableau and click on “File” and “Repository Location” and it will show the full path of the current location in the Select Folder dialogue window. Use this path in your tabgeohack.yml and try again.

  44. Bonurbe Avatar

    Indeed! Now it works!
    Thank you so much for your quick answer and support.

  45. James Avatar
    James

    Hello All
    I tried to apply this solution and came across an error related to the file ‘LIBEAY32.dll’ which after searching turned out to be a local issue on my computer. To solve this I’ve put Tableau onto another machine and successfully followed the steps above to allow filled provinces in Spain.
    My question is can I implement this solution on my original computer just by copying across the files referenced by Tableau on the other computer now they are all generated? Which files / directories would these be?
    Thanks for any help and the useful tutorial,
    James

  46. Robert Avatar

    James,
    I never tried if this will really work, but it is well worth a try:
    1. Remove the custom geocoding on your computer (Map | Geocoding | Remove Custom Geocoding)
    2. Close Tableau
    3. Create a folder called Local Data in the Tableau Repository folder on your computer
    4. Copy all files in the folder Local Data from the other machine to the same folder on your computer
    5. Open Tableau again and check out if it is working.
    As I said, I never tried, so I can’t guarantee anything…

  47. James Avatar
    James

    Hi Robert
    Thanks for the help, in summary this didn’t work for me. I think this was something to do with the differences between 32 bit and 64 bit systems. (Possibly the different paths to ‘My Documents’ or maybe the differing programs on each machine and the local versions of ‘LIBEAY32.dll’)
    In the end I did manage to get it to work, and although I can’t pin it down to a specific action here are the actions I took in case this helps anybody else out:
    1) Reinstall Tableau
    2) Follow tutorial from scratch
    3) In step 5 instead of accessing DOS as stated, I clicked through the ‘SDKShell.bat’ link. This popped up the message ‘Setting the environment for using the GDAL and Mapserver tools’, maybe this made the difference.
    As stated, I’m not sure what if anything solved my issue, but see some options to try above. Thanks again Robert, I appreciate the reply.
    James

  48. Robert Avatar

    James,
    I am glad to hear that it is working for you now.
    Many thanks for taking the time to describe how you solved the issue. I never had any problems with the technique described above, but maybe someone else will encounter the same or a similar roadblock and will certainly appreciate your comment. Thanks.

  49. Ragha Avatar
    Ragha

    Hello,
    I was trying to create custom regions, which are basically a combination of zip codes. I understand from the research that i have done, that this is not a simple thing to do in Tableau. Can you please let me know if this is possible. If so, how can it be achived?
    Thanks,
    Ragha.

  50. Robert Avatar

    Ragha,
    thanks for your comment and sorry for the late reply.
    I do not know of an easy way to do this directly in Tableau. This doesn’t mean it isn’t possible. It is just above my head. I guess the most promising approach would be to create shape files for your custom regions using a GIS tool and to import those shape files with Richard’s TabGeoHack.

  51. Karsten Avatar

    Hello Robert,
    I’m trying to install TabGeoHack with using Tableau PUBLIC. So that’s probably why I don’t have any “Tableau Repository” on my system – right? What else can I do instead?
    I hope you could help me.
    Thanx
    Karsten

  52. Robert Avatar

    Karsten,
    I never used Tableau Public since I am a proud owner of a Tableau Desktop license. I published on Tableau Public, but via my Desktop version. Anyway, I assume Tableau creates the same Tableau Repository for Tableau Public, too. From what I have seen on your Twitter account, you are apparently German. Thus, I suspect it could have to do with the German version and the different name of the repository folder in the German installation. Just open Tableau and click on File (Datei) and Repository Location (Repository-Speicherort) and it shows you at the top of the dialogue window the current location. This is where you should find the folder “Lokale Daten”.
    Please let me know if this does not solve the issue.

  53. Karsten Avatar

    Robert,
    now I’m a bit further. In Tableau Public the Repository Location is in the same place, but, however, you can’t navigate there through a dialogue window (it’s not unter “File” etc.).
    Then I followed successfully all the steps up to step 9 – to assert that within Tableau PUBLIC you are not allowed to import Custom Geocoding. You just dont’t have it in the menu … Do you know any alternative ways?
    Thanx
    Karsten

  54. Robert Avatar

    Karsten,
    I wasn’t aware of the fact that Tableau Public does not allow to import Custom Geocoding. You can upload a workbook using Custom Geocoding to Tableau Public as long as you are using Tableau Desktop, but – what I have now seen in the Tableau Forums – you apparently can’t import Custom Geocoding if you have only Tableau Public installed on your machine.
    Using the alternative workaround (the polygon approach) is probably only a theoretical option, since Tableau Public allows data sources only up to 100,000 rows and this is not enough in most cases: e.g. the polygon data for Germany by the first 2 digits of the zip-codes (“PLZ2”) has almost 180,000 rows…
    In a nutshell: the only option I see for you is to buy a Tableau Desktop license. I know, this is probably not what you wanted to hear, but I do not see another way. Sorry.

  55. Kiran Masapari Avatar
    Kiran Masapari

    I noticed that the download links for TabGeoHack & ShapeToTab are not working. Could you update these links or point me to the right location?

  56. Robert Avatar

    Kiran,
    I just double-checked and both links are still working for me so I guess this is a problem with your firewall or company security settings.

  57. Russian Sphinx Avatar

    Dear Karsten,
    To solve the problem in Tableau Public you need to use this tutorial written by Joe Mako http://joemako.tumblr.com/post/3289363623/preprocess-shapefile-for-tableau-tutorial-video
    To simplify polygons I use QGIS, I don’t use the online tool suggested by Joe.
    Everything works well, just check this tiny map of Berlin was done according to the tutorial: http://russiansphinx.blogspot.com/2013/08/immigration-map-of-berlins.html
    There is one more possibility, here you will find the tutorial: http://community.tableausoftware.com/thread/116369?start=0&tstart=0
    I have many years of experience in working with Tableau Public 🙂 so I know many tricks 🙂

  58. Chris Avatar
    Chris

    Hello,
    Thanks for posting this, looks great.
    One quick question, I want to create a polygon map using Canadian FSAs (postal code polygons) and the only data I can find does not include x&Y’s for the entire ploygons, just the centroid of each one. Does this tool require coords for the entire shape for each polygon?
    Thanks

  59. Robert Avatar

    Chris,
    the technique of creating filled maps in Tableau using polygons requires indeed all coordinates (latitudes and longitudes) of the regions and the correct path (i.e. point order).
    Richards’s ShapeToTab tool transforms ESRI Shape Files into a CSV file with all necessary information. You can use this CSV file directly as the data source of your Tableau workbook.
    Canada Statistics provides the Shape Files of Canada’s FSA for free:

    Statistics Canada Boundary Files

    I just tried. It is a huge shape file and ShapeToTab needed quite a while (almost 30 minutes on my machine) to generate the CSV, but it worked like a charm. Well, ShapeToTab worked like a charm. In Tableau, it worked fine as long as I filtered the data. When I tried to display the entire map of Canada with all FSAs, I was persistently receiving an Out of Memory error (again: on my machine). Just to let you know.

  60. Anja Avatar
    Anja

    Hi,
    I downloaded a shape-file from the homepage from the australian bureau of statistics. Now I got stuck at Step8. When I do the command –roles it says it can’t find “Name_2” but I got this from –info. I tried with ID_2 but it was the same error. I copied my way so far below and you can see at the bottom the error when I tried the command –roles. Did someone have this problem or can me tell what I’ve done wrong?
    Many thanks!
    Anja
    C:\TabGeoHack>tabgeohack –info australia.yml
    Displaying shapefile metadata using ogrinfo…
    Areas
    =====
    INFO: Open of `C:\TabGeoHack\Australia\AUS_adm2.shp’
    using driver `ESRI Shapefile’ successful.
    Layer name: AUS_adm2
    Geometry: Polygon
    Feature Count: 5
    Extent: (112.919724, -55.116943) – (159.256088, -9.221099)
    Layer SRS WKT:
    GEOGCS[“GCS_WGS_1984”,
    DATUM[“WGS_1984”,
    SPHEROID[“WGS_84”,6378137.0,298.257223563]],
    PRIMEM[“Greenwich”,0.0],
    UNIT[“Degree”,0.0174532925199433]]
    ID_0: Integer (9.0)
    ISO: String (3.0)
    NAME_0: String (75.0)
    ID_1: Integer (9.0)
    NAME_1: String (75.0)
    ID_2: Integer (9.0)
    NAME_2: String (75.0)
    NL_NAME_2: String (75.0)
    VARNAME_2: String (150.0)
    TYPE_2: String (50.0)
    ENGTYPE_2: String (50.0)
    OGRFeature(AUS_adm2):0
    ID_0 (Integer) = 14
    ISO (String) = AUS
    NAME_0 (String) = Australia
    ID_1 (Integer) = 6
    NAME_1 (String) = Queensland
    ID_2 (Integer) = 656
    NAME_2 (String) = Livingstone – Pt B
    NL_NAME_2 (String) = (null)
    VARNAME_2 (String) = (null)
    TYPE_2 (String) = Shire
    ENGTYPE_2 (String) = Shire
    MULTIPOLYGON : 152 geometries:
    POLYGON : 60 points
    POLYGON : 42 points
    POLYGON : 25 points
    POLYGON : 34 points
    POLYGON : 16 points
    POLYGON : 74 points
    POLYGON : 24 points
    POLYGON : 46 points
    POLYGON : 84 points
    POLYGON : 15 points
    POLYGON : 38 points
    POLYGON : 16 points
    POLYGON : 79 points
    POLYGON : 76 points
    POLYGON : 19 points
    POLYGON : 40 points
    POLYGON : 567 points
    POLYGON : 23 points
    POLYGON : 57 points
    POLYGON : 32 points
    POLYGON : 240 points
    POLYGON : 35 points
    POLYGON : 19 points
    POLYGON : 14 points
    POLYGON : 20 points
    POLYGON : 9 points
    POLYGON : 24 points
    POLYGON : 13 points
    POLYGON : 66 points
    POLYGON : 47 points
    POLYGON : 33 points
    POLYGON : 44 points
    POLYGON : 36 points
    POLYGON : 31 points
    POLYGON : 78 points
    POLYGON : 34 points
    POLYGON : 19 points
    POLYGON : 44 points
    POLYGON : 70 points
    POLYGON : 33 points
    POLYGON : 100 points
    POLYGON : 28 points
    POLYGON : 12 points
    POLYGON : 33 points
    POLYGON : 50 points
    POLYGON : 47 points
    POLYGON : 44 points
    POLYGON : 27 points
    POLYGON : 21 points
    POLYGON : 88 points
    POLYGON : 125 points
    POLYGON : 16 points
    POLYGON : 17 points
    POLYGON : 230 points
    POLYGON : 29 points
    POLYGON : 15 points
    POLYGON : 34 points
    POLYGON : 19 points
    POLYGON : 51 points
    POLYGON : 80 points
    POLYGON : 12 points
    POLYGON : 56 points
    POLYGON : 96 points
    POLYGON : 29 points
    POLYGON : 35 points
    POLYGON : 18 points
    POLYGON : 51 points
    POLYGON : 56 points
    POLYGON : 50 points
    POLYGON : 14 points
    POLYGON : 37 points
    POLYGON : 26 points
    POLYGON : 30 points
    POLYGON : 18 points
    POLYGON : 195 points
    POLYGON : 208 points
    POLYGON : 168 points
    POLYGON : 19 points
    POLYGON : 29 points
    POLYGON : 625 points
    POLYGON : 32 points
    POLYGON : 100 points
    POLYGON : 20 points
    POLYGON : 14 points
    POLYGON : 24 points
    POLYGON : 24 points
    POLYGON : 25 points
    POLYGON : 1823 points
    POLYGON : 14 points
    POLYGON : 18 points
    POLYGON : 23 points
    POLYGON : 32 points
    POLYGON : 24 points
    POLYGON : 15 points
    POLYGON : 37 points
    POLYGON : 21 points
    POLYGON : 62 points
    POLYGON : 23 points
    POLYGON : 73 points
    POLYGON : 34 points
    POLYGON : 59 points
    POLYGON : 14 points
    POLYGON : 50 points
    POLYGON : 17986 points
    POLYGON : 720 points
    POLYGON : 102 points
    POLYGON : 41 points
    POLYGON : 1132 points
    POLYGON : 43 points
    POLYGON : 40 points
    POLYGON : 37 points
    POLYGON : 19 points
    POLYGON : 9 points
    POLYGON : 14 points
    POLYGON : 19 points
    POLYGON : 32 points
    POLYGON : 75 points
    POLYGON : 19 points
    POLYGON : 128 points
    POLYGON : 23 points
    POLYGON : 48 points
    POLYGON : 16 points
    POLYGON : 37 points
    POLYGON : 58 points
    POLYGON : 53 points
    POLYGON : 28 points
    POLYGON : 24 points
    POLYGON : 236 points
    POLYGON : 29 points
    POLYGON : 123 points
    POLYGON : 21 points
    POLYGON : 97 points
    POLYGON : 21 points
    POLYGON : 22 points
    POLYGON : 24 points
    POLYGON : 29 points
    POLYGON : 21 points
    POLYGON : 18 points
    POLYGON : 29 points
    POLYGON : 316 points
    POLYGON : 17 points
    POLYGON : 199 points
    POLYGON : 38 points
    POLYGON : 18 points
    POLYGON : 27 points
    POLYGON : 21 points
    POLYGON : 202 points
    POLYGON : 33 points
    POLYGON : 34 points
    POLYGON : 52 points
    POLYGON : 30 points
    POLYGON : 152 points
    OGRFeature(AUS_adm2):1
    ID_0 (Integer) = 14
    ISO (String) = AUS
    NAME_0 (String) = Australia
    ID_1 (Integer) = 6
    NAME_1 (String) = Queensland
    ID_2 (Integer) = 657
    NAME_2 (String) = Lockhart River
    NL_NAME_2 (String) = (null)
    VARNAME_2 (String) = (null)
    TYPE_2 (String) = Shire
    ENGTYPE_2 (String) = Shire
    MULTIPOLYGON : 18 geometries:
    POLYGON : 16 points
    POLYGON : 22 points
    POLYGON : 23 points
    POLYGON : 118 points
    POLYGON : 251 points
    POLYGON : 24 points
    POLYGON : 20 points
    POLYGON : 12 points
    POLYGON : 104 points
    POLYGON : 34 points
    POLYGON : 55 points
    POLYGON : 61 points
    POLYGON : 59 points
    POLYGON : 33 points
    POLYGON : 20 points
    POLYGON : 68 points
    POLYGON : 19 points
    POLYGON : 4304 points
    OGRFeature(AUS_adm2):2
    ID_0 (Integer) = 14
    ISO (String) = AUS
    NAME_0 (String) = Australia
    ID_1 (Integer) = 6
    NAME_1 (String) = Queensland
    ID_2 (Integer) = 658
    NAME_2 (String) = Logan
    NL_NAME_2 (String) = (null)
    VARNAME_2 (String) = Logan Bal
    TYPE_2 (String) = City
    ENGTYPE_2 (String) = City
    POLYGON : 160 points
    OGRFeature(AUS_adm2):3
    ID_0 (Integer) = 14
    ISO (String) = AUS
    NAME_0 (String) = Australia
    ID_1 (Integer) = 6
    NAME_1 (String) = Queensland
    ID_2 (Integer) = 659
    NAME_2 (String) = Loganholme
    NL_NAME_2 (String) = (null)
    VARNAME_2 (String) = (null)
    TYPE_2 (String) = Unknown
    ENGTYPE_2 (String) = Unknown
    POLYGON : 257 points
    OGRFeature(AUS_adm2):4
    ID_0 (Integer) = 14
    ISO (String) = AUS
    NAME_0 (String) = Australia
    ID_1 (Integer) = 6
    NAME_1 (String) = Queensland
    ID_2 (Integer) = 660
    NAME_2 (String) = Loganlea
    NL_NAME_2 (String) = (null)
    VARNAME_2 (String) = (null)
    TYPE_2 (String) = Unknown
    ENGTYPE_2 (String) = Unknown
    POLYGON : 391 points
    ======================
    Done in 7 seconds
    C:\TabGeoHack>tabgeohack –roles australia.yml
    Generating custom geocoding files…
    Can’t find required field Name_2 in C:\TabGeoHack\Australia\AUS_adm2.shp at tabg
    eohack.pl line 609

  61. Robert Avatar

    Anja,
    I couldn’t find the AUS_adm2 shape files on the ABS website, so I wasn’t able to check for myself. However, what I can see from the error message, it probably is a spelling problem: you have to define the field names in the YML file exactly the same way they are defined in the shape file (case sensitive), i.e. NAME_2 instead of Name_2.

  62. Graham Macleod Avatar

    I found the libeay32.dll in the system32 folder and renamed it to OLDlibeay32.dll. It then worked for me. Obviously once you have done what you need to, remove the “OLD” prefix from he original dll.
    Probably not the safest way to do this though…

  63. dgp Avatar
    dgp

    Hi,
    In Step3,what does the below directory supposed contain in tabgeohack.yml?
    # path of Tableau repository
    tableau_repository_path: C:\TabGeoHack\MyRepository
    Is it different from below paths in YAML file like Germany.yml?My question is tabgeohack.yml
    # location of input spatial data files
    shape_file_dir: C:\TabGeoHack\input
    # location of various generated files
    output_dir: C:\TabGeoHack\output

  64. dgp Avatar
    dgp

    The link below
    http://www.geodatenzentrum.de/geodaten/gdz_rahmen.gdz_div?gdz_spr=deu&gdz_user_id=0&gdz_akt_zeile=5&gdz_anz_zeile=5
    has files in UTM.To Run this sample,do we have to convert into GCS?

  65. dgp Avatar
    dgp

    I have followed the steps but could get below folders in my output folder:
    Custom Geocoding Files
    Feature Files
    Local Data Copy (no geometry)
    Local Data Copy (with geometry)
    Point Files
    Folder named ‘Custome Geocoding Files’ has a CSV file.But all the folders are empty….request your help on what could have gone wrong.Could you share the technical details at higher level what GDAL is doing in the background.Because,YAML is new but something like python,c++ will be easy to to comprehend as most of the folks are used to.

  66. Robert Avatar

    dgp,
    the link “tableau_repository_path” in tabgeohack.yml is the link to your local Tableau Repository. It is not within the tabgeohack folder, it is rather something like
    C:\[Username]\Documents\My Tableau Repository
    See also the image posted in step 3.

  67. Robert Avatar

    dgp,
    I checked back and the link to GeoDatenZentrum provided in the article obviously does not exist anymore. I suggest you try the website Global Administrative Areas (link see section 4) to download the Shape Files for German administrative regions.

  68. Robert Avatar

    dgp,
    if all folders are empty except for one, I suppose TabGeoHack didn’t run through without errors. Maybe it is the wrong folder specification in tabgeohack.yml (see my comment above), maybe something else. Try again and check if you receive any error messages.

  69. dgp Avatar
    dgp

    That was quick Robert.Thanks for clarification.

  70. Gregory Avatar
    Gregory

    Hi Robert
    First of all, great tutorial, workes for me. Altough i’m facing a problem. Some of my regions are filled and can’t be found by tableau (not named when going over the region). I’m quiet sure they are in the source files (also in the Custom Geocoding Files map)but they are not drawn in Tableau. This is for the country Belgium where cities have accents like “é” in it and I noticed those are the ones who don’t appear in Tableau (and Saint-Nicolas in flanders, others with a “-” work)
    Do you have an answer for this particular issue?
    Thanks in advance.

  71. Robert Avatar

    Gregory,
    root cause of this issue are indeed the special characters with accents (e.g. é). I am having the same problem with German “Umlaute” (ä, ö, ü). In my example map of Germany shown above, I am not using the names of the regions (Kreise) as the geographic role, but the ID of the regions (Kreisschlüssel). If there is something similar for the Belgian districts, I suggest you import this into your custom geocoding, too and use it to assign the geographic role in your Tableau workbook. Otherwise, you have to create your own ID and map it to your data source, see also step 11 of the tutorial.
    I can’t tell you why Saint-Nicolas isn’t working. Hyphens shouldn’t be a problem. Maybe the district is called Sint-Niklaas either in the shape files or in your source data? As I said, I have no clue, this is just a wild guess.

  72. Gregory Avatar
    Gregory

    Hi Robert, thanks for the fast answer.
    I was able to edit the locations with accents, so match them and now Belgium is almost complete as i want it, except for the Saint-Nicolas case.
    I noticed that “Sint Niklaas” is in french “Saint-Nicolas” but that “Saint-Nicolas” is a region itself. After looking to the given latitude and longitude by the shapefile I know it is for “Sint Niklaas”. So now I am wondering, how can I make a shapefile for the french region “Saint-Nicolas” and how can I change in the original shapefile “Saint-Nicolas” to “Sint Niklaas” as ID ?
    I do not prefer to work with the number ID’s in the shapefile because they are not known by potential users.
    Thanks Robert.

  73. Robert Avatar

    Gregory,
    I never tried to edit the shape files I am using, but you may want to have a look at a free GIS editor like QGis or OpenJump and see if they can help you. As I said, I never tried, so no promise.

  74. Gajanan Avatar

    Hello Thanks for such nice article Robert.
    I am done till step 5 but when i run step 6 i get this error
    i am using windows 8 machine and with tableau 8.1
    F:\tableau\3rd party tool\TabGeoHack>tabgeohack –info US.yml
    GDAL binary path C:\Program Files (x86)\GDAL\bin not found at tabgeohack.pl line
    1479
    Can you please tell me where i am going wrong?
    Thanks
    Gajanan Hiroji

  75. Gajanan Avatar

    Hello Robert,
    I resolved previous issue. but when i was doing step 9 i am getting this error
    F:\tableau\3rd party tool\TabGeoHack>tabgeohack –roles US.yml
    Generating custom geocoding files…
    Type of argument to keys on reference must be unblessed hashref or arrayref at t
    abgeohack.pl line 512.
    I am doing this for US Location.
    Here is my US.yml file
    # geocoding_template.yml
    # ======================
    #
    # This template file shows the required structure of the configuration file for defining custom geographic
    # roles with tabgeohack.
    #
    # The template lists most of the commonly used options. Refer to the documentation for the complete list of
    # the more esoteric ones.
    #
    # If in doubt, refer to the sample “Porirua Tsunami Warnings.yml” file supplied with tabgeohack for an
    # example of a working file.
    #
    # Where specific values need to be supplied, these are shown in . The angle brackets are not
    # required in the actual file. For example, where the template says:
    #
    # – role_name:
    #
    # the actual file might say:
    #
    # – role_name: English_County
    #
    # Optional entries are commented out with a ‘#’ character. To enable these entries, just delete the ‘#’. Pay
    # close attention to the alignment of the entries. YAML works on indentation, which must use a consistent
    # number of space for each indentation level (NOT characters). This example uses 4 spaces for each
    # level of indentation.
    #
    # The template highlights those entries required for the first stage of using tabgeohack (using the –info
    # option to display the structure and sample content of the shape files) and those entries which need to be
    # supplied to use the remaining options (–roles, –shapes, etc).
    #
    # >>>>>>>>>>>>>>>>> STAGE ONE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # # File Locations # -------------- # Location of input spatial data files. # shape_file_dir: F:\tableau\3rd party tool\TabGeoHack\US # Location of various generated files. # output_dir: F:\tableau\3rd party tool\TabGeoHack\US # Definition of geographic roles to process # ----------------------------------------- geographic_roles: # The name for the first geographic role to be created. # - role_name: USA # Shape file(s) - note that this is a list of files to allow for layers being split across shape files # normally there will be a single entry. # e.g. for an ESRI shape file of countries this might be "country.shp" # shape_file_names: - USA_adm1.shp # >>>>>>>>>>>>>>>>> STAGE TWO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # # A single unique identifier field is required for each geographic role, which may be one of the fields # listed under "required_geocoding_fields" below, or may be automatically generated by tabgeohack. # Specify the generate_unique_id option if the shape file does not include a unique identifier. # Whether to generate a unique feature ID in the generated output files (default false). # #generate_unique_id: # List the fields from the shape file which are required to be included in the generated custom geocoding
    # CSV file. One of these fields should include the unique_id option unless generate_unique_id has been set
    # above.
    #
    #required_geocoding_fields:
    # Entries for each field from the shape file to include in the custom geocoding.
    #
    #:
    # The name to be used by Tableau for this geocoding field.
    #
    #alias:

    # unique ID indicator (default false)
    #
    #unique_id: true
    # Optionally, some or all of the classifying data contained in the shape file may be output to a CSV file
    # which can be joined in to the data source and used as part of the analysis.
    # Field names from the shape file are listed, along with an optional alias for each field to be used as
    # the CSV column name (If no alias is supplied, the original field name is used).
    #
    #required_feature_fields:
    #shape field name 1>:
    #shape field name 2>:

    #shape field name 3 (no ALIAS)>:
    # …
    # Optionally, a CSV file containing the coordinates of all boundary points for all shapes can be
    # generated, to allow maps to be drawn as Tableau polygons.
    #generate_points: # If the shape file contains too great a level of detail, the resulting geocoding may become very slow.
    # In this case, it is advisable to simplify the definition of the shape boundaries. The tolerance for
    # this simplification must be expressed in the units used in the source shape file, typically kilometres
    # or degrees. Refer to the documentation for more details of how to set the simplification tolerance.
    #
    #simplify_tolerance:
    # >>>>>>>>>>>>>>>>> STAGE ONE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # # If multiple geographic roles are to be added, repeat the above structure for each required role. #- role_name:
    #shape_file_names:
    #-

    # >>>>>>>>>>>>>>>>> STAGE TWO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< # # Repeat the structure above for each role. # Definition of Role Hierarchy to allow purging of unwanted roles # --------------------------------------------------------------- # Usually, all that is needed is the definition of the built-in role hierarchy, since it will usually only be the # built-in roles which need to be purged. In that case, the definition of built-in roles below is all that is # needed. # # Custom geocoding roles only need to be defined here if they are to be (partially) purged after loading. This can # occasionally be a useful way to trim down the volume of imported data to just a region of interest. # # When adding custom roles to this hierarchy they will normally be added at the end, at the same level of # indentation as Country. The only exception to this is if the custom geocoding extends the built-in hierarchy # by adding roles which are uniquely identified within one of the built-in roles. In that case they need to # be inserted at the relevant position in the hierarchy. # # Note that Congressional Districts were added in 7.0.9, so these are optional (to maintain backward compatibilty) # role_hierarchy: - role: Country children: - role: State children: - role: City - role: County - role: Congress - role: ZipCode - role: AreaCode - role: CMSA # Whether or not to purge synonyms for any kept roles. This can significantly increase the performance of some # of the built-in geocoding, such as US Zip Codes. # purge_synonyms: true # Definition of geographic roles to purge # --------------------------------------- # Note that children in the role hierarchy are automatically purged if their parents are purged and kept if # their parents are kept. Additional children can be purged by specifying the child role explictly here. # # There are three commonly useful scenarios: # # 1) Purge absolutely all built-in geocoding. This results in the minimum size for the geocoding database # and hence any packaged workbooks created, but means that none of the built-in Tableau geocoding is # available while this custom geocoding definition is active. # # This template is set-up to do this. # # 2) Keep all built-in geocoding. This results in the largest geocoding database (and in packaged workbooks # that are not suitable for publishing on Tableau Public), but means that all built-in geocoding remains # available while this geocoding definition is active. # # Simply comment out the "Country:" line below to retain all built-in geocoding. # # 3) Purge most built-in geocoding, reatining just the subset that is relevant to a particular piece of # analysis. A common scenario is purging at the Country level (and hence all other roles) but keeping one # specific country of interest. # # Add exceptions at the country level and optionally add entries at lower levels of detail for this # scenario. # List roles to be purged, along with an optional list of exceptions for each role. # purge_roles_exceptions: # All countries except any listed are purged. Country: - USA #-
    # If all other roles are left commented out, they will be retained for any countries listed above, but
    # purged for all countries which are purged. Refer to the documentation for further description of the
    # options.
    #
    #State:
    #County:
    #ZipCode:
    #AreaCode:
    #CMSA:

  76. Robert Avatar

    Gajanan,
    it is hard to tell what’s going wrong from the text of the YML file pasted into the comment section here. Can you post your YML file somewhere for download?
    May I also ask why you are doing this for the US? Tableau provides filled maps for all kind of regions of the US natively (states, counties, ZIP-code areas). You do not need TabGeoHack for a US map. Or is it just for testing the technique?

  77. Gregory Avatar
    Gregory

    Hi Robert, I was able to change names in the dbf file and now the problem is solved and i have a more detailed map of the country. Thanks.

  78. Marc Avatar
    Marc

    Hello Robert,
    Nice and clear tutorial. But unfortunately I’m stuck at step 10. I’ve imported the generated .CSV file in Tableau. When I try to assign the shapes to the custom geocoding I get an error.
    C:\TabGeoHack>tabgeohack –shape netherlands.yml
    Source custom geocoding database C:\Users\Marc\Documents\My Tableau Repository\Local Data not found at tabgeohack.pl line 1674
    At first I thought of a minor mistake, but I’ve checked everything a hundred times and cannot find what’s wrong. The Local Data folder contains two files after importing the custom geocoding, .tds file (3 kb) and a .FDB file (5 mb).
    The tabgeohack.yml file contains the following repository path: `tableau_repository_path: C:\Users\Marc\Documents\My Tableau Repository`
    I hope you can help me out with this one!
    With kind regards, Marc

  79. Robert Avatar

    Marc,
    hmm, the error message looks as if the “Local Data” folder in your Tableau Repository would be missing, but you already checked and the .FDB and .TDS files are there (although there are usually more .TDS files if you purge roles). Can you send me an email with your YML file and a link where you got the shapes from? I will then try it on my machine.

  80. Guillaume Avatar
    Guillaume

    Hi Robert,
    Thanks for the tutorial, I am using Tabgeohack extensively and working great!
    I now face a challenge in my use of Custom Geocoding; I need tabgeohack to produce filled maps of low level regions and suchs and in the mean time I’d like to have another Custom Geocoding of points of interest (not regions so no shapes/polygons) in place. Do you know if there’s a way to add such points after I created my Custom Geocoding with tabgeohack?
    The reason why is I want to have a dual axis map with one filled thanks to tabgeohack and another with marks at my points of interest. Apparently, Tableau needs to use generated longitudes and latitudes to still give a map with dual axis.
    Best regards,
    Guillaume

  81. Robert Avatar

    Guillaume,
    I think Richard answered this question in his VizTalk thread. Have a look here:

    VizTalk Thread TabGeoHack Comments 146-147

    The key is to include the latitudes and longitudes of your points of interests in the custom geocoding even though you do not have and do not need shapes for them. Just create a CSV file with the latitudes and longitudes of the POIs and copy it to the folder “Custom Geocoding Files” after step 8 and before step 9. This should do the trick. I did not try, so no promise, though.

  82. Guillaume Avatar
    Guillaume

    You’re right and it’s working! Tabgeohack actually keeps that custom geocoding in the GEOCODING.FDB
    Your work with Richard on this tool and on answering the questions is just amazing, HUGE thanks for that.
    All the best,
    Guillaume

  83. Emily Avatar
    Emily

    Hi Rober,
    Thanks your tutorial, I’m now face an error at step 10 (same with Marc)
    The error is below:
    D:Tableau\TabGeoHack>tabgeohack –shapes Taiwan.yml
    Source custom geocoding database C:\Users\user\Documents\My Tableau Repository\Local Data not found at tabgeohack.pl line 1674
    I’ve checked my .yml and Local Data folder, it looks very good.
    Could you help me solve it?
    Regards,
    Emily

  84. Robert Avatar

    Emily,
    “C:\Users\user\Documents\My Tableau Repository\Local Data” does not look right to me (unless your Windows username is really “user”).
    Just browse to this folder in your Windows Explorer, go to the address bar and copy the right path from there. On my machine, for one, the path is
    C:\Users\Robert\Documents\My Tableau Repository 8.1\Local Data
    I would assume you have to replace the second “user” in your path by “Emily” or whatever your Windows username is.

  85. Emily Avatar
    Emily

    Robert,
    Yes.. My windows username is “user”. Please reference the screenshot of my computer, http://ppt.cc/boz6
    And I try to set another name, it doesn’t work
    D:Tableau\TabGeoHack>tabgeohack –shapes Taiwan.yml
    Source custom geocoding database C:\Users\gau\Documents\My Tableau Repository\Local Data not found at tabgeohack.pl line 1674
    Do you have any idea about this?
    Thanks.
    Emily

  86. Robert Avatar

    Emily,
    did step 9 (importing the Custom Geocoding in Tableau) work for you or did you receive errors or warnings in Tableau?
    Can you send me your YML files and a link where you downloaded the shape files by email? I would then try it on my computer.

  87. Emily Avatar
    Emily

    Hi Robert,
    I downloaded the shape files from this website: http://www.gadm.org/country
    Country: Taiwan
    Format: shapefile
    Please go to this link: https://www.dropbox.com/sh/7g0w60htfh45i6e/2spTP_mIKZ?lst
    There’re two files:
    1. Screenshot: I did not receive any errors in Tableau when importing geocoding. I can use the custom geocoding to create a map.
    2. My yml file: taiwan.yml.
    Thanks for your help.
    Emily

  88. Robert Avatar

    Emily,
    the problem was the role name and the alias you used. “City” is already used internally by Tableau as a geocoding role. Simply change your role name to e.g. TWN_City and the aliases to TWN_City_ID and TWN_City (or whatever you like) and it works.
    I will send you the YML file and a screenshot of the map I just produced by email in a minute.

  89. Jeffrey Strauss Avatar

    Thanks for an awesome utility. I receive the same error that Emily received “C:\Users\jstrauss\Documents\My Tableau Repository\Local Data not found at tabgeohack.pl line 1674”.
    This happened for me with both the sample data Porirua Tsunami Zones and the Taiwan data after I made the change you suggested to the city.
    Once I have it working, I would like to apply it to custom region data for my company.
    Can you offer any advice or send me the data for Taiwan?
    Sincerely, Jeff

  90. Robert Avatar

    Jeffrey,
    first things first: credit where credit is due. It is Richard Leeke’s tool. I just wrote this little tutorial. So please drop Richard a line to say thank you, e.g. on his VizTalk thread.
    With regards to your issue: this is weird. Emily replied she couldn’t make it work even with the YML file that worked like a charm for me.
    I can send you the Taiwan Custom Geocoding, but I would suggest you send me your YML and a link to the shape files you want to use by email and I will try it on my machine.

  91. Vincent Avatar
    Vincent

    Dear Robert,
    I am impressed by the work that Richard and you accomplished.
    I am working on a file for Germany where I have a density of people by Zipcode (PLZ) and I have Tableau Desktop. But my IT dept put so much constraints on our PCs that I can not go through your steps. Would it be possible to provide me your excel file in order for me to work with it or it is not enough to make my filled map?
    Your help would be very well appreciated.
    Best regards,
    Vince

  92. Jeffrey Strauss Avatar

    I have a list of coordinates for DMA areas. Do you happen to know of a viable method to create a shape file so that I can use it as input to tabgeohack? Thank you!

  93. Robert Avatar

    Vincent,
    I can, but I need to know what exactly you are looking for. Are you looking for the polygon data created with ShapeToTab or the Custom Geocoding Database created with TabGeohack? Please be advised that this is a lot of data. The TabGeoHack Custom Geocoding of Germany by ZIP code, for instance, is a 70 MB Database…

  94. Robert Avatar

    Jeffrey,
    sorry, I do not know of a way to generate shape files from coordinates. I would assume this is possible, but I am not an expert in this area. I am sorry.

  95. Abe Avatar
    Abe

    Hi,
    Everything went well until i came to the commando-prompt window and ran “tabgeohack –info sweden.yml” commando…
    I got this error message,
    “Unable to execute orginfo – check that GDAL libraries are installed properly and that the ‘GDAL_installation_path’ is configured correctly at tabgeohack.pl line 1506″.”
    The path is correct, its pointed to C:\GDAL Mapserver, the content of that folder is a ‘bin’-folder, ‘doc’-folder and some text file and one batch file.
    I’ve tried to install GDAL with a more updated version of it (http://www.gisinternals.com/sdk/PackageList.aspx?file=release-1500-gdal-1-10-1-mapserver-6-4-1.zip) with no sucess.
    (It might be worth to note that i erased the environment variables from the other install guide, as it warned me of it when i had them there..)
    I think I tried everything and i uninstalled and reinstalled everything, please any help would be appreciated!

  96. Abe Avatar
    Abe

    I noticed that I didn’t mention that I reinstalled GDAL with the help of this install-guide, http://cartometric.com/blog/2011/10/17/install-gdal-on-windows/.
    These are the “environment variables” that i mentioned in the previous post.

  97. Robert Avatar

    Abe,
    I have to admit I am everything else than an expert with GDAL, but it worked for me without any installation guide. As described above, I simply downloaded the zip-folder, extracted the files and changed the path in the tabgeohack.yml. I never followed an installation guide, let alone changed environment variables. It just worked for me as it comes in the zip-folder. Maybe you want to uninstall it and just try again by simply unzipping the files.
    If this still doesn’t work for you, I suggest you post your question on Richard’s VizTalk thread on TabGeoHack in the Tableau Forum. I am sure, Richard can and will help you.

  98. Abe Avatar
    Abe

    I see, thanks anyways!
    Just to make sure was the file you downloaded, “release-1600-gdal-1-9-0-mapserver-6-0-1.zip”?
    I mean how was DOS able to recognize “tabgeohack –info xx.yml” if you didn’t have python and the GDAL core installed…
    Anyways I’ll take this questions to Richard’s VizTalk thread.

  99. Robert Avatar

    Abe,
    right, that’s the file I downloaded and unzipped (the file provided in the download link in step 2 above). I can’t tell you why and how it worked, but it did.
    I am sorry I have to send you away, but this is above my head. I am sure, Richard will be able to answer your questions.

  100. Vera Leite Avatar
    Vera Leite

    Hi Robert, thanks for the great tutorial.
    I followed all the steps in the tutorial but I have a problem.
    When I import the csv generated by — roles coordinates do not appear correctly.
    The csv file has this content:
    id_portugal,Latitude,Longitude
    1,40.7236,-8.4649
    2,38.3480,-27.2838
    3,37.8297,-7.9439
    4,41.5530,-8.3094
    5,41.5094,-6.8593
    6,39.9465,-7.5016
    7,40.2044,-8.3358
    8,38.6039,-7.8418
    9,37.2449,-8.1332
    10,40.6413,-7.2296
    11,39.7178,-8.7743
    12,39.0003,-9.1657
    13,32.7570,-16.9544
    14,39.1901,-7.6204
    15,41.2247,-8.3524
    16,39.2936,-8.4775
    17,38.3098,-8.6449
    18,41.8779,-8.5069
    19,41.5550,-7.6317
    20,40.7989,-7.8709
    For example:
    As you can see, the point 10 has the coordinate 40.6413,-7.2296 but the tableau changes it, as it is possible to see the image:
    https://www.dropbox.com/s/dgifwpczpbcv633/Map.png
    Do you have any idea where the problem might be?
    Thanks!

  101. Robert Avatar

    Vera,
    this is a number format problem (different decimal separators in English / UK and the rest of Europe).
    Did you change your Windows Date and Number Format Settings to English before importing the CSV file (see the first bullet point of the section International Issues of the article)?
    If not, do so and try again.
    Let me know if this does not solve the issue.

  102. Vera Leite Avatar
    Vera Leite

    Thats it!
    My Windows was in PT Language.
    Very Thanks!

  103. Vera Leite Avatar
    Vera Leite

    Hi again,
    Sorry for bother you again but i have another problem.
    I want fill de district of Portugal, but the only thing i can can obtain is the centroid of the each district (img in annex).
    Is there any step or any thing i can do to obtain the fill district?
    img:
    https://www.dropbox.com/s/hxpw3l7jezla6vh/Portugal.png
    Thanks

  104. Robert Avatar

    Vera,
    sorry for asking this: did you run through the entire process described above and did it work or did you receive any errors or warnings?

  105. Vera Leite Avatar
    Vera Leite

    In the step 12, when i select Filled Map i receive this warning:
    “Filled maps are not available for the Portugal geographic role” but I created the file .yml in the same way of the tutorial.

  106. Robert Avatar

    Vera,
    hmm. This looks as if something in the process didn’t work.
    I’d suggest we take this offline and keep on talking via email. Can you please send me the YML files you are using and the link where you downloaded the shape files by email (email link see at the top or in the left column of the blog)? I will then have a look what might be wrong and come back to you.

  107. Vera Leite Avatar
    Vera Leite

    Email Sent.
    Thanks!!!!

  108. krete Avatar
    krete

    Thank you very much!! Really good blogpost and idea!
    “Don’t let the strange characters in some of the strings confuse you. Those are substitutes for the so called German Umlaute (ä, ö, ü). We do not have to take care of this, though. TabGeoHack will do all the work for us in the background.” – This thou didn’t work for me
    SƵmeru vald – but must be Sõmeru vald.
    Do you have maybe idea, why it is so?

  109. Robert Avatar

    krete,
    I am sorry, my statement in the article may be misleading.
    Actually special characters are a problem, if you are trying to use the name of the region as the geographical role in Tableau. What I wanted to say is that those strange looking characters do not prevent TabGeoHack from creating the custom geocoding. However, you are right, special characters are an issue.
    I had the same problem with the German Umlaute (ä, ü, etc.), but this had no effect in my workbook, because I was using the ID of the region (Kreisschlüssel) as the geographic role and this worked just fine. So, I’d recommend using the unique identifier of the region, instead of the name.
    Please have a look at Gregory’s comment (March 04, 2014) above and the following conversation. This may be interesting for you, too.

  110. Max Avatar
    Max

    Hello,
    I´ve a similiar question to one asked before. I followed the steps and it worked alright until executing “tabgeohack –shapes germany.yml”. I got the error
    “Custom geocoding directory not found at C:\…..
    You must import custom geocoding files created with the –roles option before running the –shapes option at tabgeohack.pl line 235”.
    I made sure that I´m using the right repository “C:\Users\user_name\Documents\Eigenes Tableau-Repository (Beta)”.
    Tableau already displays “Kreise” as dots on the map, but not as a filled map. Do you have any idea what’s going wrong here?
    Thanks in advance.

  111. Robert Avatar

    Max,
    there are different possible options. I suspect you are using a German Windows installation and maybe even the German user interface in Tableau, right?
    Did you read and follow the hints in the section “International Issues” at the end of the article?
    I.e. the date and number settings, folder name of Local Data respectively setting the tableau_country_code, English user interface?
    It still works like a charm for me (on a “German” computer), so it should work for you, too.

  112. Eduardo Ruiz Avatar
    Eduardo Ruiz

    Hi Robert,
    Excellent tutorial!, it is amazingly easy how this works. I tried this tutorial about a year ago in order to show the parishes from Venezuela in Tableau and everything worked perfectly.
    This week I tried to upload a different role, everything worked like a charmed until the last step (tabgeohack –shapes). When I run this last command the following error message appears:

    C:\GIS_TabGeoHack>tabgeohack –shapes Venezuela.YML
    unsupported on-disk structure for file C:\USERS\ERUIZ\APPDATA\LOCAL\TEMP\VENEZUE
    LA.YML\LOCAL DATA\GEOCODING.FDB; found 11.2, support 11.1
    Can’t call method “errstr” on an undefined value at tabgeohack.pl line 255.”
    Do you know what may be the problem?
    Thank you very much in advance

  113. Robert Avatar

    Eduardo,
    it is a version issue.
    I assume you are working with Tableau 8.2, right?
    TabGeoHack isn’t working with 8.2 anymore: Tableau 8.2 uses a newer version of Firebird and TabGeoHack is not compatible with this Firebird version.
    Richard is – as far as I know – aware of this problem and will try to fix this as soon as he finds the time to (if the issue can be fixed at all). I’d recommend to subscribe to Richard’s VizTalk thread to get the updates.

  114. rajshankar Avatar
    rajshankar

    Hello Robert/Richard,
    I have a set of custom regions defined by my company in the US. To proceed with the tabgeohack or the shapetotab, where should I start with? I know that there is a geographic role called region but that doesn’t align with the companies region. your help in this regard would be very much helpful. I may have misunderstood the steps but I think the tool works great for regular geographic roles only. Is that true? If not, can you please elaborate?
    Thanks !

  115. Robert Avatar

    Raishankar,
    TabGeoHack and ShapetoTab convert shapes files (e.g. ESRI shape files or any other polygon spatial data formats supported by the Geographic Data Abstraction Library) into a Tableau Custom Geocoding (TabGeoHack) or into CSV files with the polygon points to be used in Tableau (ShapeToTab).
    If you have company specific regions you want to plot on a Tableau Filled Map using TabGeoHack or ShapeToTab, you have to create or organize the according shape files first.
    Last, but not least: please be advised that – for the time being – TabGeoHack is not working with the latest version of Tableau (8.2.). See also my reply to Eduardo above.

  116. Bertram Avatar
    Bertram

    Hi Robert,
    I’m facing the same problem as Emily.
    I’ve change the role name, but it still shows the following message.
    Source custom geocoding database C:\Users\1300088\Documents\My Tableau Repository\Local Data not found at tabgeohack.pl line 1674
    Can you help me check what’s the problem is??
    My yml files and screenshot:
    https://www.dropbox.com/sh/ey2ufr4ifudvook/AABeFMQTEEj7Y0lk4AW-p8aya?dl=0
    Thanks!
    Bertram

  117. Robert Avatar

    Bertram,
    I just tried your YML file and it works fine for me, so all I can provide are 2 hints:
    1. Make sure your Tableau version and your TabGeoHack version fit. If you are using Tableau 8.2, you need TabGeoHack 2.0, if you are using Tableau 8.1 or an earlier version, you need TabGeohack 1. Richard provides the different links on his VizTalk thread.
    2. I assume you tried several times, so it may be a good idea to start from scratch, i.e. remove the existing Custom Geocoding in Tableau, delete all folders in C:\TabGeoHack\Taiwan (Custom Geocoding Files, Feature Files, Local Data Copy, etc.) and try again
    I am sorry, but since I can’t reproduce the problem, this is all I can offer.

  118. ivy Avatar
    ivy

    Absolutely brilliant! Managed to create custom geocoding for Philippines at province level. Thank you so much for sharing this. Your step-by-step process is very detailed and clear. Thank you!!!

  119. Jared Avatar
    Jared

    Hi Robert — Huge thanks for all of your work on here. I’m having a similar issue to Marc regarding the local data folder and the .FDB file.
    When I run step 10, i get the following message:
    unsupported on-disk structure for file C:\___________\APPDATA\LOCAL\TEMP\TERRITORY_ZIP_GEOCODING\LOCAL DATA\GEOCODING.FDB; found 11.2, support 11.1
    Can’t call method “errstr” on an undified value and tabgeohack.pl line 255.
    Any idea how to get around this one?

  120. Jared Avatar
    Jared

    it looks like it wasn’t working for tableau 8.2, here is a forum and update from Richard for tabgeohackV2
    https://community.tableausoftware.com/thread/116369?start=330&tstart=0

  121. Michael Avatar
    Michael

    When i went to go on the command line i got a message saying:
    GDAL binary path C:\GDAL\bin not found at tabgeohack.pl line 1479
    The GDAL download link in the article wasn’t working when i downloaded it so that could be the problem. Any idea how to fix it?

  122. Robert Avatar

    Michael,
    the gisinternal site seems to be unavailable sometimes or maybe they moved the download section somewhere else. Richard is kind enough to provide a copy of the ZIP-file in his dropbox:

    GDAL 1-9-0

    Download it from there and try again.

  123. Jeff Avatar

    Do you happen to know where I can get ITV zones for the UK? I need to create filled maps using this data. Thanks, J

  124. Robert Avatar

    Jeff,
    I am sorry, but I do not even know what ITV zones are. I am German. I am sorry.

  125. Sastry Avatar
    Sastry

    Hi Robert,
    Thanks a lot for the tutorial and also for providing solutions to the queries here.
    I am doing the same task for India and I am struck at the same error. Can you please help me with this?

  126. Robert Avatar

    Sastry,
    send me your YML file and the link where you downloaded the shape files from by email and I will have a look.

  127. Jeff Strauss Avatar
    Jeff Strauss

    I have the tool working and now are in the finer details of getting the geocoding.fdb to be smaller. Are you able to guide?
    what does purge_synonyms mean? Why would I want to retain synonyms?
    I am confused as to how to pare down based on countries / roles. If I want to keep all countries, but purge the roles (Area code, CBSA/MSA, Congressional District, and county), what would I put into the YML for this? I haven’t decided if I want to pare down to only the countries that I’m focused in on right now, or keep all countries.
    Thank you!

  128. Robert Avatar

    Jeff,
    I am sorry, I can’t answer your question. I forwarded your comment to Richard and he will look into this as soon as he has the chance to.

  129. Richard Leeke Avatar

    The geocoding database includes multiple synonyms for many geographic roles, allowing both for different forms in common usage as well as different languages. There are 17 synonyms for ‘USA’ for example (‘America’, ‘US’, ‘USA’, United States of America’, ‘Estados Unidos’, ‘Etats-Unis’, etc).
    If purge_synonyms is false all synonyms will be retained for any listed role. If it is true, only the explicitly listed synonyms will be retained.
    Why would you want to purge them? Simply to minimise space used by the geocoding database. I can’t recall if I ever did any testing to see how much difference it makes, my guess is that the synonyms take a lot less space than the boundary data. I just thought I might as well expose the option when I was writing it.
    Hopefully our exchange on your question on the Tableau forums has answered all you need on the question on how to pare down the roles.

  130. omkar Avatar
    omkar

    I want to ask, If we have different locations from different countries in the world. How do we plot them on map?? plz reply

  131. Robert Avatar

    omkar,
    have a look at this Tableau Knowledge Base article for instance:
    http://kb.tableau.com/articles/knowledgebase/creating-filled-maps.pnge-charts
    Instead of SUM(Sales) (as shown in the KB article), you would plot your locations on the secondary axis.

  132. Srikanth Avatar
    Srikanth

    Hi,
    I need your help!
    I need to create a map for a particular state of the country India. I’ve shape files of that state. Could someone help me with this request.
    Thanks i advance!
    Best,
    Srikanth

  133. Robert Avatar

    Srikanth,
    the article above describes step by step how to create Tableau filled maps from ESRI shape files. Did you try to follow this tutorial? If so, did you encounter an issue or roadblock? At which step and what exactly is the issue?

  134. James Avatar
    James

    Dear Robert
    good walkthrough though I’m stuck at step 7, the command window gives me a lot of information but no RS or Gen numbers and I’m not sure where I went wrong? do have any advice or a specific command that will give me the numbers?

  135. Robert Avatar

    James,
    you did not go wrong, I rather think this is just a misunderstanding. RS and GEN are the specific field names in the German shape files I used as the example for the post. Those are not standard field names in ESRI shape files, i.e. other shape files will have different field names.
    Tabgehohack’s –-info option displays the names of the fields and the values of the first 5 records and thereby helps you to find out which field names you need for the YML-file in step 7. I recommend to read again the steps 6 and 7 of the article. If you are still stuck, you could point me to the shape files you want to use and I will have a look.

  136. James Avatar
    James

    Thanks for the speedy reply
    I understand now that the RS and Gen are specific to you and that file but I cant see any numbers which can be used for the specific field names. I’m trying to create a map of the UK with postcodes at County, district level and I can get the info command to work but cant get any further
    this is an example of what comes back in the info.
    Layer name: Sectors
    Geometry: Polygon
    Feature Count: 5
    Extent: (-8.650848, 49.861991) – (1.767277, 60.862979)
    Layer SRS WKT:
    GEOGCS[“WGS 84”,
    DATUM[“World Geodetic System 1984”,
    SPHEROID[“WGS 84”,6378137.0,298.257223563,
    AUTHORITY[“EPSG”,”7030″]],
    AUTHORITY[“EPSG”,”6326″]],
    PRIMEM[“Greenwich”,0.0,
    AUTHORITY[“EPSG”,”8901″]],
    UNIT[“degree”,0.017453292519943295],
    AXIS[“Geodetic longitude”,EAST],
    AXIS[“Geodetic latitude”,NORTH],
    AUTHORITY[“EPSG”,”4326″]]
    name: String (254.0)
    OGRFeature(Sectors):0
    name (String) = AB10 1
    POLYGON : 180 points, 1 inner rings (13 points)

  137. Robert Avatar

    James,
    which version of Tableau are you using? As far as I know, Tableau recognizes UK postcodes since version 9.3. I.e. if you have the latest version of Tableau, you do not need the TabGeoHack workaround for the United Kingdom (and many other countries) anymore.

  138. James Avatar
    James

    I think I have 9.3 but what I would like is a map like you have in the example in your guide with highlighted areas.

  139. Robert Avatar

    James,
    if you want to have a zoom of e.g. the greater London area (and maybe Manchester, too) close to the “regular” map of the UK, you can do this in Tableau on a dashboard by using several views on a dashboard, i.e. one view showing the UK and one view showing the London area only (by setting the filter accordingly).
    Have a look at this Tableau knowledge base article which describes how to show Alaska and Hawaii close to the continental United States:
    http://kb.tableau.com/articles/howto/showing-hawaii-and-alaska-near-continental-us

  140. James Avatar
    James

    Robert,
    Thanks I now realize the capabilities of the new version but this is still only at the district level so does not show postcodes greater than 3 or 4 digits.
    I’m trying to build a map showing postcode sectors e.g. AB10 1 rather than just AB10. I just tried this on tableau but it is not able to read all the postcode sectors, less than half appeared on the map.

  141. Robert Avatar

    James,
    ah, ok, I didn’t know that. If Tableau does not recognize 5 digit postcodes of the UK, you will probably indeed have to either work with TabGeoHack or with the polygon map approach.
    I looked at the –-info output you provided in one of your previous comments and it seems to me as if “name (String)” is the name of the field in the shape file which contains the names of the postcodes, because –-info says
    name (String) = AB10 1
    so you have to specify “name (String)” as the required_geocoding_field in your YML file.

  142. James Avatar
    James

    Ah sorry to be confusing currently I am using:
    required_geocoding_fields:
    name:
    alias: Sectors
    unique_id: true
    so should I change it to
    required_geocoding_fields:
    name (String):
    alias: AB10 1
    unique_id: true

  143. Robert Avatar

    James,
    yes, I would only change the alias to e.g. “Post_Code_5”:
    required_geocoding_fields:
    name (String):
    alias: Post_Code_5
    unique_id: true
    If you can’t get it working, you can send me a download link to your shape files (here in a comment or by email) and I will give it a try.

  144. James Avatar
    James

    Its all sorted now
    Thanks Robert for all your help

  145. Arturo Colmenares Avatar
    Arturo Colmenares

    Hi, none of the links are working. Is this still up??

  146. Robert Avatar

    Arturo,
    you are right, most of the links are not working anymore. Apparently, Richard deleted the files from his Dropbox and the Tableau Forum links are not valid anymore either.
    The post is more than 9 years old, and it was about a workaround for Tableau shapes. The workaround reached end of life. It is as simple as that. I am sorry.

  147. Clash Windroye Avatar
    Clash Windroye

    Link invalid
    Send it my email, please
    TabGeoHack
    GDAL
    ShapeToTab
    Thanks my brothers

  148. Robert Avatar

    Clash,
    this post and Richard’s original versions of the mapping tools he implemented are more than 10 years old already.
    Richard provided an update in the Tableau Forum in 2015 here:

    Map Utility Downloads

    The DropBox download links seem to be still working. But honestly, 7 years and God knows how many Tableau versions later, I can’t guarantee that Richard’s tools are still working with the latest Tableau versions.

Leave a Reply to Daan (Infotopics) Cancel reply

Your email address will not be published. Required fields are marked *