Category: Information

Easily find TIF districts in your ward but good data on their current obligations is missing

Ald. Ameya Pawar speaks to the Board of Education (WBEZ/Bill Healy)

Alder Ameya Pawar is willing to give back TIF money from projects in the 47th Ward to the Chicago Public Schools. Photo: Bill Healy for WBEZ

Alders Ameya Pawar (47th), Pat O’Connor (40th), Joe Moreno (1st) and Pat Dowell (3rd) are introducing a resolution at today’s budget committee to ask all alders to choose and stop certain TIF-funded projects in their wards (instructions on how to find TIF districts are below) so that the money can be declared as a surplus.

Part of the surplus would be given to the Chicago Public Schools, where it would have gone had property tax revenue never been diverted to the TIF.

What is TIF? Quick answer: All of the new property tax revenue generated after the date the “Tax Increment Financing” district took effect goes to a fund that can only be spent on certain kinds of projects within that district, while all of the property tax revenue generated at the amount that was collected just before the district took effect continues to go to the city, the school district, and other taxing districts.

Alder Pawar has already picked $16.5 million worth of projects that he’s stopping in order to give back the money to schools.

It’s still very difficult to know how much unallocated money is in a TIF district’s bank account (what is essentially surplus). It’s also still very difficult to figure out which projects have had money allocated to them (called an obligation) but not yet spent.

Patty Wetli reported in DNAinfo Chicago yesterday:

The resolution works as a companion to legislation [actually a resolution] previously introduced by Ald. Carlos Ramirez-Rosa (35th), which called for the city to funnel unallocated TIF dollars back to CPS. [read the resolution]

Rather than allowing Mayor Rahm Emanuel and his budget office to decide where to sweep for TIF surplus dollars, Pawar said aldermen should be leading the effort, stating which TIF projects they’re willing to give up.

Instructions to find TIF districts in your ward

You can use Chicago Cityscape’s Places maps to easily find which TIF districts overlap any of the 50 wards.

  1. Find your ward. Use the 3rd Ward, Alder Pat Dowell because Wetli already explored the 47th Ward TIF districts.
  2. Scroll down to the table called “3rd Ward, Ald. Pat Dowell’s Nearby Places”.
  3. Type “TIF district” in the table’s search form. Gasp at the fact that there are 17 districts that overlap the 3rd Ward.
TIF districts that overlap the 3rd Ward (Alder Dowell)

This screenshot shows 10 of the 17 TIF districts that overlap the 3rd Ward.

Let’s look deep at the TIF district called “24th/Michigan”, 76.7 percent of which is in the 3rd Ward, has several millions of dollars in obligations to vaguely-described projects, to continue paying for already-built projects, or future projects. This includes $6.4 million for the Cermak Green Line station and $4.5 million annually for an unspecified project at the National Teachers Academy pursuant to an intergovernmental agreement with the Chicago Public Schools.

24th/Michigan TIF district

A map of the 24th/Michigan TIF district.

The National Teachers Academy project isn’t even on the city’s mildly useful TIF projects map.

Alder Dowell has her work cut out for her to find projects that are in both the 3rd Ward and in one of the 17 intersecting TIF districts that she would be willing to cut so that the Chicago Public Schools are less broke. The same arduous but noble task belongs to all of the other alders as well.

Adrienne Alexander tells ChiHackNight what she does as a union lobbyist

Adrienne Alexander speaking to ChiHackNight at Braintree. Photo by Chris Whitaker.

Adrienne Alexander speaking to ChiHackNight at Braintree. Photo by Chris Whitaker.

ChiHackNight is Chicago’s weekly event to build, share & learn about civic tech. Me and 100 of my friends (50 of whom are new every week!) meet in the Braintree auditorium on Tuesday nights at 6 p.m. on the 8th floor of the Merchandise Mart. Sign up for notifications on upcoming presenters. The content of my blog post is derived from real-time note taking.

