package.format.KML.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ol Show documentation
Show all versions of ol Show documentation
OpenLayers mapping library
The newest version!
/**
* @module ol/format/KML
*/
import Feature from '../Feature.js';
import Fill from '../style/Fill.js';
import GeometryCollection from '../geom/GeometryCollection.js';
import Icon from '../style/Icon.js';
import ImageState from '../ImageState.js';
import LineString from '../geom/LineString.js';
import MultiLineString from '../geom/MultiLineString.js';
import MultiPoint from '../geom/MultiPoint.js';
import MultiPolygon from '../geom/MultiPolygon.js';
import Point from '../geom/Point.js';
import Polygon from '../geom/Polygon.js';
import Stroke from '../style/Stroke.js';
import Style from '../style/Style.js';
import Text from '../style/Text.js';
import XMLFeature from './XMLFeature.js';
import {
OBJECT_PROPERTY_NODE_FACTORY,
XML_SCHEMA_INSTANCE_URI,
createElementNS,
getAllTextContent,
isDocument,
makeArrayExtender,
makeArrayPusher,
makeChildAppender,
makeObjectPropertySetter,
makeReplacer,
makeSequence,
makeSimpleNodeFactory,
makeStructureNS,
parse,
parseNode,
pushParseAndPop,
pushSerializeAndPop,
} from '../xml.js';
import {asArray} from '../color.js';
import {extend} from '../array.js';
import {get as getProjection} from '../proj.js';
import {
readBoolean,
readDecimal,
readString,
writeBooleanTextNode,
writeCDATASection,
writeDecimalTextNode,
writeStringTextNode,
} from './xsd.js';
import {toRadians} from '../math.js';
import {transformGeometryWithOptions} from './Feature.js';
/**
* @typedef {Object} Vec2
* @property {number} x X coordinate.
* @property {import("../style/Icon.js").IconAnchorUnits} xunits Units of x.
* @property {number} y Y coordinate.
* @property {import("../style/Icon.js").IconAnchorUnits} yunits Units of Y.
* @property {import("../style/Icon.js").IconOrigin} [origin] Origin.
*/
/**
* @typedef {Object} GxTrackObject
* @property {Array>} coordinates Coordinates.
* @property {Array} whens Whens.
*/
/**
* @const
* @type {Array}
*/
const GX_NAMESPACE_URIS = ['http://www.google.com/kml/ext/2.2'];
/**
* @const
* @type {Array}
*/
const NAMESPACE_URIS = [
null,
'http://earth.google.com/kml/2.0',
'http://earth.google.com/kml/2.1',
'http://earth.google.com/kml/2.2',
'http://www.opengis.net/kml/2.2',
];
/**
* @const
* @type {string}
*/
const SCHEMA_LOCATION =
'http://www.opengis.net/kml/2.2 ' +
'https://developers.google.com/kml/schema/kml22gx.xsd';
/**
* @type {Object}
*/
const ICON_ANCHOR_UNITS_MAP = {
'fraction': 'fraction',
'pixels': 'pixels',
'insetPixels': 'pixels',
};
/**
* @const
* @type {Object>}
*/
// @ts-ignore
const PLACEMARK_PARSERS = makeStructureNS(
NAMESPACE_URIS,
{
'ExtendedData': extendedDataParser,
'Region': regionParser,
'MultiGeometry': makeObjectPropertySetter(readMultiGeometry, 'geometry'),
'LineString': makeObjectPropertySetter(readLineString, 'geometry'),
'LinearRing': makeObjectPropertySetter(readLinearRing, 'geometry'),
'Point': makeObjectPropertySetter(readPoint, 'geometry'),
'Polygon': makeObjectPropertySetter(readPolygon, 'geometry'),
'Style': makeObjectPropertySetter(readStyle),
'StyleMap': placemarkStyleMapParser,
'address': makeObjectPropertySetter(readString),
'description': makeObjectPropertySetter(readString),
'name': makeObjectPropertySetter(readString),
'open': makeObjectPropertySetter(readBoolean),
'phoneNumber': makeObjectPropertySetter(readString),
'styleUrl': makeObjectPropertySetter(readStyleURL),
'visibility': makeObjectPropertySetter(readBoolean),
},
makeStructureNS(GX_NAMESPACE_URIS, {
'MultiTrack': makeObjectPropertySetter(readGxMultiTrack, 'geometry'),
'Track': makeObjectPropertySetter(readGxTrack, 'geometry'),
}),
);
/**
* @const
* @type {Object>}
*/
// @ts-ignore
const NETWORK_LINK_PARSERS = makeStructureNS(NAMESPACE_URIS, {
'ExtendedData': extendedDataParser,
'Region': regionParser,
'Link': linkParser,
'address': makeObjectPropertySetter(readString),
'description': makeObjectPropertySetter(readString),
'name': makeObjectPropertySetter(readString),
'open': makeObjectPropertySetter(readBoolean),
'phoneNumber': makeObjectPropertySetter(readString),
'visibility': makeObjectPropertySetter(readBoolean),
});
/**
* @const
* @type {Object>}
*/
// @ts-ignore
const LINK_PARSERS = makeStructureNS(NAMESPACE_URIS, {
'href': makeObjectPropertySetter(readURI),
});
/**
* @const
* @type {Object>}
*/
// @ts-ignore
const CAMERA_PARSERS = makeStructureNS(NAMESPACE_URIS, {
Altitude: makeObjectPropertySetter(readDecimal),
Longitude: makeObjectPropertySetter(readDecimal),
Latitude: makeObjectPropertySetter(readDecimal),
Tilt: makeObjectPropertySetter(readDecimal),
AltitudeMode: makeObjectPropertySetter(readString),
Heading: makeObjectPropertySetter(readDecimal),
Roll: makeObjectPropertySetter(readDecimal),
});
/**
* @const
* @type {Object>}
*/
// @ts-ignore
const REGION_PARSERS = makeStructureNS(NAMESPACE_URIS, {
'LatLonAltBox': latLonAltBoxParser,
'Lod': lodParser,
});
/**
* @const
* @type {Object>}
*/
// @ts-ignore
const KML_SEQUENCE = makeStructureNS(NAMESPACE_URIS, ['Document', 'Placemark']);
/**
* @const
* @type {Object>}
*/
// @ts-ignore
const KML_SERIALIZERS = makeStructureNS(NAMESPACE_URIS, {
'Document': makeChildAppender(writeDocument),
'Placemark': makeChildAppender(writePlacemark),
});
/**
* @type {import("../color.js").Color}
*/
let DEFAULT_COLOR;
/**
* @type {Fill|null}
*/
let DEFAULT_FILL_STYLE = null;
/**
* Get the default fill style (or null if not yet set).
* @return {Fill|null} The default fill style.
*/
export function getDefaultFillStyle() {
return DEFAULT_FILL_STYLE;
}
/**
* @type {import("../size.js").Size}
*/
let DEFAULT_IMAGE_STYLE_ANCHOR;
/**
* @type {import("../style/Icon.js").IconAnchorUnits}
*/
let DEFAULT_IMAGE_STYLE_ANCHOR_X_UNITS;
/**
* @type {import("../style/Icon.js").IconAnchorUnits}
*/
let DEFAULT_IMAGE_STYLE_ANCHOR_Y_UNITS;
/**
* @type {import("../size.js").Size}
*/
let DEFAULT_IMAGE_STYLE_SIZE;
/**
* @type {string}
*/
let DEFAULT_IMAGE_STYLE_SRC;
/**
* @type {import("../style/Image.js").default|null}
*/
let DEFAULT_IMAGE_STYLE = null;
/**
* Get the default image style (or null if not yet set).
* @return {import("../style/Image.js").default|null} The default image style.
*/
export function getDefaultImageStyle() {
return DEFAULT_IMAGE_STYLE;
}
/**
* @type {string}
*/
let DEFAULT_NO_IMAGE_STYLE;
/**
* @type {Stroke|null}
*/
let DEFAULT_STROKE_STYLE = null;
/**
* Get the default stroke style (or null if not yet set).
* @return {Stroke|null} The default stroke style.
*/
export function getDefaultStrokeStyle() {
return DEFAULT_STROKE_STYLE;
}
/**
* @type {Stroke}
*/
let DEFAULT_TEXT_STROKE_STYLE;
/**
* @type {Text|null}
*/
let DEFAULT_TEXT_STYLE = null;
/**
* Get the default text style (or null if not yet set).
* @return {Text|null} The default text style.
*/
export function getDefaultTextStyle() {
return DEFAULT_TEXT_STYLE;
}
/**
* @type {Style|null}
*/
let DEFAULT_STYLE = null;
/**
* Get the default style (or null if not yet set).
* @return {Style|null} The default style.
*/
export function getDefaultStyle() {
return DEFAULT_STYLE;
}
/**
* @type {Array