CGImap
CGImap | |
---|---|
Author: | See list of contributors |
License: | GPL-2.0 (free of charge) |
Platform: | Linux/Ubuntu 22.04 |
Version: | 0.8.8 (2022-07-27) |
Language: | English |
Source code: | https://github.com/zerebubuth/openstreetmap-cgimap |
Programming language: | C++17 |
CGImap is a re-implementation of selected performance critical parts of the OSM API 0.6 in C++ (in productive use) |
Introduction
CGImap is a C++ implementation of selected performance critical parts of the OSM API 0.6 using the FastCGI interface. It was originally developed to overcome performance limitations present in the openstreetmap-website Rails application, including but not limited to large memory consumption, slow XML parsing, overall slow execution.
As CGImap doesn't manage any database schemas and tables on its own, it can only be deployed alongside the openstreetmap-website application to replace selected API endpoints by their performance optimized counterparts, see Section Production Deployment. CGImap directly interacts with the API DB, and completely bypasses the openstreetmap-website Rails application.
An important design principle is that for every feature, a Rails port counterpart needs to be implemented first, which doubles as a reference implementation.
Features
Currently, CGImap implements:
- the "map" API call
- single node, way and relation fetches
- multiple node, way and relation fetches
- the "full" way and relation calls
- changset metadata downloads, including discussions
- single node, way and relation history calls
- single node, way and relation specific version fetches
- multiple node, way and relation specific version fetches
- changeset downloads
- changeset uploads
(Always check the project GitHub repo for an up-to-date list.)
Supported output formats include OSM XML and OSM JSON. For user authentication Basic Auth, OAuth1.0a or OAuth 2.0 can be used.
Deviations from Rails port
- Diff upload rejects empty keys.
- Diff upload relies on SQL to create new object version and changeset timestamps, thereby ignores the time reported by the frontend server.
Installation
Installation instructions are available on the project's GitHub repo.