Adrienne Alexander, or @DriXander on Twitter, came to ChiHackNight last night to tell us about her experience as a lobbyist working for the state’s largest public employees union. She lobbies the Chicago City Council and the Illinois state legislature for bills and budget modifications that would impact the members of the American Federation of State, County and Municipal Employees council 31.

Members of AFSCME (afs-me) are staff at numerous Chicago city departments and in state government. Alexander watches new bills that come in and analyzes what their impact might have on its members.

She gave the example of the privatization legislation that she lobbied, the Privatization Transparency and Accountability Ordinance, for three years. Salon reported on the PTAO in 2013, saying, “[it] is designed to help prevent abuses of privatization, and avoid the kinds of deals negotiated in the past that were intended to help close budget deficits but turned out to be massive boons for corporations and Wall Street while losing long-term revenue for the city.”

Alexander, however, had been battling efforts to privatize city functions earlier. In 2011, she said, Mayor Rahm Emanuel was trying to privatize the water billing group. This would have been realized by amending the budget and reducing the amount budgeted for that group of staff.

“We represented those folks”, she said. “It got a lot of aldermen upset, it was supposed to save $100,000 annually but also lay off 40 people.” It didn’t happen. And neither did the 311 privatization that Emanuel proposed in 2015 for the 2016 budget. 

Alexander said that it was hard to keep the press focused on this issue for three years, because nothing was happening. “If there’s nothing happening, they would say, then there’s nothing to write about”, she said.

It was passed in November 2015. “It’s hard to get things passed that don’t have the mayor’s support,” Alexander said. “A lot of the calls the aldermen get are not about policy, but about alleys, trash, tree trimming, these very ‘quality of life’ issues specific to their ward”. 

There’s a good reason – for them –in all of this, she explained. “You can be the most citywide alderman, really focused on policy, but if you don’t take care of the stuff in your ward then you will lose your election.”

Alexander gave some advice to ChiHackNight members who are building tools that explain why some policies aren’t working and should change. Claire Micklin asked how to get alders to “mobilize on and care about policy issues, and can they affect policy change from the ground up if the mayor isn’t necessarily generating or supporting that policy issue?”

Micklin led the development of “My Building Doesn’t Recycle”, a map where Chicagoans can report that their multi-unit building doesn’t have a third-party recycling service (required if the tenants of a building with 5 or more units request it).

Alexander said “I think there’s not so much a culture of [alders generating their own policy initiatives] here, but I think it’s possible”.

She advised Micklin, and anyone else who’s working to change a city policy, to:

  • Choose your sponsor carefully.
  • Be clear of what your expectations are, have a plan so you can help guide them
  • Have grassroots support, so it’s more than one person coming and talking to them about it
  • Make sure they’re hearing about it from different places, and find out who else they’re listening to.

In each ward, she said, there’s at least one organization that an alder really cares about, so if that organization is making something an issue, or it would be beneficial to that organization, then they could be helpful.

I’ve seen this kind of organization-derived influence a lot in property development matters. If there’s a neighborhood-based organization that purports to represent resident issues in a specific boundary, then the alder who’s receiving a new property development proposal will ask that the developer meet with the organization to gain their approval. I’ve seen situations, especially in the 1st Ward, where the alder supports the development if the organization supports the development.

Alexander concluded her response to Micklin’s question, saying, “It’s really helpful if you can do a lot of the legwork, and you can get the alderman plugged into the process.”

Converting a transit agency’s GTFS to shapefile and GeoJSON with QGIS

Many years ago I wrote a tutorial on how to use an ArcGIS plugin to convert a transit agency’s GTFS package – a group of files that describe when and where their buses and trains stop – into files that could easily be manipulated by popular GIS desktop software.

That was so long ago, before I became an expert in using QGIS, a free and open source alternative to ArcGIS.

This tutorial will show you how to convert GTFS to a shapefile and to GeoJSON so you can edit and visualize the transit data in QGIS.

Prerequisites

