OpenStreetMap import

Autogen Scenery
Started in 11/2013
Description Improved autogen support for FlightGear using OSM data
Contributor(s) radi, vanosten, Soitanen, portreekid
Status Under active development as of 02/2016
Topic branches:
$FG_SRC https://gitlab.com/fg-radi/osm2city/
fgdata https://gitlab.com/fg-radi/osm2city-data/


With the recent license change, we'll be able to use OpenStreetMap data in the official FlightGear scenery. Some of the most interesting things to import from OpenStreetMap are shared objects (generic models like windturbines, power lines, water towers).

This article lists open questions, ideas and planes related to the import process.

Object types

This table lists models from the FlightGear scenery database, together with a corresponding OSM tag.

Tag Model Number of objects In OSM 25.03.2014
Antennas
  • tower:type=communication
  • man_made=antenna
Models/Communications/radio-*.xml

36,126
946

56,307
2,282

  • man_made=communications_tower
Models/Communications/fernmeldeturm_gruenwettersbach.xml 1 584 2,905
Chimneys
  • man_made=chimney
Models/Industrial/generic_chimney_01.xml 6,486 10,080
Cooling towers
  • man_made=cooling_tower
Models/Power/coolingtower.xml 251 379
Lighthouse
  • man_made=lighthouse
Models/Misc/generic-lighthouse.xml 5,148 6,658
Obelisks
  • man_made=obelisk
Models/Misc/generic_monument_01.ac 57 117
Power pylons
  • power=tower
Models/Power/generic_pylon_*.ac 2,760,804 5,465,288
Radomes
  • tower:construction=dome
Models/Communications/radome-*.xml 37 59
Tanks
  • man_made=fuel_storage_tank
  • man_made=storage_tank
  • man_made=tank
Models/Industrial/GenericStorageTank*m.xml 46,993 689
90,774
3,847
  • man_made=gasometer
Models/Industrial/Gasometer.xml 4,423 11,527
Survey points
  • man_made=survey_point
Models/Misc/trigpoint.xml 271,676 281,804
Traffic signs
  • highway=stop
Models/StreetFurniture/Stop-Sign.ac 68,443 128,354
Water towers
  • man_made=water_tower
Models/Industrial/water-tower.ac 17,132 31,366
Windturbines
  • generator:source=wind
  • power_source=wind
Models/Power/windturbine.xml 79,636

121,228
31,565

  • manufacturer=Vestas
  • manufacturer:type=V 80
Models/Power/vestas-v80-sea.xml 39

1344
52

  • man_made=windmill
- 3,928 5,961
Total 3,302,125 6,252,586
Churches
  • anemity==place_of_worship
Models/Misc/generic_church.ac 298 644,805
Petrol Station
  • anemity==fuel
Models/Commercial/Petrolstation1.ac 28 244,986
Summit Cross
  • summit:cross=yes
TODO 0 1120

http://taginfo.openstreetmap.org/keys/ lists all tags.

Questions/problems

  • Should we remove shared objects that are currently in the database, if they are not present in OSM?
    Thumbs down icon Gijs 16:18, 14 September 2012 (EDT): OSM still lacks a lot of data, so we cannot state that something doesn't exist if it isn't included in the OSM data. We can be fairly sure though that something exists (or existed) if it is present in OSM.
    Thumbs up icon Ambush (talk) 11:37, 15 December 2013 (UTC) It's right way to get GIS data from one worldwide specialized source with excellent support from a large community. If OSM have not some data existing in real world, it's better to add this data to OSM and get it back instead of support two GIS databases with duplicates.
  • In order to prevent us from adding duplicates, a certain radius around the (OSM) object location should be checked for the presence of objects. What would be a good radius?
  • In what group should the objects end up? There is an "OSM" group, but there are also specific "WINDPOWER" and "POWER" groups.

Import process

  1. Retrieve a node from the OSM data.
    • OSM data is already available in the database, so we can take the data directly from there, rather than re-importing from OSM.
  2. Assign a corresponding FlightGear model (from the #Object types table).
    • Skip the node if their is no fitting object.
  3. Check for duplicates within ... meters from the object location.
  4. ...
  5. For power pylons: Run pylon-headings.pl (from scenerytools) to properly align the pylons in the direction of their cables.
  6. ...
  7. Calculate elevation.
  8. ...
  9. Push to object database.

overpass turbo

The overpass turbo webservice is a quick & easy way to download objects from OSM which match the desired criteria (e.g. all terminal buildings in europe) http://overpass-turbo.eu/

here is an example to get the lon/lat center of each building - no need to run osmconvert anymore!


[out:xml][timeout:25];
// gather results
(
  // query part for: “amenity=place_of_worship”
  node["amenity"="place_of_worship"]({{bbox}});
  way["amenity"="place_of_worship"]({{bbox}});
  relation["amenity"="place_of_worship"]({{bbox}});
);
// print results
out center;
>;
out skel qt;


osmconvert

wind turbines and power pylons are most of the time easy to handle nodes in OSM. But petrol stations or churches are often ways - not as easy. The tool osmconvert can convert ways (outline of a building or an area) into nodes(lat/lon points with tags) Example: osmconvert input.osm --all-to-nodes | grep -v "<node .*/>" > out.osm

http://wiki.openstreetmap.org/wiki/Osmconvert

From the resulting .osm file it is very easy to generate a .stg file for test in flightgear (with some fixed dummy elevation) and then upload to http://scenemodels.flightgear.org (correct elevation will be calculated on the the server side) (with a script similar to this one: User:Laserman/gpx2stg.py )