Azavea Atlas

Maps, geography and the web

GIS, Mapping and Cartography Tools to Get You Started on Your Next Project

If you are new to GIS and mapping or just want to find out what tools are available, it can be confusing hunting around for the right ones. I’ve put together a list of tools and resources for various applications. I hope this guide will let you zero in on the the right tools you need and get started on your next project post haste!

  1. Process Geographic Raster and Vector Data QGis_Logo
    QGIS is a fantastic tool to get started with data processing such as manipulating vector data (shapefiles) or working with raster data. It is a free and open source desktop GIS program and has great documentation and training materials. There is a full range of user-built tools and add ons, but these sometimes can have issues or bugs, so tread carefully. 

    If you need a full suite of GIS analysis tools, ArcMap for home use is a great option.  The cost is only $100/yr for all tools and extensions. This is useful if you are already familiar with the interface of ArcMap or need to utilize their popular extensions: Spatial Analyst, Network Analyst or Geostatistical Analyst and you donhave access to a copy through school or work.

  2. Build a Beautiful Basemap MapBox Logo
    If you need to create a beautiful thematic basemap for an interactive map, Mapbox Studio (for desktop) or Mapbox Editor (for browser) are fantastic options.  These tools are great for styling basemaps using OpenStreetMap data, your own data and cartocss. Your basemap can then be published to vector tiles and hosted in your Mapbox account or extracted and published as raster tiles (see this blog post as a guide).

  3. Publish an Interactive Map on the Web
    If you want to do substantial data analysis and editing of data before you publish to the web, then I’d recommend working in QGIS and then publishing with Leaflet using this plug-in.  This guide is a great resource and will help you get up and running quickly. CartoDB Logo

    CartoDB is another great option for some really clean and attractive web mapping. Sign up for a free account, drag in a zipped shapefile or csv and start styling. It allows you to build time-lapse animations and other sophisticated visualizations while still being very easy to use. Check their map gallery for inspiration.

  4. Quickly Analyze Over 1 Million RecordsPostGIS Logo
    If you need to crunch a ton of data, PostGIS is the way to go. Check out this guide which has fantastic step by step instructions for getting data into a PostGIS database. PostGIS data can be used within QGIS as well. CartoDB, mentioned above, is built on PostGIS so you can do the same queries within that web mapping application, but if you are working with very large data, you might encounter limits on file size within CartoDB.

  5. Perform Advanced Spatial StatisticsGeoda Logo
    GeoDa is an awesome desktop tool capable of advanced spatial statistical analysis such as spatial regression, Morans I, Local Indicators of Spatial Association (LISA), histograms, thiessen polygons, scatterplots and boxplots. This is a free application with some serious statistical chops.

  6. Design a Beautiful and Accessible MapColorbrewer Image
    Check out Colorbrewer to discover attractive and intuitive color palettes for your project and don’t forget to consider accessibility to ensure your
    map can be enjoyed by individuals with color blindness or low vision.

header_logo_2x_2Want to hear what others are doing in the industry? NACIS is probably the most cutting edge GIS/Cartography conference running with a schedule featuring dozens of talks that address innovative and exciting techniques.  Many of these are truly expanding the scope and advancing the state of the art for the industry. Additionally, FOSS4G NA features numerous technical talks, many of which hosted by the creators of some of the above tools.  Interested in learning more? Visit a Maptime chapter near you and build your skills at their hands-on project nights.

How to Get Census Data for Maps in 5 Steps

Census Data Doesn’t Have to Be Difficult

One of the largest and best free sources of data in the US is the Census Bureau’s American Fact Finder. It’s a searchable database of all of the nation’s Census counts and American Community Survey (ACS). ACS data is collected on a rolling basis, with 1, 3, and 5-year release cycles with diminishing margins of error. This data spans sea to sea from every locality in the US, and includes tens of thousands of combinations of social and demographic information. The data is also collected by many different geographic summary levels, which you can learn about here.

Finding and using Census data is also difficult. This is why we often turn to to rapidly explore and acquire Census Data. A small team of Knight Foundation-funded developers created CensusReporter to facilitate data exploration and download. CensusReporter always uses the most recent year of complete Census or ACS data, depending on the geography collected. You can see an overview of the tables that CensusReporter provides here.

An Intro To CensusReporter

Head to You’ll be confronted by two large options: Profile, and Explore.

