A Python library to covert KML files to GeoJSON files

pip install kml2geojson==5.1.0



kml2geojson is a Python 3.8+ package to convert KML files to GeoJSON files. Most of its code is a translation into Python of the Node.js package togeojson, but kml2geojson also adds the following features.

  • Preserve KML object styling, such as color and opacity
  • Optionally create a style dictionary cataloging all the KML styles used
  • Optionally create several GeoJSON FeatureCollections, one for each KML folder present


Create a Python 3.8+ virtual environment and run poetry add kml2geojson.


Use as a library or from the command line. For instructions on the latter, type k2g --help.


In the docs directory and published at


  • Development status is Alpha.
  • This project uses semantic versioning.
  • Thanks to MRCagney for funding this project.


  • Alex Raichev (2015-10-03), maintainer


If you want to help develop this project, here is some background reading.


5.1.0, 2022-04-29

  • Extended convert() to accept a KML file object.
  • Added type hints.
  • Updated dependencies and removed version caps.
  • Dropped support for Python versions less than 3.8.
  • Switched from Travis CI to Github Actions.

5.0.1, 2021-10-11

  • Re-included the MIT License file and added more metadata to the file pyproject.toml for a more informative listing on PyPi.

5.0.0, 2021-10-07

  • Upgraded to Python 3.9 and dropped support for Python versions < 3.6.
  • Switched to Poetry.
  • Breaking change: refactored the convert function to return dictionaries instead of files.
  • Moved docs from Rawgit to Github Pages.

4.0.2, 2017-04-26

  • Fixed the bug where could not find the license file.

4.0.1, 2017-04-22

4.0.0, 2016-11-24

  • Moved command line functionality to separate module
  • Renamed some functions

3.0.4, 2015-10-15

Disambiguated filenames in main().

3.0.3, 2015-10-13

Improved to_filename() again.

3.0.2, 2015-10-12

Improved to_filename() and removed the lowercasing.

3.0.1, 2015-10-12

Tweaked to_filename() to lowercase and underscore results. Forgot to do that last time.

3.0.0, 2015-10-12

Changed the output of build_layers() and moved layer names into the GeoJSON FeatureCollections

2.0.2, 2015-10-12

  • Replaced underscores with dashes in command line options

2.0.1, 2015-10-12

  • Set default border style for colored polygons

2.0.0, 2015-10-08

  • Added documentation
  • Tweaked the command line tool options

1.0.0, 2015-10-05

  • Changed some names
  • Added lots of tests

0.1.1, 2015-10-03

Fixed packaging to find README.rst

0.1.0, 2015-10-03