I recently started working on a personal project that involved mapping the Twin Cities area of Minnesota. Basically, I wanted to throw in a bunch of data that would allow me to better visualize what’s going on in my hometown. The goal was to bring in data from many relevant areas of concern: physical geography (land cover, green spaces, water, etc.), census (demographics), real estate, (parcel data, property values), and anything else I thought would be interesting to see. Early on, I was having trouble finding a GIS data layer that delineated the neighborhoods of the city of St. Paul (similar to what I found for Minneapolis).

This is what I had to work with at the start:

Minneapolis with neighborhood boundaries and St. Paul without

Georeferencing to the rescue!

Since I was not able to find an existing neighborhoods shapefile or feature class, I decided I would simply make my own. The first task was to locate a suitable image – of any kind – that accurately delineated the city’s neighborhood boundaries.

My search led me to a PDF file of this map:

St. Paul neighborhoods source map used for georeferencing

Note: This file was found by doing a Google image search. The URL was for a squarespace.com page with no identifying information as to whom the page belongs. Based on what is seen in the lower right corner, I believe the map credit should go to Northstar MLS, an MLS agency that serves Minnesota and Western Wisconsin. Their website can be found here.

Armed with a reliable St. Paul neighborhoods map, I began the process of georeferencing the image in Esri ArcMap. Before I imported the map image though, I created a JPG file by simply capturing the map extent with the Windows Snipping Tool.

To perform the georeferencing, I used a combination of the existing St. Paul city boundary (found in a cities feature class sourced from the Minnesota Geospatial Commons GIS portal) and the Esri Streets basemap. Without going into the minutia of the georeferencing process specifically, I’ll just say that it was done very quickly and with a very small handful of control points.

Boundary Digitizing and Fine-Tuning

After the image was spatially referenced, I created an empty feature class and performed a quick pass at digitizing all of the neighborhood boundary lines. Once that first pass was done, I went in and fine-tuned all of the vector lines so that they matched up with where I believed they should be situated with reference to the basemap. When doing the fine-tuning, I edited the lines so that they would follow, as closely as possible, the center lines of the roads that served as the “real world” demarcation of the neighborhood extents. I also made some judgement calls in situations where waterways served as boundaries. Please note that, if this work was being done in any official capacity, red flags would have been raised and questions asked regarding questionable line placement. Since this is a personal project, I didn’t stress too much over the legality of the lines I was drawing.

Here are three examples of the digitizing/fine-tuning work (note the lines drawn between each way of the two-way streets):

Vector editing to match street center line (georeferenced image layer visible)
Vector editing to match street center line (georeferenced image layer NOT visible)
Vector editing to match street center line (georeferenced image layer visible)
Vector editing to match street center line (georeferenced image layer NOT visible)
Vector editing to match street center line (georeferenced image layer visible)
Vector editing to match street center line (georeferenced image layer NOT visible)

Here is what the georeferencing/digitizing/fine-tuning looked like when it was done:

Finished georeferencing/digitizing/fine-tuning

Topology Matching

After I finished editing the interior neighborhood boundary lines, my next task was to make sure that the outermost boundary of the neighborhoods layer was coincident with the city boundary layer. Using the topology toolset, I traced the entire outer perimeter of the two layers to make sure that each vertex was coincident (which, of course, resulted in the lines being coincident as well). Here is an example area where the two layers can be seen perfectly overlapping each other (city symbology thicker in order to more easily view the line):

City and neighborhood vertex/line coincidence (city = thick black, neighborhood = thin red)

All Done!

At last, this is what the final finished feature class looks like (with the St. Paul city boundary also turned on):

Finished St. Paul neighborhoods boundary layer (with St. Paul city boundary layer)

Here is the companion image – WITH St. Paul neighborhoods – for the first image in this post WITHOUT the neighborhoods:

Minneapolis and St. Paul, both with neighborhood boundaries

This was lots of fun and, in the end, I was rewarded with a piece of data that would allow me to move forward on my larger project with a bit more consistency between the state’s two largest cities. Thanks for reading!