Let’s start with Profile. Type Minneapolis, MN into the Profile search box. You’ll see multiple results come up. CensusReporter will return each geography that contains a place. So we see one result for Minneapolis the place and one for Hennepin County. Choose Minneapolis, MN the place. Check out the map near the top after you’ve made your selection: map displaying Minneapolis, MN
Now scroll down the page and see data grouped by:

  • Demographics
  • Economics
  • Families
  • Housing
  • Social

Digestible charts and graphs break down each subject. These graphics may be embedded on a webpage, like so:

Click “show data” under the pie chart for Age. A table will expand below that breaks down the age information. From here you could also click “View Table” to see the source data. Go ahead and click through to the table.

Tables, Maps, and Distributions

After clicking through to the source data table, you should see a table that displays the age breakdown for Minneapolis. You should notice a graphic above that says “Table Map Distribution”: Menu options. Table, Map, Distribution. Menu options

If you click distribution, you’ll be able to see some basic statistics about each of the different variables. You may also click on the Map button, and see Minneapolis, MN on a map. It’s not very informative to see just a big blob of a city with no population breakdown, so click on Table again.

Dividing Up Geographies

What we want to see is population by Census Tract. On the Table page, look at the lefthand tab. Near the bottom, there is a heading entitled “Divide Minneapolis, MN into…”


Shows the geographic areas Minneapolis, MN can be divided into, including census tracts, block groups, and zip codes.

The options for dividing up geographic areas

and shows the geographies that the city can be broken into below, including census tracts, block groups, and zip codes. Click census tracts. The main table will have changed a bit. Go back to the top of the page and click Map. Now we can actually see the differences in the age of the population across the city.


Minneapolis Census Tracts

Minneapolis Census Tracts


Downloading the Geographic Data

Now that we’ve divided the data up by census tract, we can download the data for our own use. On the Map screen, just to the right of the Table/Map/Distribution buttons, you’ll see “Download Data”. Hover over that and you’ll see the various text data formats and geographic formats you can download. CSV and Excel are great for joining to pre-existing geographic data. Geojson is great for web maps. And KML and Shapefile are both standard geographic data formats that can be used in Google Earth or ArcGIS, respectively.

The 5 Steps to Download Geographic Census Data

  1. Go to
  2. Search for a place
  3. Search for Data
  4. Click “Divide Into” a given geography
  5. Click Download Data

Now you know how to get geographically-enabled Shapefiles, Excel Files, CSVs, and GeoJSONs full of Census Data in about thirty seconds. While CensusReporter doesn’t allow users to grab a stack of different data sets like the Census Bureau’s own American Fact Finder, it’s a great tool for rapidly finding and downloading data for smaller projects.

Preparing for a Spatial Career: Tips for Students

Summer of Maps logo

This past spring, my colleagues and I reviewed over 170 applications for our fellowship program, Summer of Maps. The applications were truly fantastic and we are overjoyed to now be working with our selected fellows on six very exciting projects.

I often get asked what makes a strong fellowship application? This is an important question, but instead of focusing so narrowly on our program, I thought I’d expand this to tackle the question: how can students prepare themselves for a career in spatial analysis?

I entered the job market not very long ago and, even in a short period of time, positions and desired skill sets have changed drastically. In many ways, the minimum bar for applicants has been raised. But there are a handful of things students can do to distinguish themselves and increase their opportunities in their careers ahead.

Take the Initiative to Expand Your Skills

One of the questions we ask our fellowship applicants is how do you go about acquiring new skills or learning new technologies?  More so than the actual techniques students use (MOOCs, web forums, workshops, educational books, etc), we want to find out if the students have a desire to build their skills beyond the standard curriculum at their university.

Not very long ago, the landscape of tools available was more limited. For reference, in 2008, QGIS had yet to release version 1.0 and web mapping tools ArcGIS Online, CartoDB and Mapbox Tilemill had all yet to be developed. Now, we are privileged to have a plethora of amazing new tools at our disposal, many of them free and open source. Often these come with fantastic guides and resources to help us get started.

leaflet js logo

So, students, I implore you, even if your academic program did not offer any technical training beyond Esri ArcGIS, take some of your free time to build new skills.  I’d recommend starting with QGIS, CartoDB, GeoDa, Leaflet, Mapbox Studio, and PostGIS. You don’t have to learn them all at once or become an expert. But during your summer break, pick one tool a week and get familiar with something new. This shows employers that you’re comfortable learning new skills independently.


