- Q: What is this site about?
- A: This is tool to browse OpenStreetMap history. Each object on this map is tracked with all changes made by users. This tool allows you to see how some road or building on city boundaries looked liked before. The aim of this project is to browse changes visually and not by reading XML documents.
- Q: Why does changeset is loaded so long?
- A: To load and display all changeset data we must request all data of created or modified objects (ways, nodes, relations) and all previous versions of modified or removed objects. This takes much time because OSM API doesn't have methods to retrieve previous version of an object with all dependencies. And a lot of requests to OSM API are made. But after all changeset info is loaded from OpenStreetMap database it's cached and retrieved instantly on next page load.
- Q: Do you work on OSM Foundation?
- A: No. This project created just for fun.
- Q: Is your tool opensource?
- A: Yes. You can find it on Bitbucket.
- Q: Does this site store OSM dump?
- A: No. History viewer use OSM API to retrieve data. When some large data is loaded from OSM database (changeset info, relaion version or way version) it's cached in Google App Engine storage to minimize requests to API.
- Q: Why don't use standard OSM history UI?
- A: It's not user-friendly. And I want to see changes visually. Unfortunately OSM API is not good at getting full version of some object at any timestamp. And version number doesn't help.
If you edir a road by moving some point you'll find that node version changed but way version is still the same. So road with some fixed version can look very different in different points of time.
OSM API has no easy-to-use way to get some specific version of way. Some magic is needed:
Loading relation version is even more strange
- Request version X with list of nodes IDs;
- Request each node coordinates at time of way version (one request for each node).
So loading version of some big road (40 points) needs 41 request to API. Loading relation is even more expensive.
To make visual difference of a changeset each modified way/relation/node must be loaded in two version: before and after. Each removed object must be loaded at previous version to show on map. You can easy count number of requests to build one simple page.
- Request version X with list of ways IDs and nodes IDs.
- Request each node coordinates at time of relation version (one request for each node).
- Request each way version at time of relation (one request for each way).
- For each way request each node coordinates at time of relation version (one request for each node for each way).
- Q: Why Python and GAE?
- A: Python is simple, powerful and awesom language. GAE is available for free.
You can write me a letter: firstname.lastname@example.org