Forum Discussion

Wim's avatar
Wim
Steady Solver
3 months ago

Please remove public racks from the City Explorer

In the City Explorer view for Chicago, about half of the "Divvy stations" are not actually stations at all. They're just public bike racks. You can lock an ebike here without a fee, but you can't get or leave a classic bike. They shouldn't show up in the City Explorer.

In the Lyft last mile API json (https://s3.amazonaws.com/lyft-lastmile-production-iad/lbs/chi/station_information.json) these are indicated with:

    "rack_model": "CITY_PUBLIC_RACK"

And in the GBFS station information feed (https://gbfs.divvybikes.com/gbfs/en/station_information.json) they are indicated by:

    "station_type": "lightweight",
    "has_kiosk": false

In the Graph QL API (https://account.divvybikes.com/bikesharefe-gql) they're also indicated as "lightweight", but so are e-bike only stations. Fortunately the station name always seems to start with "Public Rack", so they can still be distinguished by the name prefix e.g.:

{
  "stationId": "motivate_CHI_1806749740082741752",
  "stationName": "Public Rack - Milwaukee Ave & Lawrence Ave",
  "location": {
    "lat": 41.967385,
    "lng": -87.760169,
    "__typename": "Location"
  },
  "bikesAvailable": 0,
  "bikeDocksAvailable": 2,
  "ebikesAvailable": 0,
  "totalBikesAvailable": 0,
  "isValet": false,
  "isOffline": false,
  "isLightweight": true,
  "siteId": "",
  "ebikes": [],
  "lastUpdatedMs": 1682970704000,
  "__typename": "Station"
}

Here is a google maps example of what one of these "stations" looks like, i.e. it's just a city rack:

https://maps.app.goo.gl/jmnHeaqnbtQ32QDM9 

Please remove these from the map in the bike share mobile app. They're too many, too visually noisy, and not useful.

Those city racks are almost always empty, so all they do is put a whole bunch of "Zero" pins on the map and obscure the real stations, like you can see in the screenshot below - the pin near the CTA station is a "real" bike share station, but all the zero pins on S Pulaski Rd are just public racks.

 

4 Replies

  • devvy's avatar
    devvy
    Resourceful Rider

    Wim​ is there a way to generate a list of "classic" stations one hasn't visited?

    I'm asking because I believe I'm down to 168 stations to visit, and I imagine based on the process that I've been using so far that tracking down the last dozen or so stations is going to be a nightmare unless I can just have a list, or better yet a map of remaining stations.

    What are your thoughts? Surely there must be a way I can pull my own data out of the app to see which stations I have visited and subtract that from a list of all "classic" stations.

     

    • Wim's avatar
      Wim
      Steady Solver

      devvy​  Looks like your city explorer is almost complete. Impressive!

      According to the station info feed i.e. https://gbfs.divvybikes.com/gbfs/en/station_information.json there are currently 951 classic stations, 92 "lightweight" (ebike-only) stations. So 1043 real stations, and the rest of the 1812 total are just public racks.

      You can also request your city explorer lat/lng visits from the Lyft API at https://api.lyft.com/v1/last-mile/city-explorer-map-items but this is a bit more tricky because you need an auth token (can get it from browser cookies after logging in on web), set the Accept header as application/json and you also you need to override your User-Agent header to "pretend" to be the Divvy app. I set this User-Agent to get the explorer visits:

      com.motivateco.chicagoapp:iOS:15.7:14.47.3.169427500

      With the lat/lng of the stations from gbfs feed and the lat/lng of "visited" points from the city-explorer-map-items lyft endpoint, you would be able to deduce the stations not yet visited.

      How good is your programming? I'm in no way affiliated with Divvy or Lyft, and have only worked out this stuff out from reverse-engineering of the iPhone app, but I can share some of the Python code if you like.

      I was able to combine these data sources to render my own "city explorer" annotated using the Google maps API, I'll attach some pictures of that. Red pins are e-bike only, blue are classic stations, and cyan are my station visits (additionally the number rendered on the cyan pins is the visit count- the Lyft API doesn't tell you a visit count but you can deduce it from start/end locations of your trips). These are just screenshots but in the real Google map render you can pan and zoom of course.

       

      • devvy's avatar
        devvy
        Resourceful Rider

        This is incredibly helpful! I am not much of a programmer (I was a camp counselor for a Python summer camp about 15 years ago, so at that point I had the programming chops necessary to stay ahead of the 8-13 year old campers) but I have a couple smart friends who can help me generate a map like the one you've got using the Google maps API, given the instructions you've shared for the "tricky" part. Thank you!!

        Previously, I was just using the data from:

        https://data.cityofchicago.org/Transportation/Divvy-Bicycle-Stations-Map/bk89-9dk7

        Which claims that there are 1046 rows upon download, and matches up nicely to the 1043 from the gbfs station feed. I did not realize that 92 of the stations are "lightweight" and therefore outside of my criteria for visiting. (This means my adventure is coming to a close more quickly than anticipated)

        I have seen these lightweight stations around and am disappointed to know that the city counts them as part of the total number of divvy stations (see the attached pic from my April 26th ride)

        A quick glance at your map shows that I missed a straggler at Ave L & 114th. Ah well, at least I'll be near the Pete's Fresh Market #5 @ 3448 E 118th St, which I have determined over the course of my adventures to be possibly the bougiest grocery store in the city.

        On Tuesday May 6th, at 7pm, I plan to be at The Fat Shallot @ 2902 Central St, Evanston, IL 60201 to gather with a few friends in celebration of having visited every station! You're invited! I will be ceremonially visiting the station across the street as the last station, even if there's <10ish stations I'll have to clean up later in May.

  • Lyft_Omar's avatar
    Lyft_Omar
    Bike Angels Team

    Hey Wim!

    Thanks for the breakdown and feedback about how public bike racks are counted as Divvy Stations. I am flagging this feedback internally and will get back to you if this does change as for an app experience I can definitely see how this may be confusing for new riders plus, as you stated, adds visual clutter.