Similarly, explore some data sets beyond what’s included in your homework tutorials or American FactFinder.  Check out a few open data portals and dig into new and interesting data. You never know what you’ll find and you might even come to some uncharted conclusions! I recommend checking out OpenDataPhilly, DataSF, London Datastore,, City of Chicago Data Portal and NYC Open Data. Many of these portals offer data in spatial formats (shp, kmz, geoJSON, etc).

Showcase your Work

Creating an online portfolio of work is my number one recommendation to students.  It is relatively easy to state on a resume what skills you have or courses you’ve taken. But highlighting those skills in a few well designed maps communicates with much more clarity.  These portfolios do not need to be flashy or high-tech, but merely a showcase of your best work.  I’d recommend you include maps (either static or interactive) that highlight the best analysis, visualization and communication skills you can muster.  One tip is to solicit feedback on this content from both technical and nontechnical individuals before publishing to make sure it is easy to understand and visually appealing.  To get started, check out tools, weebly and WordPress to make a basic portfolio website.

Make your work stand out!

Often times, I find that students rely heavily on the step by step instructions of a homework assignment, and the resulting maps are full of default color schemes and layouts.  After a while, even if the content changes, these maps all seem to look the same.  John Nelson detailed numerous cartography tips in his 2014 NACIS talk and subsequent blog posts, but I’d encourage you to pay special attention to tip #3, Defaults are Evil.  Just for fun, peruse some map disasters (and common mistakes to avoid) at Cartastrophe.Interactive Map of Hurricane Sandy by Chris Henrick

Explore unique and appealing layouts (browse the NACIS Atlas of Design for inspiration), pick new color palettes using ColorBrewer or find some inspiration from archival maps. And lastly, make sure the message of your map is clear and concise.

Here are some student map portfolios that are especially impressive: Chris Henrick, Aaron Dennis, and Carolyn Fish.  To the right, you’ll see an interactive map featured in the portfolio of Chris Henrick.

Build a Network

My last suggestion involves engagement with the broader geo community. They are an incredibly collaborative and supportive group, especially with regard to individuals working with open source or open data. The community is comprised of (but not limited to) a robust network of geo meetups, over 70 worldwide maptime chapters, a great GIS stack exchange network (over 30,000 members), energetic OpenStreetMap contributors, numerous high quality conferences and a strong and thoughtful Twitter presence.

I’ve found that nearly everyone I’ve met in this community is supportive, thoughtful and kindhearted.  These are the type of folks that will offer to help solve a problem, contribute to maptime_logo-finalOpenStreetMap for fun or volunteer their GIS skills for disaster relief. Understandably, not everyone has substantial amounts of free time to commit, but a few ways to get started are: join your local geo meetup (like GeoPhilly in Philadelphia), attend (or better yet, teach) a local maptime session, join the twitter conversation, start your own spatial blog or attend the next geo conference (Foss4GNA, NACIS, JS.Geo, LocationTech are all good options). Long story short: be active in the community and  when you ask for help be sure to offer help next time you can.

Final Thoughts

The market for spatial jobs is competitive, especially for those at the entry level.  Take the initiative to build your skills, showcase your work and contribute to the community. These efforts will result in lasting benefits beyond finding a solid career.

Adding State Districts to Your Salesforce Nonprofit Account

Cicero’s integration with the Salesforce Nonprofit Starter Pack has been expanded to include State Upper and Lower Districts. Back in November, we announced the ability to verify household addresses with Cicero and match them to Congressional districts. Now, it is possible to add state legislative districts as well!


How Does it Work?

The Nonprofit Starter Pack uses the Cicero API to geocode addresses associated with Household records. It then matches the address to Congressional, State Upper, and State Lower districts, and appends them to the address record. In addition, it updates the record with the Cass-certified standardization, meaning your addresses get verified in the process!

If you haven’t yet used Cicero with Salesforce, you can follow the steps outlined here to get started. Now, instead of only seeing Congressional Districts appended to your household address, State Upper and Lower Districts will be populated as well! Important note: Before starting, make sure you are running version 3.43 of the NPSP or higher. Versions below 3.43 will not support this function.

If you are already utilizing the Cicero integration with the Nonprofit Starter Pack, and you have not upgraded to 3.43, you can manually add the districts to your address detail. Here’s how:


