Inspiration
In the last few years the cost of living has increased markedly. In our opinion this has been especially apparent in the prices for Kebabs. To eat a Kebab nowadays means sacrificing a lot. This trend must be stopped and that can only be accomplished by educating the public and developing an understanding of the problem we face.
What it does
The Dönerkarte (Kebab Map) is an interactive map combining search functionality with analysis. Besides search for nearby Kebabs according to the user's preferences, the main feature is offering an advanced insight into the Kebab landscape. Currently the user can use Dönerkarte to analyse the following aspects:
- Actually shows all Kebabs in the given view region (instead of the weird behavior from Google Maps when searching for Kebabs)
- Density heat map: Where are especially many Kebab offerings and where do you have to walk especially long to get your hunger sated.
- Price heat map: Find trends in Kebab pricing across the city and determine places to avoid visiting.
- General price trend (missing UI): See how the Kebab pricing has changed in the last few years :(
How we built it
The frontend uses Flutter with the flutter_map package as a central building block. It communicates with the backend using a HTTP-based JSON API. The density heat map is also implemented in the frontend.
The backend is built in Rust using the just (this Friday!) released Rocket v0.5 web framework. It uses SQLx for compile-time SQL query checking for confident hacking. Besides simple spatial queries for kebab locations there's also a complex query for generating a "heat map" of kebab prices. (divide view into grid cells and calculate price average per cell)
The database used is PostgreSQL with the PostGIS extension deployed using a Docker container. The database schema/migrations are handled by SQLx.
While the ultimate end goal would be a crowdsourcing system for all the Kebab data, for our initial data import we've used the Google Maps API and Python to find all Kebab stands in Munich. Unfortunately the API doesn't offer/know the prices so we've painstakingly gone through each and every restaurant to determine prices via information online (often low-quality photos!).
Challenges we ran into
No member had any prior experience with GIS (geographic information systems) which led us down some rabbit holes but also helped us gain new perspectives. (e.g. lat/lon isn't generally sufficient to determine a point location; there are many geographic coordinate systems in use with different trede-offs)
Using SQLx compile-time query checking wasn't as easy as initially expected to use with PostGIS since the PostGIS-specific data types aren't supported out of the box by SQLx. Fortunately there seems to be an active Rust GIS community so another crate handled that.
For initial feasibility analysis and experimentation we've also had to learn the basics of QGIS which is a fully-featured GIS. (e.g. for learning about how the density heat map should work)
Getting access to the official Google Maps API was a bit annoying due to billing setup etc. Even after gaining access the exact search results for a query are a bit of a mystery, so we had to implement some scanning and processing before we could arrive at our final dataset. And of course the manual labeling of kebab prices was an "interesting" struggle.
Accomplishments that we're proud of
We were able to implement our defined MVP without any major concessions and got a working prototype. We are probably the only ones in existence which have the Kebab pricing data set for Munich city. And we were able to do some cool (and depressing) analysis with the data we've gathered.
What we learned
We've learned a lot about GIS and all the other technologies we've used. Kebab pricing trends are very depressing. :(
What's next for Dönerkarte
We still have many feature ideas which weren't feasible in the short time we had. Some things we think would elevate Dönerkarte are:
- Crowdsourcing of data: Always up-to-date pricing information and regular updates for better data analysis
- Rating heat map: Are there regions of Kebab excellence?
- Analysis of historic data (e.g. perform analysis on data from last year; see the delta/changes)
- More useful Kebab data (e.g. opening hours, vegan options; "actually spicy")
- Notifications of regional special offers (e.g. re-opening discounts)
- Make a dent and stop the Kebab price inflation!
Built With
- docker
- flutter
- google-maps
- json
- postgis
- postgresql
- python
- rocket
- rust
- sqlx
Log in or sign up for Devpost to join the conversation.