Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I am converting GeoJSON files to other formats (including KML) using ogr2ogr.

As you may know, there is no field in a GeoJSON file to specify the name of the layer, causing every conversion to have the name OGRGeoJSON. For example the following GeoJSON file:

{ "type": "FeatureCollection",
  "features": [
    { "type": "Feature",
      "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
      "properties": {"prop0": "value0"}
      }
     ]
   }

is converted as follows in KML:

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document><Folder><name>OGRGeoJSON</name>
<Schema name="OGRGeoJSON" id="OGRGeoJSON">
    <SimpleField name="Name" type="string"></SimpleField>
    <SimpleField name="Description" type="string"></SimpleField>
    <SimpleField name="prop0" type="string"></SimpleField>
</Schema>
  <Placemark>
    <ExtendedData><SchemaData schemaUrl="#OGRGeoJSON">
        <SimpleData name="prop0">value0</SimpleData>
    </SchemaData></ExtendedData>
      <Point><coordinates>102.0,0.5</coordinates></Point>
  </Placemark>
</Folder></Document></kml>

I've read this blog post from 2007 explaining why this occurs and I know that GeoJSON does not have the concept of layer name in its specifications.

I would like to know if there is a simple way to rename the layer on the fly using OGR, or if I should generate the output with ogr2ogr and programmatically change the output layer name, depending on the output file format with another program since, as far as I know, the OGR API does not have a function to rename the layer.

share|improve this question
add comment

1 Answer

up vote 2 down vote accepted

In the current ogr2ogr documentation it outlines the -nln property, which allows for specifying an alternate layer name. I don't know how new this is so you may need to download a new version, but it does work.

ogr2ogr -f KML some_output.kml example.geojson -nln SOMENAME

Using the above command on your example geojson produced the following results:

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document><Folder><name>SOMENAME</name>
<Schema name="SOMENAME" id="SOMENAME">
    <SimpleField name="Name" type="string"></SimpleField>
    <SimpleField name="Description" type="string"></SimpleField>
    <SimpleField name="prop0" type="string"></SimpleField>
</Schema>
  <Placemark>
    <ExtendedData><SchemaData schemaUrl="#SOMENAME">
        <SimpleData name="prop0">value0</SimpleData>
    </SchemaData></ExtendedData>
      <Point><coordinates>102.0,0.5</coordinates></Point>
  </Placemark>
</Folder></Document></kml>

Good luck!

share|improve this answer
    
Worked perfectly, at least on the command line. I'm actually calling OGR from Python. Thanks a lot! –  Julien Bourdon Sep 19 '12 at 8:53
    
@JulienBourdon Glad to hear it. In case you didn't know about it you can use os.system to call command line utilities in Pythoon, or the subprocess module for more complex data interaction. –  om_henners Sep 19 '12 at 15:21
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.