Tableau : Convert ESRI shapes into Tableau Format
Tools Required
- Quantum GIS - http://www.qgis.org/en/site/
- Python
- Download the below Python Code - https://github.com/venkat-vs-id/python
import csv import re import sys #def convertESRI2TableauFormat( p_inputfile, p_outputfile): l_outfileName = 'c:/ESRI_suburb_tab_format.csv' # make changes here.. l_ESRIFileName ='c:/ESRI_suburb.csv' # make changes here.. rdx=0 csv.field_size_limit(sys.maxsize) outfile = open( l_outfileName, 'w', newline='') csvWriter = csv.writer( outfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) with open( l_ESRIFileName, 'r') as csvfile: csvR = csv.reader( csvfile, delimiter=',', quotechar='"') for row in csvR: rdx += 1 ci=0 rowValues = [] rowValues.append(row[1]);# ssc_code rowValues.append(row[2]);# ssc_name rowValues.append(row[4]);# state_code rowValues.append(row[5]);# confidence rowValues.append(row[6].strip());# AREA_SQKM rowValues.append('');# place holder for lat rowValues.append('');# place holder for long rowValues.append('');# place holder for polygon rowValues.append('');# place holder for point if ( rdx==1): # first row add header col names rowValues[5]=('Latitude');# rowValues[6]=('Longitude');# rowValues[7]=('Polygon_ID');# rowValues[8]=('Point_ID');# csvWriter.writerow( rowValues); else: for col in row: ci += 1 LatLonStrArr=[] if (ci==1): # first col has the polygon values. polygonArr = [] polygonArr = re.findall('(\((?:-?\d+\.\d+\s-?\d+\.\d+,?)+\))', col) polyx =0 for px in polygonArr: polyx += 1 LatLonStrArr = [] LatLonStrArr = re.findall('(-?\d+\.\d+\s-?\d+\.\d+)', px) if( len( LatLonStrArr) != 0 ): pointx = 0 pointxx = 0 for lx in LatLonStrArr: pointx += 1 resArr = re.findall( '(-?\d+\.\d+)', lx) #print('>>>> lx='+lx + "/"+ str(len(resArr))) rowValues[5] = resArr[1] # lat rowValues[6] = resArr[0] #long rowValues[7] = polyx if( (pointx ==1) | (pointx == len(LatLonStrArr))| (len(LatLonStrArr)<=10)| (pointx % 10 == 0) ): pointxx += 1 rowValues[8] = pointxx csvWriter.writerow( rowValues); #print('ROW========================='+ str(rdx)) #for rx in rowValues: # print('val=' + str(rx)) #if (rdx >=100): #break csvfile.close() outfile.close()
For the sake of this exercise I downloaded the census data from ABS website ( free registration required).
Step to convert ESRI data into Tableau Format
- Download your ESRI data. and it will look like this
- Open Quantum GIS
- From the top menu -> new project
- From the top menu -> Layer -> "Add Vector Layer" ( in this select the .shp file downloaded in step 1)
- Now you will be able to see the From maps and Shapes from the <filename>.shp file
- Right-click and select "save as"
- Make sure you save as with the Layer Option as GEOMETRY=AS_WKT
- Now you have exported the ESRI shp file into a CSV
- Use the Python code from above, and make the changes to the 2 variables
- l_outfileName
- l_ESRIFileName
- Run the above py code- you will get the CSV file readable by Tableau
- If you dont know how to use that CSV in Tableau - Look into this Blog - Tableau Maps - Custom shapes / polygon - Basics
Comments
I follow your step by step but the outfile generated a empty csv file.
Congratulation
Q1) R u getting an empty file from python script Or from the GIS tol(step-7)?
Q2) Please give me more details to help u.
Please let me out of this scenario,also i can attach you qis generated csv file
“OverflowError: Python int too large to convert to C long”
This seems like a cool tool, But I get error whenever I try to run the code. Would appreciate if you could help.