First you’ll need to have QGIS installed on your computer (it works with Linux, Mac, and Windows). Second you’ll need a GTFS package for the transit agency of your choice (here’s the one for Pace Suburban Bus*, which operates all suburban transit buses in Chicagoland). You can find another transit agency around the world on the GTFS Data Exchange website.

Section 1: Let’s start

  1. Open QGIS.
  2. Load your GTFS data into the QGIS table of contents (also called the Layers Panel). Click Layer>Add Layer>Add Delimited Text Layer. You will be adding one or two files depending on which ones are provided.

    QGIS add delimited text layer

    Add delimited text layer.

  3. Now, here it can get tricky. Not all transit agencies provide a “shapes.txt” file. The shapes.txt file draws out the routes of buses and trains. If it’s not provided, that’s fine, but if you turn them into routes based on the stops.txt data, then you will have funny looking and impossible routes.

    QGIs browse for the stops.txt file

    Browse for the stops.txt file

  4. Click on “Browse…” and find the “stops.txt”. QGIS will read the file very quickly and determine which fields hold the latitude and longitude coordinates. If its determination is wrong, you can choose a different “X field” (longitude) and “Y field” (latitude).
  5. Click “OK”. A new dialog box will appear asking you to choose a coordinate reference system (EPSG). Choose or filter for “WGS 84, EPSG:4326”. Then click “OK”.
  6. The Pace bus stops in the Chicagoland region are now drawn in QGIS!

    Pace bus stops are shown

    Pace bus stops are shown

  7. If the GTFS package you downloaded includes a “shapes.txt” file (that represents the physical routes and paths that the buses or trains take), import that file also by repeating steps 4 and 5.

Section 2: Converting the stops

It’s really easy now to convert the bus or train stops into a shapefile or GeoJSON representing all of those points.

  1. Right-click the layer “stops” in the table of contents (Layers Panel) and click “Save As…”.
  2. In the “Save vector layer as…” dialog box, choose the format you want, either “ESRI Shapefile” or “GeoJSON”. **
  3. Then click “Browse” to tell QGIS where in your computer’s file browser you want to save the file. Leave the “CRS” as-is (EPSG:4326).

    Convert the bus stops to a shapefile or GeoJSON.

    Convert the Pace bus stops to a shapefile or GeoJSON.

  4. Then click “OK” and QGIS will quickly report that the file has been converted and saved where you specified in step 3.

Section 3: Converting the bus or train routes

The “shapes.txt” file is a collection of points that when grouped by their route number, show the physical routes and paths that buses and trains take. You’ll need a plugin to make the lines from this data.

  1. Install the plugin “Points to Paths”. Click on Plugins>Manage and Install Plugins… Then click “All” and search for “points”. Click the “Points to Paths” plugin and then click the “Install plugin” button. Then click “Close”.

    Install the Points to Paths plugin.

    Install the Points to Paths plugin.

  2. Pace bus doesn’t provide the “shapes.txt” file so we’ll need to find a new GTFS package. Download the GTFS package provided by the Chicago Transit Authority, which has bus and rail service in Chicago and the surrounding municipalities.
  3. Load the CTA’s “shapes.txt” file into the table of contents (Layers Panel) by following steps 4 and 5 in the first section of this tutorial.  Note that this data includes both the bus routes and the train routes.

    QGIS load CTA bus and train stops

    Import CTA bus and train stops into QGIS

  4. Now let’s start the conversion process. Click on Plugins>Points to Paths. In the next dialog box choose the “shapes” layer as your “Input point layer”.
  5. Select “shape_id” as the field with which you want to “Point group field”. This tells the plugin how to distinguish one bus route from the next.
  6. Select “shape_pt_sequence” as the field with which you want to “Point order field”. This tells the plugin in what order the points should be connected to form the route’s line.
  7. Click “Browse” to give the converted output shapefile a name and a location with your computer’s file browser.
  8. Make sure all  of the options look like the one in this screenshot and then click “OK”. QGIS and the plugin will start working to piece together the points into lines and create a new shapefile from this work.

    These are the options you need to set to convert the CTA points (stops) to paths (routes).

    These are the options you need to set to convert the CTA points to paths (routes).

  9. You’ll know it’s finished when the hourglass or “waiting” cursor returns to a pointer, and when you see a question asking if you would like the resulting shapefile added to your table of contents (Layers Panel). Go ahead and choose “Yes”.

    QGIS: CTA bus and train points are converted to paths (routes)

    The CTA bus and train points, provided in a GTFS package, have been converted to paths (routes/lines).

  10. Now follow steps 1-4 from Section 3 to convert the routes/lines data to a shapefile or GeoJSON file.**

