by ActionStreetMap

Core OSM processing logic for building map based game in Unity

( Crawled an hour ago )

Project status

Project is in maintenance mode: I decided to rewrite core logic using C++11 and add new features. That's why I started new project instead:


ActionStreetMap (ASM) is an engine for building real city environment dynamically using OSM data.

The main goal is to simulate a real city, including the following:

  • rendering of different models (e.g. buildings, roads, parks, rivers, etc.) using OSM data for given location and using terrain tiling approach.
  • rendering of non-flat world by using Data Elevation Model (DEM) files.
  • adding a character to the scene, which makes it capable to interact with the environment.
  • filling environment with people, cars, animals, which have realistic behaviour
  • using some external services to extend environment (e.g. weather, famous places, events, public transport schedule, etc.).
  • Multiplayer.

The engine can be used to build different 3D-games (like car simulations or GTA 2/3 ) or for some map tools on top of this framework (target is mobile devices). Actually, in this case the game world can be limited only by OSM maps which means that it will cover almost entire Earth. More info can be found here.

Internally, framework is decoupled from Unity3D as much as it's possible taking into account related performance impact. In theory, it can be ported to other platforms to build map data visualization application.

Used technologies: Unity3D, C# (JavaScript is possible for Unity scripting in Demo app), Reactive Extensions

Used source code of (If I missed something and you think is important to mention, let me know): Triangle.NET, Clipper, UniRx.


ActionStreetMap consists of two repositories:

  • Framework contains source code of ASM framework (Microsoft Visual Studio 2013 solution, .NET 3.5 as target platform, Unity is referenced via UnityEngine/ UnityEditor assemblies).
  • Demo contains source code of showcase (Unity project, ASM framework is referenced via assemblies).

Software architecture

ASM is built using Composition Root and Dependency Injection patterns and consists of the following projects:

  • ActionStreetMap.Infrastructure - contains classes which helps to build frameworks infrastructure (e.g. dependency injection container, file system API, etc.).
  • ActionStreetMap.Core contains classes of core map logic (e.g. map primitives, MapCSS parser and rules, scene classes).
  • ActionStreetMap.Maps contains OSM specific classes (e.g map data index, OSM data parser, element visitors).
  • ActionStreetMap.Explorer contains application specific logic (e.g. MapCSS declaration rules, model builders, has unity classes dependency).
  • ActionStreetMap.Unity contains platform specific code (uses conditional compilation symbols to implement platform specific features).
  • ActionStreetMap.Tests contains unit and integration tests. Also has Main function to run logic as console application (useful for profiling, debugging map specific code).