# KmlDataSource

#### new Cesium.KmlDataSource()
DataSources/KmlDataSource.js 2263

  A `DataSource` which processes Keyhole Markup Language 2.2 (KML).

  KML support in Cesium is incomplete, but a large amount of the standard, as well as Google's `gx` extension namespace, is supported. See Github issue #873 for a detailed list of what is and isn't support. Cesium will also write information to the console when it encounters most unsupported features.

  Non visual feature data, such as `atom:author` and `ExtendedData` is exposed via an instance of `KmlFeatureData`, which is added to each `Entity` under the `kml` property.

  Name | Type | Description
  --- | --- | ---
  `options.camera` | Camera | The camera that is used for viewRefreshModes and sending camera properties to network links.
  `options.canvas` | Canvas | The canvas that is used for sending viewer properties to network links.
  `options.proxy` | DefaultProxy | optional A proxy to be used for loading external data.

  ##### Example:

      var viewer = new Cesium.Viewer('cesiumContainer');
      viewer.dataSources.add(Cesium.KmlDataSource.load('../../SampleData/facilities.kmz'),
           {
               camera: viewer.scene.camera,
               canvas: viewer.scene.canvas
           });

  ##### Demo:

  - Cesium Sandcastle KML Demo

  ##### See:

  - Open Geospatial Consortium KML Standard
  - Google KML Documentation

### Members

#### changedEvent : Event
DataSources/KmlDataSource.js 2370

  Gets an event that will be raised when the underlying data changes.

#### clock : DataSourceClock
DataSources/KmlDataSource.js 2340

  Gets the clock settings defined by the loaded KML. This represents the total availability interval for all time-dynamic data. If the KML does not contain time-dynamic data, this value is undefined.

#### clustering : EntityCluster
DataSources/KmlDataSource.js 2435

  Gets or sets the clustering options for this data source. This object can be shared between multiple data sources.

#### entities : EntityCollection
DataSources/KmlDataSource.js 2350

  Gets the collection of `Entity` instances.

#### errorEvent : Event
DataSources/KmlDataSource.js 2380

  Gets an event that will be raised if an error is encountered during processing.

#### isLoading : Boolean
DataSources/KmlDataSource.js 2360

  Gets a value indicating if the data source is currently loading data.

#### loadingEvent : Event
DataSources/KmlDataSource.js 2390

  Gets an event that will be raised when the data source either starts or stops loading.

#### name : String
DataSources/KmlDataSource.js 2328

  Gets a human-readable name for this instance. This will be automatically be set to the KML document name on load.

#### refreshEvent : Event
DataSources/KmlDataSource.js 2400

  Gets an event that will be raised when the data source refreshes a network link.

#### show : Boolean
DataSources/KmlDataSource.js 2420

  Gets whether or not this data source should be displayed.

#### unsupportedNodeEvent : Event
DataSources/KmlDataSource.js 2410

  Gets an event that will be raised when the data source finds an unsupported node type.

### Methods

#### staticCesium.KmlDataSource.load(data, options) → Promise.<KmlDataSource>
DataSources/KmlDataSource.js 2315

  Creates a Promise to a new instance loaded with the provided KML data.

  Name | Type | Description
  --- | --- | ---
  `data` | String | Document | Blob | A url, parsed KML document, or Blob containing binary KMZ data or a parsed KML document.

  `options`

  Object

  optional An object with the following properties:

  Name | Type | Default | Description
  --- | --- | --- | ---
  `camera` | Camera |  | The camera that is used for viewRefreshModes and sending camera properties to network links.
  `canvas` | Canvas |  | The canvas that is used for sending viewer properties to network links.
  `proxy` | DefaultProxy |  | optional A proxy to be used for loading external data.
  `sourceUri` | String |  | optional Overrides the url to use for resolving relative links and other KML network features.
  `clampToGround` | Boolean | `false` | optional true if we want the geometry features (Polygons, LineStrings and LinearRings) clamped to the ground. If true, lines will use corridors so use Entity.corridor instead of Entity.polyline.

  ##### Returns:

  A promise that will resolve to a new KmlDataSource instance once the KML is loaded.

#### load(data, options) → Promise.<KmlDataSource>
DataSources/KmlDataSource.js 2459

  Asynchronously loads the provided KML data, replacing any existing data.

  Name | Type | Description
  --- | --- | ---
  `data` | String | Document | Blob | A url, parsed KML document, or Blob containing binary KMZ data or a parsed KML document.

  `options`

  Object

  optional An object with the following properties:

  Name | Type | Default | Description
  --- | --- | --- | ---
  `sourceUri` | Number |  | optional Overrides the url to use for resolving relative links and other KML network features.
  `clampToGround` | Boolean | `false` | optional true if we want the geometry features (Polygons, LineStrings and LinearRings) clamped to the ground. If true, lines will use corridors so use Entity.corridor instead of Entity.polyline.

  ##### Returns:

  A promise that will resolve to this instances once the KML is loaded.

#### update(time) → Boolean
DataSources/KmlDataSource.js 2676

  Updates any NetworkLink that require updating

  Name | Type | Description
  --- | --- | ---
  `time` | JulianDate | The simulation time.

  ##### Returns:

  True if this data source is ready to be displayed at the provided time, false otherwise.