Notes

* As of this writing, the schedules in Pace’s GTFS package are accurate as of January 18, 2016. It appears their download link always points to the latest version. Transit schedules typically change several times each year. Pace says, “Only one package is posted at any given time, typically representing Pace service from now until a couple of months in the future. Use the Calendar table to see on which days and dates service in the Trips table are effective.”

** Choose GeoJSON if you want to show this data on a web map (like in Leaflet or the Google Maps API), or if you want to share the data on GitHub.

Cataloging the city’s emails about what staff said regarding Laquan McDonald’s death

Screen grab from the released Laquan McDonald video

The City of Chicago released a trove emails spread over eight PDF files containing 3,000 pages, on New Year’s Eve, wherein city staff, including from the mayor’s office, police department, law department, discussed how they should handle countless requests from the media for information about the police shooting of Laquan McDonald.

In the middle of the night on October 20, 2014, Chicago police officer Jason Van Dyke shot 17-year-old Laquan McDonald 16 times, killing him.

Over a year later, a dashcam video of the shooting was released, sparking protests, theresignation of Chicago’s Police Chief, a federal investigation, and calls for the Mayor and State’s Attorney to resign.

I set to work that night reading as many as I could, and gathering strangers on Twitter to help read and catalog them.

This blog post is intended to point to the Google Sheet where we – over a dozen people who congregated here via Twitter – recorded the details of each message, including what it said, what we think the communicators meant, and what information was missing.

Read the Laquan McDonald emails catalog.

Swiss transit journey planners can guide you to the top of any mountain

Steven’s note: I originally wrote this in January 2017 for Transitland, my contract employer at the time. Links may be broken.

Looking west from Mount Rigi-Kulm and you can see the cloud layer that prevents you from seeing Lake Lucerne. The two cog railways are parked in the middle.

Looking west from Mount Rigi-Kulm and you can see the cloud layer that prevents you from seeing Lake Lucerne. The two cog railways are parked in the middle.

A month ago I hopped over to Germany to start a holiday trip over Christmas and the New Year. I flew into Frankfurt but I would be returning to Chicago from Zurich, Switzerland, almost three weeks later. I had spent two hours in Zurich in 2016 on a layover, and I was struck by the city’s beauty and their amazing public transport system. I made it a priority to revisit Zurich, to have a proper stay.

Before I left, I was already working to import the single GTFS transit feed for the whole country into Transitland, so I was aware of some of the transit systems. That work continues because the feed is massive; it has more than 400 operators and I need to add metadata about each of them.

I arrived the night before my mountain trip to a hotel – a 3 minute walk to the nearest entrance to Zurich’s hauptbahnhof (main station) – and I spent that whole evening planning an epic transit and mountain adventure the next day. (I stayed in because it’s also pretty expensive to go out in Zurich, so I was also saving my money for what turned out to be an _expensive _ epic trip.)

When in Switzerland, I figured, you should spend time outside on a mountain. And there’s no exception in the winter.

a view of Lake Lucerne from inside the cog railway train that's going up the mountain

It’s a cog railway up a Swiss mountain, of course it’s going to look steep like this.

I googled “nearest mountain to Zurich” and found Mount Rigi. I never validated if Mount Rigi is the nearest mountain, but after reviewing details on how to get to the base and how to get to the top (the mountain has its own website), I could tell it would be possible to go there and return in the same day.