1) First, edit your address page layout to include State Upper and State Lower:

NPSP Address Layout 2


2) Next, add the new fields to your profile:

Profile Address Object 2A


3) You’re done!

NPSP Address Detail Page 2A

Cicero hearts Nonprofits

We offer excellent discounts to nonprofits wishing to use Cicero. Through our partnership with TechSoup, all nonprofits are eligible for 5,000 credits (that’s good for 5,000 addresses matched to legislative districts) for only $30. We also offer a 10% discount overall to any organization qualifying as a nonprofit, Government, or educational institution.

Need more reasons to sign up? Drop us a line or tweet us; we’ll be happy to help. And don’t forget to tune in to the next post in this series, which will cover tips on customizing your Address Layout in the NPSP.


Analyzing OpenTreeMap Data with PostGIS

Screenshot of Alberta's OpenTreeMap

In this blog, I’ll be continuing the work I started in Loading Spatial Data into PostGIS with QGIS. Last time I talked about how QGIS could be used as a means of loading data into PostGIS databases quickly with the QGIS DB Manager and Boundless’ OpenGeo Suite.

This time we’ll be using PostGIS to investigate the distribution of mapped trees in Edmonton’s  OpenTreeMap site, yegTreeMap, with simple PostGIS queries. Each city that participates in OpenTreeMap has access to a wealth of insights. All it takes to unlock them is a spatial database and a few lines of code.


This tutorial assumes that you have the OpenTreeMap data for Edmonton in your PostGIS database. My previous blog entry in this series should get you up to speed downloading the data and loading it into PostGIS.

Note that while the file and field names can change, just about any overlapping point and polygon data will suffice for these queries–it just has to be in a PostGIS database. This also means that you may use CartoDB for the analysis since it stores its data in PostGIS.

Getting Started in QGIS

First, make sure your PostGIS database is running. Usually that just involves running the PostGIS executable on your machine. Next, open up ‘DB Manager’ in QGIS. If you’re using CartoDB to follow along, just open the SQL tab. In QGIS, open up the DB Manager:

Picture showing the DB Manager in QGIS

The DB Manager in QGIS

Once in DB Manager, click the SQL Query Icon (a paper with a wrench) and it will open the query manager. The top empty box is where you write SQL queries, and the bottom box shows the results.

Picture of the SQL query window

SQL query editor

Spatial Queries with PostGIS

Each of the following queries uses what’s known as a spatial join. Spatial joins append information from one layer to another based on overlap, and are one of the key features of a spatial database. In a way, the shared key for the join is space rather than an ID field. The queries below assume you have two different datasets in your database: Edmonton trees, and neighborhoods.

PostGIS database with files successfully loaded via Spit

PostGIS database with files successfully loaded via Spit

Count Trees and Display by Neighborhoods

We’ll start out with this simple query to count up the number of trees per neighborhood using the standard SQL COUNT() function. The spatial part is the PostGIS function ST_Intersects(). ST_Intersects() looks for overlap in the geometry, which is stored in a field called the_geom. CartoDB uses an additional geometry field called the_geom_webmercator. CartoDB’s documents explain more about how to use that geometry field. Using the top SQL window, run the following query:

SELECT hoods.hoodname, 
COUNT(trees.gid) AS tree_count 
FROM edmonton_trees AS trees 
JOIN neighborhoods AS hoods 
ON ST_Intersects(trees.the_geom, hoods.the_geom) 
GROUP BY hoods.hoodname 
ORDER BY tree_count DESC 

The query should result in a table of the number of trees per neighborhood in descending order:

Picture of table result from count of trees per neighborhood

Resulting count of trees per neighborhood

We can see that the neighborhood with the most overall trees is Summerside, Followed by River Valley Rundle, and then Terwillegar Towne.

Calculate Tree Density Per Neighborhood

Finding the number of trees per neighborhood is interesting, but larger neighborhoods might contain more trees by virtue of their size. This next query will normalize the number of trees by each neighborhood’s area. COUNT() is used to divide the number of each neighborhood’s trees by its area, and then ST_Intersects() performs the spatial join. This results in trees per square kilometer, which in this query has an alias called trees_km2.

