diff --git a/externs/xol.js b/externs/xol.js
new file mode 100644
index 0000000000..70203aa939
--- /dev/null
+++ b/externs/xol.js
@@ -0,0 +1,4359 @@
+
+/**
+ * @typedef {{unique: (boolean|undefined)}}
+ */
+export var CollectionOptions;
+
+/**
+ * @param {CollectionOptions} options TODO: repace this
+ *
+ * @param {boolean|undefined} options.unique Disallow the same item from being added to the collection twice. Default is
+ * false.
+ *
+ */
+
+
+/**
+ * @typedef {{tracking: (boolean|undefined),
+ * trackingOptions: (GeolocationPositionOptions|undefined),
+ * projection: ol.ProjectionLike}}
+ */
+export var GeolocationOptions;
+
+/**
+ * @param {GeolocationOptions} options TODO: repace this
+ *
+ * @param {boolean|undefined} options.tracking Start Tracking. Default is `false`.
+ *
+ * @param {GeolocationPositionOptions|undefined} options.trackingOptions Tracking options. See
+ * {@link http://www.w3.org/TR/geolocation-API/#position_options_interface}.
+ *
+ * @param {ol.ProjectionLike} options.projection The projection the position is reported in.
+ *
+ */
+
+
+/**
+ * Object literal with config options for the map logo.
+ * @typedef {{href: (string), src: (string)}}
+ */
+export var LogoOptions;
+
+/**
+ * @param {LogoOptions} options TODO: repace this
+ *
+ * @param {string} options.href Link url for the logo. Will be followed when the logo is clicked.
+ *
+ * @param {string} options.src Image src for the logo.
+ *
+ */
+
+
+/**
+ * @typedef {{map: (ol.PluggableMap|undefined),
+ * maxLines: (number|undefined),
+ * strokeStyle: (ol.style.Stroke|undefined),
+ * targetSize: (number|undefined),
+ * showLabels: (boolean|undefined),
+ * lonLabelFormatter: (undefined|function(number):string),
+ * latLabelFormatter: (undefined|function(number):string),
+ * lonLabelPosition: (number|undefined),
+ * latLabelPosition: (number|undefined),
+ * lonLabelStyle: (ol.style.Text|undefined),
+ * latLabelStyle: (ol.style.Text|undefined)}}
+ */
+export var GraticuleOptions;
+
+/**
+ * @param {GraticuleOptions} options TODO: repace this
+ *
+ * @param {ol.PluggableMap|undefined} options.map Reference to an `ol.Map` object.
+ *
+ * @param {number|undefined} options.maxLines The maximum number of meridians and parallels from the center of the
+ * map. The default value is 100, which means that at most 200 meridians
+ * and 200 parallels will be displayed. The default value is appropriate
+ * for conformal projections like Spherical Mercator. If you increase
+ * the value more lines will be drawn and the drawing performance will
+ * decrease.
+ *
+ * @param {ol.style.Stroke|undefined} options.strokeStyle The stroke style to use for drawing the graticule. If not provided, the
+ * lines will be drawn with `rgba(0,0,0,0.2)`, a not fully opaque black.
+ *
+ *
+ * @param {number|undefined} options.targetSize The target size of the graticule cells, in pixels. Default
+ * value is 100 pixels.
+ *
+ * @param {boolean|undefined} options.showLabels Render a label with the respective latitude/longitude for each graticule
+ * line. Default is false.
+ *
+ *
+ * @param {undefined|function(number):string} options.lonLabelFormatter Label formatter for longitudes. This function is called with the longitude as
+ * argument, and should return a formatted string representing the longitude.
+ * By default, labels are formatted as degrees, minutes, seconds and hemisphere.
+ *
+ *
+ * @param {undefined|function(number):string} options.latLabelFormatter Label formatter for latitudes. This function is called with the latitude as
+ * argument, and should return a formatted string representing the latitude.
+ * By default, labels are formatted as degrees, minutes, seconds and hemisphere.
+ *
+ *
+ * @param {number|undefined} options.lonLabelPosition Longitude label position in fractions (0..1) of view extent. 0 means at the
+ * bottom of the viewport, 1 means at the top. Default is 0.
+ *
+ * @param {number|undefined} options.latLabelPosition Latitude label position in fractions (0..1) of view extent. 0 means at the
+ * left of the viewport, 1 means at the right. Default is 1.
+ *
+ * @param {ol.style.Text|undefined} options.lonLabelStyle Longitude label text style. The default is
+ * ```js
+ * new ol.style.Text({
+ * font: '12px Calibri,sans-serif',
+ * textBaseline: 'bottom',
+ * fill: new ol.style.Fill({
+ * color: 'rgba(0,0,0,1)'
+ * }),
+ * stroke: new ol.style.Stroke({
+ * color: 'rgba(255,255,255,1)',
+ * width: 3
+ * })
+ * });
+ * ```
+ * Note that the default's `textBaseline` configuration will not work well for
+ * `lonLabelPosition` configurations that position labels close to the top of
+ * the viewport.
+ *
+ *
+ * @param {ol.style.Text|undefined} options.latLabelStyle Latitude label text style. The default is
+ * ```js
+ * new ol.style.Text({
+ * font: '12px Calibri,sans-serif',
+ * textAlign: 'end',
+ * fill: new ol.style.Fill({
+ * color: 'rgba(0,0,0,1)'
+ * }),
+ * stroke: new ol.style.Stroke({
+ * color: 'rgba(255,255,255,1)',
+ * width: 3
+ * })
+ * });
+ * ```
+ * Note that the default's `textAlign` configuration will not work well for
+ * `latLabelPosition` configurations that position labels close to the left of
+ * the viewport.
+ *
+ *
+ */
+
+
+/**
+ * Object literal with config options for interactions.
+ * @typedef {{handleEvent: function(ol.MapBrowserEvent):boolean}}
+ */
+export var interaction_InteractionOptions;
+
+/**
+ * @param {interaction_InteractionOptions} options TODO: repace this
+ *
+ * @param {function(ol.MapBrowserEvent):boolean} options.handleEvent Method called by the map to notify the interaction that a browser event was
+ * dispatched to the map. If the function returns a falsy value,
+ * propagation of the event to other interactions in the map's interactions
+ * chain will be prevented (this includes functions with no explicit return). See
+ * {@link https://developer.mozilla.org/en-US/docs/Glossary/Falsy}
+ *
+ */
+
+
+/**
+ * Object literal with config options for the map.
+ * @typedef {{controls: (ol.Collection.
|Array.|undefined),
+ * pixelRatio: (number|undefined),
+ * interactions: (ol.Collection.|Array.|undefined),
+ * keyboardEventTarget: (Element|Document|string|undefined),
+ * layers: (Array.|ol.Collection.|undefined),
+ * loadTilesWhileAnimating: (boolean|undefined),
+ * loadTilesWhileInteracting: (boolean|undefined),
+ * logo: (boolean|string|olx.LogoOptions|Element|undefined),
+ * moveTolerance: (number|undefined),
+ * overlays: (ol.Collection.|Array.|undefined),
+ * renderer: (ol.renderer.Type|Array.|undefined),
+ * target: (Element|string|undefined),
+ * view: (ol.View|undefined)}}
+ */
+export var MapOptions;
+
+/**
+ * @param {MapOptions} options TODO: repace this
+ *
+ * @param {ol.Collection.|Array.|undefined} options.controls Controls initially added to the map. If not specified,
+ * {@link ol.control.defaults ol.control.defaults()} is used.
+ *
+ * @param {number|undefined} options.pixelRatio The ratio between physical pixels and device-independent pixels (dips) on the
+ * device. If `undefined` then it gets set by using `window.devicePixelRatio`.
+ *
+ * @param {ol.Collection.|Array.|undefined} options.interactions Interactions that are initially added to the map. If not specified,
+ * {@link ol.interaction.defaults ol.interaction.defaults()} is used.
+ *
+ * @param {Element|Document|string|undefined} options.keyboardEventTarget The element to listen to keyboard events on. This determines when the
+ * `KeyboardPan` and `KeyboardZoom` interactions trigger. For example, if this
+ * option is set to `document` the keyboard interactions will always trigger. If
+ * this option is not specified, the element the library listens to keyboard
+ * events on is the map target (i.e. the user-provided div for the map). If this
+ * is not `document` the target element needs to be focused for key events to be
+ * emitted, requiring that the target element has a `tabindex` attribute.
+ *
+ * @param {Array.|ol.Collection.|undefined} options.layers Layers. If this is not defined, a map with no layers will be rendered. Note
+ * that layers are rendered in the order supplied, so if you want, for example,
+ * a vector layer to appear on top of a tile layer, it must come after the tile
+ * layer.
+ *
+ * @param {boolean|undefined} options.loadTilesWhileAnimating When set to true, tiles will be loaded during animations. This may improve
+ * the user experience, but can also make animations stutter on devices with
+ * slow memory. Default is `false`.
+ *
+ * @param {boolean|undefined} options.loadTilesWhileInteracting When set to true, tiles will be loaded while interacting with the map. This
+ * may improve the user experience, but can also make map panning and zooming
+ * choppy on devices with slow memory. Default is `false`.
+ *
+ * @param {boolean|string|olx.LogoOptions|Element|undefined} options.logo The map logo. A logo to be displayed on the map at all times. If a string is
+ * provided, it will be set as the image source of the logo. If an object is
+ * provided, the `src` property should be the URL for an image and the `href`
+ * property should be a URL for creating a link. If an element is provided,
+ * the element will be used. To disable the map logo, set the option to
+ * `false`. By default, the OpenLayers logo is shown.
+ *
+ * @param {number|undefined} options.moveTolerance The minimum distance in pixels the cursor must move to be detected
+ * as a map move event instead of a click. Increasing this value can make it
+ * easier to click on the map.
+ * Default is `1`.
+ *
+ * @param {ol.Collection.|Array.|undefined} options.overlays Overlays initially added to the map. By default, no overlays are added.
+ *
+ * @param {ol.renderer.Type|Array.|undefined} options.renderer Renderer. By default, Canvas and WebGL renderers are tested for support
+ * in that order, and the first supported used. Specify a
+ * {@link ol.renderer.Type} here to use a specific renderer.
+ * Note that the Canvas renderer fully supports vector data, but WebGL can only
+ * render Point geometries.
+ *
+ * @param {Element|string|undefined} options.target The container for the map, either the element itself or the `id` of the
+ * element. If not specified at construction time, {@link ol.Map#setTarget}
+ * must be called for the map to be rendered.
+ *
+ * @param {ol.View|undefined} options.view The map's view. No layer sources will be fetched unless this is specified at
+ * construction time or through {@link ol.Map#setView}.
+ *
+ */
+
+
+/**
+ * Object literal with options for the {@link ol.Sphere.getLength} or
+ * {@link ol.Sphere.getArea} functions.
+ * @typedef {{projection: (ol.ProjectionLike|undefined),
+ * radius: (number|undefined)}}
+ */
+export var SphereMetricOptions;
+
+/**
+ * @param {SphereMetricOptions} options TODO: repace this
+ *
+ * @param {(ol.ProjectionLike|undefined)} options.projection Projection of the geometry. By default, the geometry is assumed to be in
+ * EPSG:3857 (Web Mercator).
+ *
+ * @param {(number|undefined)} options.radius Sphere radius. By default, the radius of the earth is used (Clarke 1866
+ * Authalic Sphere).
+ *
+ */
+
+
+/**
+ * Options for tile constructors.
+ * @typedef {{transition: (number|undefined)}}
+ */
+export var TileOptions;
+
+/**
+ * @param {TileOptions} options TODO: repace this
+ *
+ * @param {number|undefined} options.transition A duration for tile opacity transitions. By default, tiles will render with
+ * an opacity transition that lasts 250 ms. To change the duration, pass a
+ * number in milliseconds. A duration of 0 disables the opacity transition.
+ *
+ */
+
+
+/**
+ * Object literal with options for the {@link ol.Map#forEachFeatureAtPixel} and
+ * {@link ol.Map#hasFeatureAtPixel} methods.
+ * @typedef {{layerFilter: ((function(ol.layer.Layer): boolean)|undefined),
+ * hitTolerance: (number|undefined)}}
+ */
+export var AtPixelOptions;
+
+/**
+ * @param {AtPixelOptions} options TODO: repace this
+ *
+ * @param {((function(ol.layer.Layer): boolean)|undefined)} options.layerFilter Layer filter function. The filter function will receive one argument, the
+ * {@link ol.layer.Layer layer-candidate} and it should return a boolean value.
+ * Only layers which are visible and for which this function returns `true`
+ * will be tested for features. By default, all visible layers will be tested.
+ *
+ * @param {number|undefined} options.hitTolerance Hit-detection tolerance in pixels. Pixels inside the radius around the given position
+ * will be checked for features. This only works for the canvas renderer and
+ * not for WebGL. Default is `0`.
+ *
+ */
+
+
+/**
+ * Object literal with config options for the overlay.
+ * @typedef {{id: (number|string|undefined),
+ * element: (Element|undefined),
+ * offset: (Array.|undefined),
+ * position: (ol.Coordinate|undefined),
+ * positioning: (ol.OverlayPositioning|string|undefined),
+ * stopEvent: (boolean|undefined),
+ * insertFirst: (boolean|undefined),
+ * autoPan: (boolean|undefined),
+ * autoPanAnimation: (olx.OverlayPanOptions|undefined),
+ * autoPanMargin: (number|undefined),
+ * className: (string|undefined)}}
+ */
+export var OverlayOptions;
+
+/**
+ * @param {OverlayOptions} options TODO: repace this
+ *
+ * @param {number|string|undefined} options.id Set the overlay id. The overlay id can be used with the
+ * {@link ol.Map#getOverlayById} method.
+ *
+ * @param {Element|undefined} options.element The overlay element.
+ *
+ * @param {Array.|undefined} options.offset Offsets in pixels used when positioning the overlay. The first element in the
+ * array is the horizontal offset. A positive value shifts the overlay right.
+ * The second element in the array is the vertical offset. A positive value
+ * shifts the overlay down. Default is `[0, 0]`.
+ *
+ * @param {ol.Coordinate|undefined} options.position The overlay position in map projection.
+ *
+ * @param {ol.OverlayPositioning|string|undefined} options.positioning Defines how the overlay is actually positioned with respect to its `position`
+ * property. Possible values are `'bottom-left'`, `'bottom-center'`,
+ * `'bottom-right'`, `'center-left'`, `'center-center'`, `'center-right'`,
+ * `'top-left'`, `'top-center'`, and `'top-right'`. Default is `'top-left'`.
+ *
+ * @param {boolean|undefined} options.stopEvent Whether event propagation to the map viewport should be stopped. Default is
+ * `true`. If `true` the overlay is placed in the same container as that of the
+ * controls (CSS class name `ol-overlaycontainer-stopevent`); if `false` it is
+ * placed in the container with CSS class name `ol-overlaycontainer`.
+ *
+ * @param {boolean|undefined} options.insertFirst Whether the overlay is inserted first in the overlay container, or appended.
+ * Default is `true`. If the overlay is placed in the same container as that of
+ * the controls (see the `stopEvent` option) you will probably set `insertFirst`
+ * to `true` so the overlay is displayed below the controls.
+ *
+ * @param {boolean|undefined} options.autoPan If set to `true` the map is panned when calling `setPosition`, so that the
+ * overlay is entirely visible in the current viewport.
+ * The default is `false`.
+ *
+ * @param {olx.OverlayPanOptions|undefined} options.autoPanAnimation The animation options used to pan the overlay into view. This animation
+ * is only used when `autoPan` is enabled. A `duration` and `easing` may be
+ * provided to customize the animation.
+ *
+ * @param {number|undefined} options.autoPanMargin The margin (in pixels) between the overlay and the borders of the map when
+ * autopanning. The default is `20`.
+ *
+ * @param {string|undefined} options.className CSS class name. Default is `ol-overlay-container ol-selectable`.
+ *
+ */
+
+
+/**
+ * @typedef {{
+ * duration: (number|undefined),
+ * easing: (undefined|function(number):number)
+ * }}
+ */
+export var OverlayPanOptions;
+
+/**
+ * @param {OverlayPanOptions} options TODO: repace this
+ *
+ * @param {number|undefined} options.duration The duration of the animation in milliseconds. Default is `1000`.
+ *
+ * @param {undefined|function(number):number} options.easing The easing function to use. Can be an {@link ol.easing} or a custom function.
+ * Default is {@link ol.easing.inAndOut}.
+ *
+ */
+
+
+/**
+ * Object literal with config options for the projection.
+ * @typedef {{code: string,
+ * units: (ol.proj.Units|string|undefined),
+ * extent: (ol.Extent|undefined),
+ * axisOrientation: (string|undefined),
+ * global: (boolean|undefined),
+ * metersPerUnit: (number|undefined),
+ * worldExtent: (ol.Extent|undefined),
+ * getPointResolution: (function(number, ol.Coordinate):number|undefined) }}
+ */
+export var ProjectionOptions;
+
+/**
+ * @param {ProjectionOptions} options TODO: repace this
+ *
+ * @param {string} options.code The SRS identifier code, e.g. `EPSG:4326`.
+ *
+ * @param {ol.proj.Units|string|undefined} options.units Units. Required unless a proj4 projection is defined for `code`.
+ *
+ * @param {ol.Extent|undefined} options.extent The validity extent for the SRS.
+ *
+ * @param {string|undefined} options.axisOrientation The axis orientation as specified in Proj4. The default is `enu`.
+ *
+ * @param {boolean|undefined} options.global Whether the projection is valid for the whole globe. Default is `false`.
+ *
+ * @param {number|undefined} options.metersPerUnit The meters per unit for the SRS. If not provided, the `units` are used to get
+ * the meters per unit from the {@link ol.proj.METERS_PER_UNIT} lookup table.
+ *
+ * @param {ol.Extent|undefined} options.worldExtent The world extent for the SRS.
+ *
+ * @param {(function(number, ol.Coordinate):number|undefined)} options.getPointResolution Function to determine resolution at a point. The function is called with a
+ * `{number}` view resolution and an `{ol.Coordinate}` as arguments, and returns
+ * the `{number}` resolution at the passed coordinate. If this is `undefined`,
+ * the default {@link ol.proj#getPointResolution} function will be used.
+ *
+ */
+
+
+/**
+ * Object literal with config options for the view.
+ * @typedef {{center: (ol.Coordinate|undefined),
+ * constrainRotation: (boolean|number|undefined),
+ * enableRotation: (boolean|undefined),
+ * extent: (ol.Extent|undefined),
+ * minResolution: (number|undefined),
+ * maxResolution: (number|undefined),
+ * minZoom: (number|undefined),
+ * maxZoom: (number|undefined),
+ * projection: ol.ProjectionLike,
+ * resolution: (number|undefined),
+ * resolutions: (Array.|undefined),
+ * rotation: (number|undefined),
+ * zoom: (number|undefined),
+ * zoomFactor: (number|undefined)}}
+ */
+export var ViewOptions;
+
+/**
+ * @param {ViewOptions} options TODO: repace this
+ *
+ * @param {ol.Coordinate|undefined} options.center The initial center for the view. The coordinate system for the center is
+ * specified with the `projection` option. Default is `undefined`, and layer
+ * sources will not be fetched if this is not set.
+ *
+ * @param {boolean|number|undefined} options.constrainRotation Rotation constraint. `false` means no constraint. `true` means no constraint,
+ * but snap to zero near zero. A number constrains the rotation to that number
+ * of values. For example, `4` will constrain the rotation to 0, 90, 180, and
+ * 270 degrees. The default is `true`.
+ *
+ * @param {boolean|undefined} options.enableRotation Enable rotation. Default is `true`. If `false` a rotation constraint that
+ * always sets the rotation to zero is used. The `constrainRotation` option
+ * has no effect if `enableRotation` is `false`.
+ *
+ * @param {ol.Extent|undefined} options.extent The extent that constrains the center, in other words, center cannot be set
+ * outside this extent. Default is `undefined`.
+ *
+ * @param {number|undefined} options.maxResolution The maximum resolution used to determine the resolution constraint. It is
+ * used together with `minResolution` (or `maxZoom`) and `zoomFactor`. If
+ * unspecified it is calculated in such a way that the projection's validity
+ * extent fits in a 256x256 px tile. If the projection is Spherical Mercator
+ * (the default) then `maxResolution` defaults to `40075016.68557849 / 256 =
+ * 156543.03392804097`.
+ *
+ * @param {number|undefined} options.minResolution The minimum resolution used to determine the resolution constraint. It is
+ * used together with `maxResolution` (or `minZoom`) and `zoomFactor`. If
+ * unspecified it is calculated assuming 29 zoom levels (with a factor of 2).
+ * If the projection is Spherical Mercator (the default) then `minResolution`
+ * defaults to `40075016.68557849 / 256 / Math.pow(2, 28) =
+ * 0.0005831682455839253`.
+ *
+ * @param {number|undefined} options.maxZoom The maximum zoom level used to determine the resolution constraint. It is
+ * used together with `minZoom` (or `maxResolution`) and `zoomFactor`. Default
+ * is `28`. Note that if `minResolution` is also provided, it is given
+ * precedence over `maxZoom`.
+ *
+ * @param {number|undefined} options.minZoom The minimum zoom level used to determine the resolution constraint. It is
+ * used together with `maxZoom` (or `minResolution`) and `zoomFactor`. Default
+ * is `0`. Note that if `maxResolution` is also provided, it is given
+ * precedence over `minZoom`.
+ *
+ * @param {ol.ProjectionLike} options.projection The projection. Default is `EPSG:3857` (Spherical Mercator).
+ *
+ * @param {number|undefined} options.resolution The initial resolution for the view. The units are `projection` units per
+ * pixel (e.g. meters per pixel). An alternative to setting this is to set
+ * `zoom`. Default is `undefined`, and layer sources will not be fetched if
+ * neither this nor `zoom` are defined.
+ *
+ * @param {Array.|undefined} options.resolutions Resolutions to determine the resolution constraint. If set the
+ * `maxResolution`, `minResolution`, `minZoom`, `maxZoom`, and `zoomFactor`
+ * options are ignored.
+ *
+ * @param {number|undefined} options.rotation The initial rotation for the view in radians (positive rotation clockwise).
+ * Default is `0`.
+ *
+ * @param {number|undefined} options.zoom Only used if `resolution` is not defined. Zoom level used to calculate the
+ * initial resolution for the view. The initial resolution is determined using
+ * the `ol.View#constrainResolution` method.
+ *
+ * @param {number|undefined} options.zoomFactor The zoom factor used to determine the resolution constraint. Default is `2`.
+ *
+ */
+
+
+/**
+ * @typedef {{
+ * center: (ol.Coordinate|undefined),
+ * zoom: (number|undefined),
+ * resolution: (number|undefined),
+ * rotation: (number|undefined),
+ * anchor: (ol.Coordinate|undefined),
+ * duration: (number|undefined),
+ * easing: (undefined|function(number):number)
+ * }}
+ */
+export var AnimationOptions;
+
+/**
+ * @param {AnimationOptions} options TODO: repace this
+ *
+ * @param {ol.Coordinate|undefined} options.center The center of the view at the end of the animation.
+ *
+ * @param {number|undefined} options.zoom The zoom level of the view at the end of the animation. This takes
+ * precedence over `resolution`.
+ *
+ * @param {number|undefined} options.resolution The resolution of the view at the end of the animation. If `zoom` is also
+ * provided, this option will be ignored.
+ *
+ * @param {number|undefined} options.rotation The rotation of the view at the end of the animation.
+ *
+ * @param {ol.Coordinate|undefined} options.anchor Optional anchor to remained fixed during a rotation or resolution animation.
+ *
+ * @param {number|undefined} options.duration The duration of the animation in milliseconds (defaults to `1000`).
+ *
+ * @param {undefined|function(number):number} options.easing The easing function used during the animation (defaults to {@link ol.easing.inAndOut}).
+ * The function will be called for each frame with a number representing a
+ * fraction of the animation's duration. The function should return a number
+ * between 0 and 1 representing the progress toward the destination state.
+ *
+ */
+
+
+/**
+ * @typedef {{className: (string|undefined),
+ * collapsible: (boolean|undefined),
+ * collapsed: (boolean|undefined),
+ * tipLabel: (string|undefined),
+ * label: (string|Node|undefined),
+ * collapseLabel: (string|Node|undefined),
+ * render: (function(ol.MapEvent)|undefined),
+ * target: (Element|string|undefined)}}
+ */
+export var control_AttributionOptions;
+
+/**
+ * @param {control_AttributionOptions} options TODO: repace this
+ *
+ * @param {string|undefined} options.className CSS class name. Default is `ol-attribution`.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ * @param {boolean|undefined} options.collapsible Specify if attributions can be collapsed. If you use an OSM source,
+ * should be set to `false` — see
+ * {@link https://www.openstreetmap.org/copyright OSM Copyright} —
+ * Default is `true`.
+ *
+ * @param {boolean|undefined} options.collapsed Specify if attributions should be collapsed at startup. Default is `true`.
+ *
+ * @param {string|undefined} options.tipLabel Text label to use for the button tip. Default is `Attributions`
+ *
+ * @param {string|Node|undefined} options.label Text label to use for the collapsed attributions button. Default is `i`.
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {string|Node|undefined} options.collapseLabel Text label to use for the expanded attributions button. Default is `»`.
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {function(ol.MapEvent)|undefined} options.render Function called when the control should be re-rendered. This is called
+ * in a requestAnimationFrame callback.
+ *
+ */
+
+
+/**
+ * @typedef {{element: (Element|undefined),
+ * render: (function(ol.MapEvent)|undefined),
+ * target: (Element|string|undefined)}}
+ */
+export var control_ControlOptions;
+
+/**
+ * @param {control_ControlOptions} options TODO: repace this
+ *
+ * @param {Element|undefined} options.element The element is the control's container element. This only needs to be
+ * specified if you're developing a custom control.
+ *
+ * @param {function(ol.MapEvent)|undefined} options.render Function called when the control should be re-rendered. This is called
+ * in a requestAnimationFrame callback.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ */
+
+
+/**
+ * @typedef {{attribution: (boolean|undefined),
+ * attributionOptions: (olx.control.AttributionOptions|undefined),
+ * rotate: (boolean|undefined),
+ * rotateOptions: (olx.control.RotateOptions|undefined),
+ * zoom: (boolean|undefined),
+ * zoomOptions: (olx.control.ZoomOptions|undefined)}}
+ */
+export var control_DefaultsOptions;
+
+/**
+ * @param {control_DefaultsOptions} options TODO: repace this
+ *
+ * @param {boolean|undefined} options.attribution Attribution. Default is `true`.
+ *
+ * @param {olx.control.AttributionOptions|undefined} options.attributionOptions Attribution options.
+ *
+ * @param {boolean|undefined} options.rotate Rotate. Default is `true`.
+ *
+ * @param {olx.control.RotateOptions|undefined} options.rotateOptions Rotate options.
+ *
+ * @param {boolean|undefined} options.zoom Zoom. Default is `true`.
+ *
+ * @param {olx.control.ZoomOptions|undefined} options.zoomOptions Zoom options.
+ *
+ */
+
+
+/**
+ * @typedef {{className: (string|undefined),
+ * label: (string|Node|undefined),
+ * labelActive: (string|Node|undefined),
+ * tipLabel: (string|undefined),
+ * keys: (boolean|undefined),
+ * target: (Element|string|undefined),
+ * source: (Element|string|undefined)}}
+ */
+export var control_FullScreenOptions;
+
+/**
+ * @param {control_FullScreenOptions} options TODO: repace this
+ *
+ * @param {string|undefined} options.className CSS class name. Default is `ol-full-screen`.
+ *
+ * @param {string|Node|undefined} options.label Text label to use for the button. Default is `\u2922` (NORTH EAST AND SOUTH WEST ARROW).
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {string|Node|undefined} options.labelActive Text label to use for the button when full-screen is active.
+ * Default is `\u00d7` (a cross).
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {string|undefined} options.tipLabel Text label to use for the button tip. Default is `Toggle full-screen`
+ *
+ * @param {boolean|undefined} options.keys Full keyboard access.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ * @param {Element|string|undefined} options.source The element to be displayed fullscreen. When not provided, the element containing the map viewport will be displayed fullscreen.
+ *
+ */
+
+
+/**
+ * @typedef {{className: (string|undefined),
+ * coordinateFormat: (ol.CoordinateFormatType|undefined),
+ * projection: ol.ProjectionLike,
+ * render: (function(ol.MapEvent)|undefined),
+ * target: (Element|string|undefined),
+ * undefinedHTML: (string|undefined)}}
+ */
+export var control_MousePositionOptions;
+
+/**
+ * @param {control_MousePositionOptions} options TODO: repace this
+ *
+ * @param {string|undefined} options.className CSS class name. Default is `ol-mouse-position`.
+ *
+ * @param {ol.CoordinateFormatType|undefined} options.coordinateFormat Coordinate format.
+ *
+ * @param {ol.ProjectionLike} options.projection Projection.
+ *
+ * @param {function(ol.MapEvent)|undefined} options.render Function called when the control should be re-rendered. This is called
+ * in a requestAnimationFrame callback.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ * @param {string|undefined} options.undefinedHTML Markup for undefined coordinates. Default is `` (empty string).
+ *
+ */
+
+
+/**
+ * @typedef {{collapsed: (boolean|undefined),
+ * collapseLabel: (string|Node|undefined),
+ * collapsible: (boolean|undefined),
+ * label: (string|Node|undefined),
+ * layers: (Array.|ol.Collection.|undefined),
+ * render: (function(ol.MapEvent)|undefined),
+ * target: (Element|string|undefined),
+ * tipLabel: (string|undefined),
+ * view: (ol.View|undefined)}}
+ */
+export var control_OverviewMapOptions;
+
+/**
+ * @param {control_OverviewMapOptions} options TODO: repace this
+ *
+ * @param {boolean|undefined} options.collapsed Whether the control should start collapsed or not (expanded).
+ * Default to `true`.
+ *
+ * @param {string|Node|undefined} options.collapseLabel Text label to use for the expanded overviewmap button. Default is `«`.
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {boolean|undefined} options.collapsible Whether the control can be collapsed or not. Default to `true`.
+ *
+ * @param {string|Node|undefined} options.label Text label to use for the collapsed overviewmap button. Default is `»`.
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {Array.|ol.Collection.|undefined} options.layers Layers for the overview map. If not set, then all main map layers are used
+ * instead.
+ *
+ * @param {function(ol.MapEvent)|undefined} options.render Function called when the control should be re-rendered. This is called
+ * in a requestAnimationFrame callback.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ * @param {string|undefined} options.tipLabel Text label to use for the button tip. Default is `Overview map`
+ *
+ * @param {ol.View|undefined} options.view Custom view for the overview map. If not provided, a default view with
+ * an EPSG:3857 projection will be used.
+ *
+ */
+
+
+/**
+ * @typedef {{className: (string|undefined),
+ * minWidth: (number|undefined),
+ * render: (function(ol.MapEvent)|undefined),
+ * target: (Element|string|undefined),
+ * units: (ol.control.ScaleLineUnits|string|undefined)}}
+ */
+export var control_ScaleLineOptions;
+
+/**
+ * @param {control_ScaleLineOptions} options TODO: repace this
+ *
+ * @param {string|undefined} options.className CSS Class name. Default is `ol-scale-line`.
+ *
+ * @param {number|undefined} options.minWidth Minimum width in pixels. Default is `64`.
+ *
+ * @param {function(ol.MapEvent)|undefined} options.render Function called when the control should be re-rendered. This is called
+ * in a requestAnimationFrame callback.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ * @param {ol.control.ScaleLineUnits|string|undefined} options.units Units. Default is `metric`.
+ *
+ */
+
+
+/**
+ * @typedef {{duration: (number|undefined),
+ * className: (string|undefined),
+ * label: (string|Element|undefined),
+ * tipLabel: (string|undefined),
+ * target: (Element|string|undefined),
+ * render: (function(ol.MapEvent)|undefined),
+ * resetNorth: (function()|undefined),
+ * autoHide: (boolean|undefined)}}
+ */
+export var control_RotateOptions;
+
+/**
+ * @param {control_RotateOptions} options TODO: repace this
+ *
+ * @param {string|undefined} options.className CSS class name. Default is `ol-rotate`.
+ *
+ * @param {string|Element|undefined} options.label Text label to use for the rotate button. Default is `⇧`.
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {string|undefined} options.tipLabel Text label to use for the rotate tip. Default is `Reset rotation`
+ *
+ * @param {number|undefined} options.duration Animation duration in milliseconds. Default is `250`.
+ *
+ * @param {boolean|undefined} options.autoHide Hide the control when rotation is 0. Default is `true`.
+ *
+ * @param {function(ol.MapEvent)|undefined} options.render Function called when the control should be re-rendered. This is called
+ * in a requestAnimationFrame callback.
+ *
+ * @param {function()|undefined} options.resetNorth Function called when the control is clicked. This will override the
+ * default resetNorth.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ */
+
+
+/**
+ * @typedef {{duration: (number|undefined),
+ * className: (string|undefined),
+ * zoomInLabel: (string|Node|undefined),
+ * zoomOutLabel: (string|Node|undefined),
+ * zoomInTipLabel: (string|undefined),
+ * zoomOutTipLabel: (string|undefined),
+ * delta: (number|undefined),
+ * target: (Element|string|undefined)}}
+ */
+export var control_ZoomOptions;
+
+/**
+ * @param {control_ZoomOptions} options TODO: repace this
+ *
+ * @param {number|undefined} options.duration Animation duration in milliseconds. Default is `250`.
+ *
+ * @param {string|undefined} options.className CSS class name. Default is `ol-zoom`.
+ *
+ * @param {string|Node|undefined} options.zoomInLabel Text label to use for the zoom-in button. Default is `+`.
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {string|Node|undefined} options.zoomOutLabel Text label to use for the zoom-out button. Default is `-`.
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {string|undefined} options.zoomInTipLabel Text label to use for the button tip. Default is `Zoom in`
+ *
+ * @param {string|undefined} options.zoomOutTipLabel Text label to use for the button tip. Default is `Zoom out`
+ *
+ * @param {number|undefined} options.delta The zoom delta applied on each click.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ */
+
+
+/**
+ * @typedef {{className: (string|undefined),
+ * duration: (number|undefined),
+ * maxResolution: (number|undefined),
+ * minResolution: (number|undefined),
+ * render: (function(ol.MapEvent)|undefined)}}
+ */
+export var control_ZoomSliderOptions;
+
+/**
+ * @param {control_ZoomSliderOptions} options TODO: repace this
+ *
+ * @param {string|undefined} options.className CSS class name.
+ *
+ * @param {number|undefined} options.duration Animation duration in milliseconds. Default is `200`.
+ *
+ * @param {number|undefined} options.maxResolution Maximum resolution.
+ *
+ * @param {number|undefined} options.minResolution Minimum resolution.
+ *
+ * @param {function(ol.MapEvent)|undefined} options.render Function called when the control should be re-rendered. This is called
+ * in a requestAnimationFrame callback.
+ *
+ */
+
+
+/**
+ * @typedef {{className: (string|undefined),
+ * target: (Element|string|undefined),
+ * label: (string|Node|undefined),
+ * tipLabel: (string|undefined),
+ * extent: (ol.Extent|undefined)}}
+ */
+export var control_ZoomToExtentOptions;
+
+/**
+ * @param {control_ZoomToExtentOptions} options TODO: repace this
+ *
+ * @param {string|undefined} options.className Class name. Default is `ol-zoom-extent`.
+ *
+ * @param {Element|string|undefined} options.target Specify a target if you want the control to be rendered outside of the map's
+ * viewport.
+ *
+ * @param {string|Node|undefined} options.label Text label to use for the button. Default is `E`.
+ * Instead of text, also a Node (e.g. a `span` element) can be used.
+ *
+ * @param {string|undefined} options.tipLabel Text label to use for the button tip. Default is `Zoom to extent`
+ *
+ * @param {ol.Extent|undefined} options.extent The extent to zoom to. If undefined the validity extent of the view
+ * projection is used.
+ *
+ */
+
+
+/**
+ * @typedef {{dataProjection: ol.ProjectionLike,
+ * extent: (ol.Extent|undefined),
+ * featureProjection: ol.ProjectionLike,
+ * rightHanded: (boolean|undefined)}}
+ */
+export var format_ReadOptions;
+
+/**
+ * @param {format_ReadOptions} options TODO: repace this
+ *
+ * @param {ol.ProjectionLike} options.dataProjection Projection of the data we are reading. If not provided, the projection will
+ * be derived from the data (where possible) or the `defaultDataProjection` of
+ * the format is assigned (where set). If the projection can not be derived from
+ * the data and if no `defaultDataProjection` is set for a format, the features
+ * will not be reprojected.
+ *
+ * @param {ol.Extent} options.extent Tile extent of the tile being read. This is only used and required for
+ * {@link ol.format.MVT}.
+ *
+ * @param {ol.ProjectionLike} options.featureProjection Projection of the feature geometries created by the format reader. If not
+ * provided, features will be returned in the `dataProjection`.
+ *
+ */
+
+
+/**
+ * @typedef {{dataProjection: ol.ProjectionLike,
+ * featureProjection: ol.ProjectionLike,
+ * rightHanded: (boolean|undefined),
+ * decimals: (number|undefined)}}
+ */
+export var format_WriteOptions;
+
+/**
+ * @param {format_WriteOptions} options TODO: repace this
+ *
+ * @param {ol.ProjectionLike} options.dataProjection Projection of the data we are writing. If not provided, the
+ * `defaultDataProjection` of the format is assigned (where set). If no
+ * `defaultDataProjection` is set for a format, the features will be returned
+ * in the `featureProjection`.
+ *
+ * @param {ol.ProjectionLike} options.featureProjection 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.
+ *
+ * @param {boolean|undefined} options.rightHanded 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.
+ *
+ *
+ * @param {number|undefined} options.decimals 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.
+ *
+ *
+ */
+
+
+/**
+ * @typedef {{defaultDataProjection: ol.ProjectionLike,
+ * geometryName: (string|undefined),
+ * extractGeometryName: (boolean|undefined),
+ * featureProjection: ol.ProjectionLike}}
+ */
+export var format_GeoJSONOptions;
+
+/**
+ * @param {format_GeoJSONOptions} options TODO: repace this
+ *
+ * @param {ol.ProjectionLike} options.defaultDataProjection Default data projection. Default is `EPSG:4326`.
+ *
+ * @param {ol.ProjectionLike} options.featureProjection Projection for features read or written by the format. Options passed to
+ * read or write methods will take precedence.
+ *
+ * @param {string|undefined} options.geometryName Geometry name to use when creating features.
+ *
+ * @param {boolean|undefined} options.extractGeometryName Certain GeoJSON providers include the geometry_name field in the feature
+ * geoJSON. If set to `true` the geoJSON reader will look for that field to
+ * set the geometry name. If both this field is set to `true` and a
+ * `geometryName` is provided, the `geometryName` will take precedence.
+ * Default is `false`.
+ *
+ */
+
+
+/**
+ * @typedef {{geometryName: (string|undefined)}}
+ */
+export var format_EsriJSONOptions;
+
+/**
+ * @param {format_EsriJSONOptions} options TODO: repace this
+ *
+ * @param {string|undefined} options.geometryName Geometry name to use when creating features.
+ *
+ */
+
+
+/**
+ * @typedef {{featureClass: (function((ol.geom.Geometry|Object.)=)|
+ * function(ol.geom.GeometryType,Array.,
+ * (Array.|Array.>),Object.)|
+ * undefined),
+ * geometryName: (string|undefined),
+ * layers: (Array.|undefined),
+ * layerName: (string|undefined)}}
+ */
+export var format_MVTOptions;
+
+/**
+ * @param {format_MVTOptions} options TODO: repace this
+ *
+ * @param {undefined|function((ol.geom.Geometry|Object.)=)| function(ol.geom.GeometryType,Array.,
+ (Array.|Array.>),Object.,number)}
+ options.featureClass Class for features returned by {@link ol.format.MVT#readFeatures}. Set to
+ * {@link ol.Feature} to get full editing and geometry support at the cost of
+ * decreased rendering performance. The default is {@link ol.render.Feature},
+ * which is optimized for rendering and hit detection.
+ *
+ * @param {string|undefined} options.geometryName Geometry name to use when creating features. Default is 'geometry'.
+ *
+ * @param {string|undefined} options.layerName Name of the feature attribute that holds the layer name. Default is 'layer'.
+ *
+ * @param {Array.|undefined} options.layers Layers to read features from. If not provided, features will be read from all
+ * layers.
+ *
+ */
+
+
+/**
+ * @typedef {{factor: (number|undefined),
+ * geometryLayout: (ol.geom.GeometryLayout|undefined)}}
+ */
+export var format_PolylineOptions;
+
+/**
+ * @param {format_PolylineOptions} options TODO: repace this
+ *
+ * @param {number|undefined} options.factor The factor by which the coordinates values will be scaled.
+ * Default is `1e5`.
+ *
+ * @param {ol.geom.GeometryLayout|undefined} options.geometryLayout Layout of the feature geometries created by the format reader.
+ * Default is `ol.geom.GeometryLayout.XY`.
+ *
+ */
+
+
+/**
+ * @typedef {{
+ * defaultDataProjection: ol.ProjectionLike,
+ * layerName: (string|undefined),
+ * layers: (Array.|undefined)
+ * }}
+ */
+export var format_TopoJSONOptions;
+
+/**
+ * @param {format_TopoJSONOptions} options TODO: repace this
+ *
+ * @param {ol.ProjectionLike} options.defaultDataProjection Default data projection. Default is `EPSG:4326`.
+ *
+ * @param {string|undefined} options.layerName 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.
+ *
+ * @param {Array.|undefined} options.layers Names of the TopoJSON topology's `objects`'s children to read features from.
+ * If not provided, features will be read from all children.
+ *
+ */
+
+
+/**
+ * @typedef {{altitudeMode: (ol.format.IGCZ|undefined)}}
+ */
+export var format_IGCOptions;
+
+/**
+ * @param {format_IGCOptions} options TODO: repace this
+ *
+ * @param {ol.format.IGCZ|undefined} options.altitudeMode Altitude mode. Possible values are `barometric`, `gps`, and `none`. Default
+ * is `none`.
+ *
+ */
+
+
+/**
+ * @typedef {{extractStyles: (boolean|undefined),
+ * defaultStyle: (Array.|undefined),
+ * showPointNames: (boolean|undefined),
+ * writeStyles: (boolean|undefined)}}
+ */
+export var format_KMLOptions;
+
+/**
+ * @param {format_KMLOptions} options TODO: repace this
+ *
+ * @param {boolean|undefined} options.extractStyles Extract styles from the KML. Default is `true`.
+ *
+ * @param {boolean|undefined} options.showPointNames Show names as labels for placemarks which contain points. Default is `true`.
+ *
+ * @param {Array.|undefined} options.defaultStyle Default style. The default default style is the same as Google Earth.
+ *
+ * @param {boolean|undefined} options.writeStyles Write styles into KML. Default is `true`.
+ *
+ */
+
+
+/**
+ * @typedef {{featureNS: (Object.|string|undefined),
+ * featureType: (Array.|string|undefined),
+ * srsName: string,
+ * surface: (boolean|undefined),
+ * curve: (boolean|undefined),
+ * multiCurve: (boolean|undefined),
+ * multiSurface: (boolean|undefined),
+ * schemaLocation: (string|undefined)}}
+ */
+export var format_GMLOptions;
+
+/**
+ * @param {format_GMLOptions} options TODO: repace this
+ *
+ * @param {Object.|string|undefined} options.featureNS Feature namespace. If not defined will be derived from GML. If multiple
+ * feature types have been configured which come from different feature
+ * namespaces, this will be an object with the keys being the prefixes used
+ * in the entries of featureType array. The values of the object will be the
+ * feature namespaces themselves. So for instance there might be a featureType
+ * item `topp:states` in the `featureType` array and then there will be a key
+ * `topp` in the featureNS object with value `http://www.openplans.org/topp`.
+ *
+ * @param {Array.|string|undefined} options.featureType Feature type(s) to parse. If multiple feature types need to be configured
+ * which come from different feature namespaces, `featureNS` will be an object
+ * with the keys being the prefixes used in the entries of featureType array.
+ * The values of the object will be the feature namespaces themselves.
+ * So for instance there might be a featureType item `topp:states` and then
+ * there will be a key named `topp` in the featureNS object with value
+ * `http://www.openplans.org/topp`.
+ *
+ * @param {string} options.srsName srsName to use when writing geometries.
+ *
+ * @param {boolean|undefined} options.surface Write gml:Surface instead of gml:Polygon elements. This also affects the
+ * elements in multi-part geometries. Default is `false`.
+ *
+ * @param {boolean|undefined} options.curve Write gml:Curve instead of gml:LineString elements. This also affects the
+ * elements in multi-part geometries. Default is `false`.
+ *
+ * @param {boolean|undefined} options.multiCurve Write gml:MultiCurve instead of gml:MultiLineString. Since the latter is
+ * deprecated in GML 3, the default is `true`.
+ *
+ * @param {boolean|undefined} options.multiSurface Write gml:multiSurface instead of gml:MultiPolygon. Since the latter is
+ * deprecated in GML 3, the default is `true`.
+ *
+ * @param {string|undefined} options.schemaLocation Optional schemaLocation to use when writing out the GML, this will override
+ * the default provided.
+ *
+ */
+
+
+/**
+ * @typedef {{readExtensions: (function(ol.Feature, Node)|undefined)}}
+ */
+export var format_GPXOptions;
+
+/**
+ * @param {format_GPXOptions} options TODO: repace this
+ *
+ * @param {function(ol.Feature, Node)|undefined} options.readExtensions Callback function to process `extensions` nodes.
+ * To prevent memory leaks, this callback function must
+ * not store any references to the node. Note that the `extensions`
+ * node is not allowed in GPX 1.0. Moreover, only `extensions`
+ * nodes from `wpt`, `rte` and `trk` can be processed, as those are
+ * directly mapped to a feature.
+ *
+ */
+
+
+/**
+ * @typedef {{featureNS: (Object.|string|undefined),
+ * featureType: (Array.|string|undefined),
+ * gmlFormat: (ol.format.GMLBase|undefined),
+ * schemaLocation: (string|undefined)}}
+ */
+export var format_WFSOptions;
+
+/**
+ * @param {format_WFSOptions} options TODO: repace this
+ *
+ * @param {Object.|string|undefined} options.featureNS The namespace URI used for features.
+ *
+ * @param {Array.|string|undefined} options.featureType The feature type to parse. Only used for read operations.
+ *
+ * @param {ol.format.GMLBase|undefined} options.gmlFormat The GML format to use to parse the response. Default is `ol.format.GML3`.
+ *
+ * @param {string|undefined} options.schemaLocation Optional schemaLocation to use for serialization, this will override the
+ * default.
+ *
+ */
+
+
+/**
+ * @typedef {{featureNS: string,
+ * featurePrefix: string,
+ * featureTypes: Array.,
+ * srsName: (string|undefined),
+ * handle: (string|undefined),
+ * outputFormat: (string|undefined),
+ * maxFeatures: (number|undefined),
+ * geometryName: (string|undefined),
+ * propertyNames: (Array.|undefined),
+ * startIndex: (number|undefined),
+ * count: (number|undefined),
+ * bbox: (ol.Extent|undefined),
+ * filter: (ol.format.filter.Filter|undefined),
+ * resultType: (string|undefined)}}
+ */
+export var format_WFSWriteGetFeatureOptions;
+
+/**
+ * @param {format_WFSWriteGetFeatureOptions} options TODO: repace this
+ *
+ * @param {string} options.featureNS The namespace URI used for features.
+ *
+ * @param {string} options.featurePrefix The prefix for the feature namespace.
+ *
+ * @param {Array.} options.featureTypes The feature type names.
+ *
+ * @param {string|undefined} options.srsName SRS name. No srsName attribute will be set on geometries when this is not
+ * provided.
+ *
+ * @param {string|undefined} options.handle Handle.
+ *
+ * @param {string|undefined} options.outputFormat Output format.
+ *
+ * @param {number|undefined} options.maxFeatures Maximum number of features to fetch.
+ *
+ * @param {string|undefined} options.geometryName Geometry name to use in a BBOX filter.
+ *
+ * @param {Array.|undefined} options.propertyNames Optional list of property names to serialize.
+ *
+ * @param {number|undefined} options.startIndex Start index to use for WFS paging. This is a WFS 2.0 feature backported to
+ * WFS 1.1.0 by some Web Feature Services.
+ *
+ * @param {number|undefined} options.count Number of features to retrieve when paging. This is a WFS 2.0 feature
+ * backported to WFS 1.1.0 by some Web Feature Services. Please note that some
+ * Web Feature Services have repurposed `maxfeatures` instead.
+ *
+ * @param {ol.Extent|undefined} options.bbox Extent to use for the BBOX filter.
+ *
+ * @param {ol.format.filter.Filter|undefined} options.filter Filter condition. See {@link ol.format.filter} for more information.
+ *
+ * @param {string|undefined} options.resultType Indicates what response should be returned, E.g. `hits` only includes the
+ * `numberOfFeatures` attribute in the response and no features.
+ *
+ */
+
+
+/**
+ * @typedef {{featureNS: string,
+ * featurePrefix: string,
+ * featureType: string,
+ * srsName: (string|undefined),
+ * handle: (string|undefined),
+ * hasZ: (boolean|undefined),
+ * nativeElements: Array.