Mount Rigi has multiple peaks, the tallest of which is Rigi Kulm at 1,798 meters, and you can plan a trip directly there with a single app.

You can use the Swiss Federal Railways (SBB) smartphone app or website to plan a trip from anywhere in Switzerland to the cog railway station below the restaurant atop Rigi Kulm. Seriously.

I wanted to use as many modes as possible, and I don’t like going on the same route more than once, so I adjusted SBB’s recommended route to travel from Zurich to Rigi Kulm via Lucerne and Vitznau. This was my outgoing itinerary:

  • Depart Zurich HB at 10:04 on InterRegio 2637 to Lucerne, arriving at 10:49
  • Depart Luzern Bahnhofquai (train station dock) on a boat across Lake Lucerne at 11:12 to Vitznau at the base of the mountain, arriving at 12:09
  • Depart Vitznau on Rigi-Bahnen 1127 at 12:15, arriving to the peak at 12:47

After spending about five hours on the mountain – I took a small cable car to a second peak – I heaaded down the mountain on a different cog railway to Arth-Goldau, a valley town with InterCity train service direct to Zurich.

screenshot of the SBB journey planner showing the trip from Zurich to the top of Mount Rigi-Kulm, changing from an intercity train to a boat to a cog railway.

The SBB website shows my actual itinerary. This isn’t the first recommended itinerary because there are more direct and faster ways to get to Rigi Kulm from Switzerland, but I wanted to ride in a boat so I added the “via” stop in Lucerne.

What was more fascinating than the legendary on-time performance and convenient and short connection times of the Swiss public transport network was that I bought trips for the boat, two cog railways, and the return train on a single ticket.

I could have bought a single ticket for the entire trip back in Zurich before I departed but I was in a hurry to catch that 10:04 train and it takes a bit longer to buy a multi-stop journey from the ticket vending machines. (You can also buy the ticket on the website and app, which quoted 98 Swiss Francs, or $96, without the return from Arth-Goldau.)

The second cog railway I took on this trip, to Arth-Goldau, opened in 1875, four years after the first cog railway of the day from Vitznau. That one opened in 1871, the first cog railway in Europe.

If I had missed the 10:04 train, there would have been another train leaving for Lucerne less than 30 minutes later, but I would arrive about 30 minutes early for the next boat and cog railway because they run less frequently.

On the day I traveled, Friday, January 6, the journey took 2 hours and 43 minutes. I checked SBB’s website for this blog post and they recommend a differently, slightly longer journey on weekends, at 3 hours and 1 minute. And they really mean that 1 minute.

The Swiss railway clock’s second hand waits at the 58.5 second mark and proceeds when it receives a “minute impulse” signal from the SBB’s master clock. Train operators then depart.

Get to know the Swiss timetable

The single feed includes the Swiss Federal Railways (SBB), city transit systems, intercity buses like PostAuto, funiculars, cable cars, cog railways, and even chair lifts.

You can take a sesselbahn (chair/ski lift) from Feldis/Veulden to avoid an uphill hike to Mutta; it’s operated by Sesselbahn und Skilifte Feldis AG. You can find its two stops and straight route up the mountain in Transitland’s Feed Registry.

We’re working to import all of them into the Transitland datastore, and we’ll get there eventually (it takes a lot of time to add metadata like an operator’s metropolitan coverage area and canton). For now, though, we’ve added the stops and routes for 11 operators, including all of the ones that covered my trip to Mount Rigi.

Steven’s note: there used to be an embedded map hosted at the following URL:

https://tangrams.github.io/tangram-frame/?noscroll&maxbounds=46.891,7.667,47.501,9.198&url=https://transit.land/images/switzerland-transit/scene.yaml#10.6461/47.1304/8.4492

Edit this map yourself in Tangram Play. These routes were extracted via Mobility Explorer and its direct connection to the Transitland API and I edited some of them because many of routes in the Swiss feed are very simplified.