# Class: KML

This documentation is for OpenLayers v10.9.0. The latest is v.

## ol/format/KML~KML

    import KML from 'ol/format/KML.js';

Feature format for reading and writing data in the KML format.

`readFeature` will read the first feature from a KML source.

MultiGeometries are converted into GeometryCollections if they are a mix of geometry types, and into MultiPoint/MultiLineString/MultiPolygon if they are all of the same type.

#### new KML(options)

format/KML.js, line 438

  Name | Type | Description
  --- | --- | ---
  `extractStyles` | boolean (defaults to true) | Extract styles from the KML.
  `showPointNames` | boolean (defaults to true) | Show names as labels for placemarks which contain points.
  `defaultStyle` | Array<Style> | undefined | Default style. The default default style is the same as Google Earth.
  `writeStyles` | boolean (defaults to true) | Write styles into KML.
  `crossOrigin` | null | string (defaults to 'anonymous') | The `crossOrigin` attribute for loaded images. Note that you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.
  `referrerPolicy` | ReferrerPolicy | undefined | The `referrerPolicy` property for loaded images.
  `iconUrlFunction` | IconUrlFunction | undefined | Function that takes a url string and returns a url string. Might be used to change an icon path or to substitute a data url obtained from a KMZ array buffer.

### Extends

- XMLFeature

### Methods

#### readCamera(source){Array<KMLCamera>}

format/KML.js, line 921

  Read the cameras of the KML.

  Name | Type | Description
  --- | --- | ---
  `source` | Document | Element | string | Source.

  ##### Returns:

  Cameras.

#### readCameraFromNode(node){Array<KMLCamera>}

format/KML.js, line 956

  Name | Type | Description
  --- | --- | ---
  `node` | Element | Node.

  ##### Returns:

  Cameras.

#### readFeature(source, options){Feature} inherited

format/XMLFeature.js, line 45

  Read a single feature.

  Name | Type | Description
  --- | --- | ---
  `source` | Document | Element | Object | string | Source.
  `options` | Read options.
  Name | Type | Description
  --- | --- | ---
  `dataProjection` | ProjectionLike | undefined | Projection of the data we are reading. If not provided, the projection will be derived from the data (where possible) or the `dataProjection` of the format is assigned (where set). If the projection can not be derived from the data and if no `dataProjection` is set for a format, the features will not be reprojected.
  `extent` | Extent | undefined | Tile extent in map units of the tile being read. This is only required when reading data with tile pixels as geometry units. When configured, a `dataProjection` with `TILE_PIXELS` as `units` and the tile's pixel extent as `extent` needs to be provided.
  `featureProjection` | ProjectionLike | undefined | Projection of the feature geometries created by the format reader. If not provided, features will be returned in the `dataProjection`.

  ##### Returns:

  Feature.

#### readFeatures(source, options){Array<Feature>} inherited

format/XMLFeature.js, line 93

  Read all features from a feature collection.

  Name | Type | Description
  --- | --- | ---
  `source` | Document | Element | Object | string | Source.
  `options` | Options.
  Name | Type | Description
  --- | --- | ---
  `dataProjection` | ProjectionLike | undefined | Projection of the data we are reading. If not provided, the projection will be derived from the data (where possible) or the `dataProjection` of the format is assigned (where set). If the projection can not be derived from the data and if no `dataProjection` is set for a format, the features will not be reprojected.
  `extent` | Extent | undefined | Tile extent in map units of the tile being read. This is only required when reading data with tile pixels as geometry units. When configured, a `dataProjection` with `TILE_PIXELS` as `units` and the tile's pixel extent as `extent` needs to be provided.
  `featureProjection` | ProjectionLike | undefined | Projection of the feature geometries created by the format reader. If not provided, features will be returned in the `dataProjection`.

  ##### Returns:

  Features.

#### readName(source){string | undefined}

format/KML.js, line 713

  Read the name of the KML.

  Name | Type | Description
  --- | --- | ---
  `source` | Document | Element | string | Source.

  ##### Returns:

  Name.

#### readNetworkLinks(source){Array.<Object>}

