sumolib.output.convert.kml

This module includes functions for converting SUMO's FCD output into Google's KML format (https://developers.google.com/kml/documentation/kmlreference)

 1# Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
 2# Copyright (C) 2014-2026 German Aerospace Center (DLR) and others.
 3# This program and the accompanying materials are made available under the
 4# terms of the Eclipse Public License 2.0 which is available at
 5# https://www.eclipse.org/legal/epl-2.0/
 6# This Source Code may also be made available under the following Secondary
 7# Licenses when the conditions for such availability set forth in the Eclipse
 8# Public License 2.0 are satisfied: GNU General Public License, version 2
 9# or later which is available at
10# https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
11# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
12
13# @file    kml.py
14# @author  Jakob Erdmann
15# @author  Laura Bieker
16# @author  Ronald Nippold
17# @date    2019-08-20
18
19"""
20This module includes functions for converting SUMO's FCD output into Google's
21KML format (https://developers.google.com/kml/documentation/kmlreference)
22"""
23from __future__ import absolute_import
24from collections import defaultdict
25
26
27def fcd2kml(inpFCD, outSTRM, ignored):
28    tracks = defaultdict(list)
29    for timestep in inpFCD:
30        for v in timestep.vehicle:
31            tracks[v.id].append((timestep.time, v.x, v.y))
32
33    outSTRM.write('<?xml version="1.0" encoding="UTF-8"?>\n')
34    outSTRM.write('<kml xmlns="http://www.opengis.net/kml/2.2">\n')
35    outSTRM.write('<Document>\n')
36    for vehicle in sorted(tracks):
37        outSTRM.write("\t<name>SUMO FCD</name>\n")
38        outSTRM.write("\t<open>1</open>\n")
39        outSTRM.write("\t<description>traces of SUMO FCD output</description>\n")
40        outSTRM.write("\t<Style id=\"trace-%s\">\n" % vehicle)
41        outSTRM.write("\t\t<LineStyle>\n")
42        outSTRM.write("\t\t<color>7f0000ff</color>\n")
43        outSTRM.write("\t\t<colorMode>random</colorMode> \n")
44        outSTRM.write("\t\t<width>6</width>\n")
45        outSTRM.write("\t\t<gx:labelVisibility>1</gx:labelVisibility>\n")
46        outSTRM.write("\t\t</LineStyle>\n")
47        outSTRM.write("\t</Style>\n")
48        outSTRM.write("\t<Placemark>\n")
49        outSTRM.write("\t\t<name>FCD %s</name>\n" % vehicle)
50        outSTRM.write("\t\t<styleUrl>#trace-%s</styleUrl>\n" % vehicle)
51        outSTRM.write("\t\t<LineString>\n")
52        outSTRM.write("\t\t<extrude>1</extrude>\n")
53        outSTRM.write("\t\t<tessellate>1</tessellate>\n")
54        outSTRM.write("\t\t\t<coordinates>\n")
55        for timestamp, lon, lat in tracks[vehicle]:
56            outSTRM.write('\t\t\t\t%s,%s\n' % (lon, lat))
57        outSTRM.write("\t\t\t</coordinates>\n")
58        outSTRM.write("\t\t</LineString>\n")
59        outSTRM.write("\t</Placemark>\n")
60    outSTRM.write('</Document>\n')
61    outSTRM.write('</kml>\n')
def fcd2kml(inpFCD, outSTRM, ignored):
28def fcd2kml(inpFCD, outSTRM, ignored):
29    tracks = defaultdict(list)
30    for timestep in inpFCD:
31        for v in timestep.vehicle:
32            tracks[v.id].append((timestep.time, v.x, v.y))
33
34    outSTRM.write('<?xml version="1.0" encoding="UTF-8"?>\n')
35    outSTRM.write('<kml xmlns="http://www.opengis.net/kml/2.2">\n')
36    outSTRM.write('<Document>\n')
37    for vehicle in sorted(tracks):
38        outSTRM.write("\t<name>SUMO FCD</name>\n")
39        outSTRM.write("\t<open>1</open>\n")
40        outSTRM.write("\t<description>traces of SUMO FCD output</description>\n")
41        outSTRM.write("\t<Style id=\"trace-%s\">\n" % vehicle)
42        outSTRM.write("\t\t<LineStyle>\n")
43        outSTRM.write("\t\t<color>7f0000ff</color>\n")
44        outSTRM.write("\t\t<colorMode>random</colorMode> \n")
45        outSTRM.write("\t\t<width>6</width>\n")
46        outSTRM.write("\t\t<gx:labelVisibility>1</gx:labelVisibility>\n")
47        outSTRM.write("\t\t</LineStyle>\n")
48        outSTRM.write("\t</Style>\n")
49        outSTRM.write("\t<Placemark>\n")
50        outSTRM.write("\t\t<name>FCD %s</name>\n" % vehicle)
51        outSTRM.write("\t\t<styleUrl>#trace-%s</styleUrl>\n" % vehicle)
52        outSTRM.write("\t\t<LineString>\n")
53        outSTRM.write("\t\t<extrude>1</extrude>\n")
54        outSTRM.write("\t\t<tessellate>1</tessellate>\n")
55        outSTRM.write("\t\t\t<coordinates>\n")
56        for timestamp, lon, lat in tracks[vehicle]:
57            outSTRM.write('\t\t\t\t%s,%s\n' % (lon, lat))
58        outSTRM.write("\t\t\t</coordinates>\n")
59        outSTRM.write("\t\t</LineString>\n")
60        outSTRM.write("\t</Placemark>\n")
61    outSTRM.write('</Document>\n')
62    outSTRM.write('</kml>\n')