# Class: TopoJSON

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

## ol/format/TopoJSON~TopoJSON

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

Feature format for reading data in the TopoJSON format.

#### new TopoJSON(options)

format/TopoJSON.js, line 57

  Name | Type | Description
  --- | --- | ---
  `dataProjection` | ProjectionLike (defaults to 'EPSG:4326') | Default data projection.
  `layerName` | string | undefined | Set the name of the TopoJSON topology `objects`'s children as feature property with the specified name. This means that when set to `'layer'`, a topology like
      {
        "type": "Topology",
        "objects": {
          "example": {
            "type": "GeometryCollection",
            "geometries": []
          }
        }
      }
  will result in features that have a property `'layer'` set to `'example'`. When not set, no property will be added to features.
  `layers` | Array.<string> | undefined | Names of the TopoJSON topology's `objects`'s children to read features from. If not provided, features will be read from all children.

### Extends

- JSONFeature

### Methods

#### readFeature(source, options){FeatureType | Array.<FeatureType>} inherited

format/JSONFeature.js, line 40

  Read a feature. Only works for a single feature. Use `readFeatures` to read a feature collection.

  Name | Type | Description
  --- | --- | ---
  `source` | ArrayBuffer | 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.<FeatureType>} inherited

format/JSONFeature.js, line 57

  Read all features. Works with both a single feature and a feature collection.

  Name | Type | Description
  --- | --- | ---
  `source` | ArrayBuffer | 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:

  Features.

#### readGeometry(source, options){Geometry} inherited

format/JSONFeature.js, line 95

  Read a geometry.

  Name | Type | Description
  --- | --- | ---
  `source` | ArrayBuffer | 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:

  Geometry.

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

format/JSONFeature.js, line 121

  Read the projection.

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

  ##### Returns:

  Projection.

#### writeFeature(feature, options){string} inherited

format/JSONFeature.js, line 144

  Encode a feature as string.

  Name | Type | Description
  --- | --- | ---
  `feature` | Feature | Feature.
  `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:

  Encoded feature.

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

format/JSONFeature.js, line 167

  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:

  Encoded features.

#### writeGeometry(geometry, options){string} inherited

format/JSONFeature.js, line 190

  Encode a geometry as string.

  Name | Type | Description
  --- | --- | ---
  `geometry` | Geometry | Geometry.
  `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:

  Encoded geometry.