format/KML.js, line 778

  Read the network links of the KML.

  Name | Type | Description
  --- | --- | ---
  `source` | Document | Element | string | Source.

  ##### Returns:

  Network links.

#### readProjection(source){Projection} inherited

format/XMLFeature.js, line 194

  Read the projection from the source.

  Name | Type | Description
  --- | --- | ---
  `source` | Document | Element | Object | string | Source.

  ##### Returns:

  Projection.

#### readRegion(source){Array.<Object>}

format/KML.js, line 848

  Read the regions of the KML.

  Name | Type | Description
  --- | --- | ---
  `source` | Document | Element | string | Source.

  ##### Returns:

  Regions.

#### readRegionFromNode(node){Array.<Object>}

format/KML.js, line 883

  Name | Type | Description
  --- | --- | ---
  `node` | Element | Node.

  ##### Returns:

  Region.

#### writeFeatures(features, options){string} inherited

format/XMLFeature.js, line 258

  Encode an array of features as string.

  Name | Type | Description
  --- | --- | ---
  `features` | Array<Feature> | Features.
  `options` | Write options.
  Name | Type | Description
  --- | --- | ---
  `dataProjection` | ProjectionLike | undefined | Projection of the data we are writing. If not provided, the `dataProjection` of the format is assigned (where set). If no `dataProjection` is set for a format, the features will be returned in the `featureProjection`.
  `featureProjection` | ProjectionLike | undefined | Projection of the feature geometries that will be serialized by the format writer. If not provided, geometries are assumed to be in the `dataProjection` if that is set; in other words, they are not transformed.
  `rightHanded` | boolean | undefined | When writing geometries, follow the right-hand rule for linear ring orientation. This means that polygons will have counter-clockwise exterior rings and clockwise interior rings. By default, coordinates are serialized as they are provided at construction. If `true`, the right-hand rule will be applied. If `false`, the left-hand rule will be applied (clockwise for exterior and counter-clockwise for interior rings). Note that not all formats support this. The GeoJSON format does use this property when writing geometries.
  `decimals` | number | undefined | Maximum number of decimal places for coordinates. Coordinates are stored internally as floats, but floating-point arithmetic can create coordinates with a large number of decimal places, not generally wanted on output. Set a number here to round coordinates. Can also be used to ensure that coordinates read in can be written back out with the same number of decimals. Default is no rounding.

  ##### Returns:

  Result.

#### writeFeaturesNode(features, options){Node}

format/KML.js, line 989

  Encode an array of features in the KML format as an XML node. GeometryCollections, MultiPoints, MultiLineStrings, and MultiPolygons are output as MultiGeometries.

  Name | Type | Description
  --- | --- | ---
  `features` | Array<Feature> | Features.
  `options` | Options.
  Name | Type | Description
  --- | --- | ---
  `dataProjection` | ProjectionLike | undefined | Projection of the data we are writing. If not provided, the `dataProjection` of the format is assigned (where set). If no `dataProjection` is set for a format, the features will be returned in the `featureProjection`.
  `featureProjection` | ProjectionLike | undefined | Projection of the feature geometries that will be serialized by the format writer. If not provided, geometries are assumed to be in the `dataProjection` if that is set; in other words, they are not transformed.
  `rightHanded` | boolean | undefined | When writing geometries, follow the right-hand rule for linear ring orientation. This means that polygons will have counter-clockwise exterior rings and clockwise interior rings. By default, coordinates are serialized as they are provided at construction. If `true`, the right-hand rule will be applied. If `false`, the left-hand rule will be applied (clockwise for exterior and counter-clockwise for interior rings). Note that not all formats support this. The GeoJSON format does use this property when writing geometries.
  `decimals` | number | undefined | Maximum number of decimal places for coordinates. Coordinates are stored internally as floats, but floating-point arithmetic can create coordinates with a large number of decimal places, not generally wanted on output. Set a number here to round coordinates. Can also be used to ensure that coordinates read in can be written back out with the same number of decimals. Default is no rounding.

  ##### Returns:

  Node.