Skip to content
Interactive temporal and spatial data explorer written in D3.js
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
css
data
js
.gitignore
LICENSE
README.md
index.html
screenshot.png

README.md

MapMiner

MapMiner enables interactive visualization and exploration of temporal and spatial data. A map displays a heat map of locations for a time span selected on the timeline. Features like scrubbing, dragging and scroll wheel zoom for both map and timeline make diving into big datasets intuitive and fun.

MapMiner was developed as part of the HeapCraft project. The project site features an interactive demos of MapMiner with Minecraft player data: demo1 (3.4MB), demo2 (18.8MB). The demos might take a few seconds to load.

The project was developed as part of a master's thesis to explore data and create visualizations. Many features are undocumented and not exposed to the user. Most of them can be found in comments inside the source code.

MapMiner uses WorkerQueue for processing large amounts of data in a background thread without blocking the UI.

MapMiner Screenshot

Data Format

The input file is loaded from the path given by the url query parameter dataURL. The default value is data/spacetime.json. This repo includes an example file which is derived from gameplay recorded on a Minecraft server. It needs to be decompressed before it can be used.

The input data format is a JSON object:

{
  "step": 180000,
  "enum": {...},
  "timeline": {...},
  "pos": {...}
}

To reduce data size, strings are substituted with integers. The mapping is stored in the enum object. It contains 4 different string groups: player, world, event, material. Assigning enum['material']['LOG'] = 1 means the material LOG can be referenced using the id 1.

Another method used to reduce data size is quantization. The temporal resolution is stored in step (180000ms, or 3min). The spatial resolution is one pixel (one block, in case of Minecraft; ignoring the z component). That way, thousands of player move events can be reduced to:

  • During the 8 minute interval starting at a, player b moved a distance of c blocks (timeline)
  • In world w, the 8 minute interval starting at a, player b spent c milliseconds on block x,y (pos)

Timeline data contains numbers associated with events. That number is usually number of event occurrences, or any value accumulated during the time interval. The data can be accessed using the key path schema timeline[intervalStart][playerEnum][eventEnum].

Position data is represented as using a sparse matrix, where all non-zero values and their coordinates are included in a list: [[x, y, v], ...]. In the case of a position heat map, v represents time spent at that position. The data can be accessed using the key path schema timeline[worldEnum][intervalStart][playerEnum].

Feature Ideas

  • Loading indicator.
  • Center map around significant location.
  • Grow dynamically with screen size.
  • UI to restore 1:1 zoom (pixel perfect).
  • UI to select world.
  • UI to select players.
  • UI to customize timeline information.
  • UI to load custom data and configuration (see GraphMiner).
  • Put center coordinates and zoom level in url hash.
You can’t perform that action at this time.