Skip to content

Latest commit

 

History

History
137 lines (85 loc) · 8.34 KB

README.md

File metadata and controls

137 lines (85 loc) · 8.34 KB

hoot_logo

Hootenanny:

  1. A gathering at which folksingers entertain often with the audience joining in.

Conflation:

  1. Fancy word for merge

Hootenanny is an open source map data conflation tool developed with machine learning techniques to facilitate automated and semi-automated conflation of critical Foundation GEOINT features in the topographic domain. In short, it merges multiple maps into a single seamless map.

Goals:

  • Automatically combine geospatial features for decision making
  • Allow for reviewing and manually resolving features which cannot be automatically matched with sufficient certainty
  • Maintain geometry and attribute provenance for combined features
  • Create up-to-date routable transportation networks from multiple sources

Documentation

pdf

This documentation is also available as part of the release package: docs/HootenannyUserGuide.pdf (located in hootenanny-*.tar.gz).

There is also an introduction video of a talk from State of the Map US 2019.

For installation from RPM, follow the guide in the rpms repo. If you want to install from source without downloading the release, follow this.

Conflatable Feature Types

Hootenanny has specifically tailored conflation algorithms available for the following data types:

Any feature whose type does not fit into the list above or has no type at all, will be conflated with Generic Geometry Conflation, which uses a simpler approach than the type specific conflation algorithms.

You can create your own custom conflation algorithms for additional feature types via Javascript or C++.

Conflation Workflows

A conflation workflow defines the manner in which two maps are merged together. Hootenanny has these workflows available.

Hootenanny leverages the OSM key value pair tag concept to support translation between various data schemas and supports the following schemas:

  • Topographic Data Store (TDS)
  • Multi-National Geospatial Co-Production Program (MGCP)
  • Geonames
  • OSM
  • others

Users can define their own custom schema translations via Javascript or Python.

Hootenanny has the capability to let you selectively pick the features that are conflated from your data to save you from pre-conflation data wrangling.

Some examples:

Hootenanny has several available filters that may be used to perform additional types of feature filtering during conflation.

Hootenanny has limited data validation reporting of its own, but JOSM validation routines may be invoked via Hootenanny during batch processing of data.

Hootenanny has a variety of map cleaning capabilities to automatically correct erroneous data. Some of them are invoked automatically during a conflation job, however, you may also run them separately. In addition to its own built-in cleaning operations, Hootenanny is also integrated with the auto-fix capabilities of JOSM.

Configuration

Although Hootenanny is configured by default to provide the best conflation results, at times you will need to tweak its wide range of configuration options in order to get the best conflated result for your input data.

Web User Interface

Hootenanny's web user interface is built upon the open source Mapbox iD Editor, which provides an intuitive and user-friendly conflation experience.

Web Services API

Access to Hootenanny capabilities are exposed through a web services API for those wishing to develop their own conflation clients. The web services use OAuth authentication.

Command Line Interface

Basic conflation example:

#  conflate two datasets together
hoot conflate input1.osm input2.osm output.osm

More examples

Programming Language Bindings

Hootenanny has nodejs bindings available which expose core conflation capabilities for creating custom workflows.

Basic conflation example:

//  conflate two datasets together
var hoot = require(process.env.HOOT_HOME + '/lib/HootJs');
var map = new hoot.OsmMap();
hoot.loadMap(map, "input1.osm", false, 1);
hoot.loadMap(map, "input2.osm", false, 2);
new hoot.UnifyingConflator().apply(map)
hoot.saveMap(map, "output.osm");