COUNT(trees.gid) / hoods.area_km2 AS trees_km2
FROM edmonton_trees AS trees
JOIN neighborhoods AS hoods
ON ST_Intersects(trees.the_geom, hoods.the_geom)
GROUP BY hoods.hoodname, hoods.gid, hoods.the_geom
ORDER BY trees_km2 DESC
Picture showing table of resulting tree density per neighborhood.

Resulting table of tree density per neighborhood

The resulting table shows that the top two most tree-dense areas are Virginia Park, and Mill Woods Park with 3,100 and 2,693 trees per square kilometer, respectively. Summerside and River Valley Rundle are no longer in the top ten.

Find the Widest Tree by Neighborhood

Next, let’s try refining our queries a bit and find distinct features within each neighborhood. What if rather than summarizing all the trees in the neighborhood, we wanted to find only the widest tree in each neighborhood? This query once again employs ST_Intersects(). The standard SQL MAX() function finds the widest tree from the diameter field.

trees.species__c AS treespecies,
MAX(trees.diameter) AS tree_diam
FROM edmonton_trees AS trees
JOIN neighborhoods AS hoods
ON ST_Intersects(trees.the_geom, hoods.the_geom)
GROUP BY hoods.hoodname, hoods.gid, hoods.the_geom, trees.species__c
ORDER BY tree_diam DESC


Picture of resulting list of widest single trees in each neighborhood.

Widest single tree in each neighborhood

The resulting table shows that the largest single tree of any species in the OpenTreeMap database for Edmonton is a Willow tree in Westbrook Estates. Willows, Maple, Elm, and Ash round out the rest of the largest trees.

Widest Tree By Neighborhood By Species

Let’s take the previous query one step further. What if rather than the single widest tree in each neighborhood, we wanted the single widest tree of every species present in each neighborhood? This query places ST_Intersect() in a sub-query. Type it into the SQL editor and run it. It may take 10-20 seconds to complete. Note that we’re also selecting everything (‘*‘ is SQL for everything), so the table that is returned has all the original fields.

FROM edmonton_trees,
MAX(trees.gid) AS treeid,
MAX(trees.diameter) AS tree_diam
FROM edmonton_trees AS trees
JOIN neighborhoods AS hoods
ON ST_Intersects(trees.the_geom, hoods.the_geom)
GROUP BY hoods.hoodname, trees.species__c) AS sub
WHERE edmonton_trees.gid = sub.treeid

The resulting table should have around 8,600 records. While species will repeat across neighborhoods in the table, they will not repeat within the same neighborhood. The resulting data also has a secondary function: by finding the widest tree of each unique species per neighborhood, the result can act as a proxy for the tree biodiversity within each neighborhood. Azavea’s OpenTreeMap team discusses this more in their blog post, Seeing the Forest for the Trees: Interpreting Data from Tree Inventories (Part One).

Export Query Results as Maps

Next, let’s export the maps from the PostGIS database in QGIS. The SQL Window in the DB Manager of QGIS allows users to export query results directly into QGIS as a new layer. Run one of the queries above and then look for the button labeled ‘Load as new layer’ below the result pane. This should expand a menu.

Click the ‘Retrieve columns’ button on the right and it should automatically grab the gid and the_geom.  Finally, give the layer a name, and then press ‘Load now!’ This should add the layer to QGIS’ table of contents.

If it doesn’t, you can work around this issue by using pgAdmin, which should have come with OpenGeoSuite in the prior installment of this guide. Use pgAdmin to navigate to connect to your PostGIS database and use the SQL editor to perform one of the queries above. Test that it works, and then run it with the ‘Execute Query, Write Result to File’ option. This should save the resulting table as a CSV. This CSV can then be loaded back into QGIS, ArcGIS, or CartoDB as a spatial layer.

Style a Map

Once you’ve managed to either load your query result as a new layer in QGIS, or export the resulting query as a CSV with pgAdmin, you should make a map and show off your hard work! For example, I loaded and styled the data in CartoDB for the OpenTreeMap team:

Next Steps

These queries only scratch the surface of what PostGIS can do. PostGIS can reduce a traditionally labor-intense GIS task to a few lines of code, which can be reused over and over. Each of the code snippets above can be quickly repurposed and reused for just about any point and polygon data.

If you’d like to take your PostGIS a bit further, Chris Whong of CartoDB recently published a blog about PostGIS queries that replicate many common GIS geoprocessing tasks present in QGIS. Try using PostGIS on your own machine or in CartoDB and see how much time you can save with common geographic summary and processing tasks.