Jump to content

User:Laserman/gpx2stg.py

From FlightGear wiki

gpx2stg.py

precise way to place shared objects in the Fg Scenery by using the OpenStreetMap Editor "JOSM"

example gpx file exported from JOSM:

<?xml version='1.0' encoding='UTF-8'?>
<gpx version="1.1" creator="JOSM GPX export" xmlns="http://www.topografix.com/GPX/1/1"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">
  <metadata>
    <bounds minlat="51.6847476" minlon="7.09489" maxlat="51.6870975" maxlon="7.1052296"/>
  </metadata>
  <wpt lat="51.68474756644179" lon="7.103785297249551">
  </wpt>
  <wpt lat="51.68667857011125" lon="7.097848901875471">
  </wpt>
  <wpt lat="51.68709745361677" lon="7.094889961003022">
  </wpt>
  <wpt lat="51.68668414010407" lon="7.097757201021684">
  </wpt>
  <wpt lat="51.686192807753315" lon="7.105229579867249">
  </wpt>
</gpx>


convert to stg format:

./gpx2stg.py -i gasometer.gpx  -m Models/Industrial/Gasometer.xml -e 100 > 3072872.stg
#!/usr/bin/python

# gpx2stg.py by d-laser
#
# reads a .gpx file of points that i export from JOSM
# writes stg formated to stdout
#

import sys, getopt
import xml.etree.ElementTree as ET

helptext = 'gpx2stg.py -i <inputfile> -m <path to shared model> -e <elevation>'

def main(argv):
    model = "Models/Industrial/GenericStorageTank15m.ac"
    elev  = 50
    heading = 0
    inputfile = "kugeln.gpx" 
    outputfile=''
    
    try:
        opts, args = getopt.getopt(argv,"hi:m:e:")
    except getopt.GetoptError:
        print helptext
        sys.exit(2)
    for opt, arg in opts:
        if opt == '-h':
            print helptext
            sys.exit()
        elif opt == "-i":
            inputfile = arg
        elif opt == "-m":
            model = arg
        elif opt == "-e":
            elev = arg
    #print 'Input file is ', inputfile
    #print 'Output file is ', outputfile
    #print 'Number of arguments:', len(sys.argv), 'arguments.'
    #print 'Argument List:', str(sys.argv)

    tree = ET.parse(inputfile)
    root = tree.getroot()

    for child in root:
        point = child.attrib
        if point:
            print "OBJECT_SHARED", model, point['lon'],point['lat'], elev, heading 
        
if __name__ == "__main__":
   main(sys.argv[1:])