Converting KML to GeoJson

18,103

Solution 1

There is a tool which can convert (standard) KML to geoJSON (see link below). Its written in nodejs, though.

https://github.com/tmcw/togeojson#readme

Solution 2

KMZ to KML

KMZ is essentially a ZIP archive. Just use any zip tool to unzip the contained KML. Windows users might need to change the file extension to .zip.

KML to GeoJSON

Use the Python utility kml2geojson:

$ pip install kml2geojson --user
$ k2g input.kml output_directory

What's not working

  • ogr2ogr: Can't deal with multiple layers in KML

Solution 3

In response to the recent answer- iterating over each KML layer works as a fine workaround, comes up a lot when cleaning data in Python and R, and I guess could work for any language.

For example, in R and using GDAL it would look something like:

library(rgdal)
library(sf)
library(plyr)
library(dplyr)
data <- "INPUT KML"
kml_Layers <- ogrListLayers(data)
iterate <- length(kml_Layers) 

iterate_layers <- function(i){
      layer_i <- st_read(data, kml_Layers[i])
      return(layer_i)
    }

loops <- 1:iterate
Result_data <- lapply(iterate_layers, loops)
results <- ldply(Result_data)

writeOGR(results, "Data_geojson", layer="Data_geojson", driver="GeoJSON")

I know this isn't PHP, but it started saving me a lot of time once I started approaching KML this way.

Share:
18,103
Clark T.
Author by

Clark T.

Eh, im me...

Updated on June 04, 2022

Comments

  • Clark T.
    Clark T. about 2 years

    I'm having huge issues doing this so once again i come for help.

    I have this massive file which contains all the DMA's for Nielson what i need to do with php somehow is parse through each and get the data from and the coordinates but they have to be outputted in this format

    {"type": "FeatureCollection", "features": [
    {
        "type": "Feature",
        "id": "",
        "properties": {
            "dma": "514",
            "name": "Buffalo, NY"
        },
        "geometry": {
            "type": "Polygon",
            "coordinates": [
                [
                    [-79.761951, 42.269861],
                    [-79.14959, 42.553193],
                    [-79.048361, 42.691959],
                    [-78.853455, 42.783961],
                    [-78.943961, 42.978357],
                    [-78.881611, 43.02363],
                    [-78.880756, 43.02955],
                    [-78.890068, 43.045268],
                    [-78.946342, 43.072051],
                    [-79.06977, 43.085841],
                    [-79.06467, 43.262754],
                    [-78.520257, 43.372277],
                    [-77.994839, 43.36526],
                    [-77.997291, 43.132981],
                    [-77.905934, 43.133562],
                    [-77.951044, 43.039544],
                    [-77.904562, 43.023492],
                    [-77.95633, 42.667882],
                    [-78.060469, 42.532888],
                    [-77.722965, 42.471217],
                    [-77.749931, 41.998782],
                    [-77.609815, 41.999367],
                    [-77.59813, 41.478577],
                    [-78.050728, 41.475103],
                    [-78.203422, 41.618157],
                    [-78.956057, 41.623863],
                    [-78.918856, 41.998119],
                    [-79.761374, 41.999068],
                    [-79.761951, 42.269861]
                ],
    
                [
                    [-78.933161, 42.963457],
                    [-78.934961, 42.965657],
                    [-78.934461, 42.964257],
                    [-78.933161, 42.963457]
                ],
                [
                    [-78.92426, 42.952357],
                    [-78.92036, 42.954557],
                    [-78.92886, 42.956457],
                    [-78.92816, 42.955457],
                    [-78.92426, 42.952357]
                ],
                [
    
                    [-78.902609, 42.911768],
                    [-78.901122, 42.929442],
                    [-78.906739, 42.933805],
                    [-78.906259, 42.929557],
                    [-78.902609, 42.911768]
                ],
                [
    
                    [-79.064667, 43.078556],
                    [-79.071667, 43.078856],
                    [-79.073267, 43.080156],
                    [-79.071267, 43.083356],
                    [-79.064667, 43.078556]
    
                ],
                [
    
                    [-78.946165, 42.956954],
                    [-79.015493, 42.990871],
                    [-78.999465, 43.064756],
                    [-78.89966, 43.041057],
                    [-78.943945, 42.995081],
                    [-78.946165, 42.956954]
    
                ],
                [
    
                    [-78.88566, 43.023557],
                    [-78.88836, 43.031957],
                    [-78.88826, 43.034457],
                    [-78.882868, 43.030771],
                    [-78.88566, 43.023557]
    
                ],
                [
    
                    [-78.956761, 42.958757],
                    [-78.961462, 42.959357],
                    [-78.963462, 42.961057],
                    [-78.958362, 42.961457],
                    [-78.956761, 42.958757]
    
                ]
            ]
    
        }
      }
    ]}
    

    anyone have any idea how to do this correctly and efficiently i've been stuck on this for about 2 days with no success