react-spatial 1.0.30 → 1.0.31-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-spatial",
3
3
  "description": "Components to build React map apps.",
4
- "version": "1.0.30",
4
+ "version": "1.0.31-beta.3",
5
5
  "license": "MIT",
6
6
  "dependencies": {
7
7
  "@geops/geops-ui": "0.1.11",
package/utils/KML.js CHANGED
@@ -5,6 +5,7 @@ import MultiPoint from 'ol/geom/MultiPoint';
5
5
  import GeometryCollection from 'ol/geom/GeometryCollection';
6
6
  import { Style, Text, Icon, Circle, Fill, Stroke } from 'ol/style';
7
7
  import { asString } from 'ol/color';
8
+ import { parse } from 'ol/xml';
8
9
  import { kmlStyle } from './Styles';
9
10
  import getPolygonPattern from './getPolygonPattern';
10
11
 
@@ -547,6 +548,51 @@ var writeFeatures = function (layer, featureProjection, mapResolution) {
547
548
  return featString;
548
549
  };
549
550
 
550
- export default { readFeatures: readFeatures, writeFeatures: writeFeatures };
551
+ /**
552
+ * Removes the <Camera> tag from a KML string. Returns the KML string with removed <Camera> tag.
553
+ * @param {String} kmlString A string representing a KML file.
554
+ */
555
+ var removeDocumentCamera = function (kmlString) {
556
+ var kmlDoc = parse(kmlString);
557
+ // Remove old Camera node
558
+ var oldCameraNode = kmlDoc.getElementsByTagName('Camera')[0];
559
+ if (oldCameraNode) {
560
+ oldCameraNode.remove();
561
+ }
562
+ return new XMLSerializer().serializeToString(kmlDoc);
563
+ };
564
+
565
+ /**
566
+ * Write the <Camera> tag into a KML string. Returns the KML string with added <Camera> tag.
567
+ * @param {String} kmlString A string representing a KML file.
568
+ * @param {Object} cameraAttributes Object containing the camera tags (longitude, latitude, altitude, heading, tilt, altitudeMode, roll)
569
+ * as keys with corresponding values. See https://developers.google.com/kml/documentation/kmlreference#camera
570
+ */
571
+ var writeDocumentCamera = function (kmlString, cameraAttributes) {
572
+ var kmlDoc = parse(removeDocumentCamera(kmlString));
573
+
574
+ if (cameraAttributes) {
575
+ // Create Camera node with child attributes if the cameraAttributes object is defined
576
+ var cameraNode = kmlDoc.createElement('Camera');
577
+ Object.keys(cameraAttributes).forEach(function (key) {
578
+ var cameraAttribute = kmlDoc.createElement(
579
+ ("" + (key.charAt(0).toUpperCase() + key.slice(1)))
580
+ );
581
+ cameraAttribute.innerHTML = cameraAttributes[key];
582
+ cameraNode.appendChild(cameraAttribute);
583
+ });
584
+ var documentNode = kmlDoc.getElementsByTagName('Document')[0];
585
+ documentNode.appendChild(cameraNode);
586
+ }
587
+
588
+ return new XMLSerializer().serializeToString(kmlDoc);
589
+ };
590
+
591
+ export default {
592
+ readFeatures: readFeatures,
593
+ writeFeatures: writeFeatures,
594
+ writeDocumentCamera: writeDocumentCamera,
595
+ removeDocumentCamera: removeDocumentCamera,
596
+ };
551
597
 
552
598
  //# sourceMappingURL=KML.js.map
package/utils/KML.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"KML.js","sources":["../../src/utils/KML.js"],"sourcesContent":["import KML from 'ol/format/KML';\nimport { Feature } from 'ol';\nimport Point from 'ol/geom/Point';\nimport MultiPoint from 'ol/geom/MultiPoint';\nimport GeometryCollection from 'ol/geom/GeometryCollection';\nimport { Style, Text, Icon, Circle, Fill, Stroke } from 'ol/style';\nimport { asString } from 'ol/color';\nimport { kmlStyle } from './Styles';\nimport getPolygonPattern from './getPolygonPattern';\n\nconst applyTextStyleForIcon = (olIcon, olText) => {\n const size = olIcon.getSize() || [48, 48];\n const scale = olIcon.getScale() || 1;\n const anchor = olIcon.getAnchor() || [\n (size[0] * scale) / 2,\n (size[1] * scale) / 2,\n ];\n const offset = [\n scale * (size[0] - anchor[0]) + 5,\n scale * (size[1] / 2 - anchor[1]),\n ];\n olText.setOffsetX(offset[0]);\n olText.setOffsetY(offset[1]);\n olText.setTextAlign('left');\n};\n\nconst getVertexCoord = (geom, start = true, index = 0) => {\n const coords = geom.getCoordinates();\n const len = coords.length - 1;\n return start ? coords[index] : coords[len - index];\n};\n\nconst getLineIcon = (feature, icon, color, start = true) => {\n const geom = feature.getGeometry();\n const coordA = getVertexCoord(geom, start, 1);\n const coordB = getVertexCoord(geom, start);\n const dx = start ? coordA[0] - coordB[0] : coordB[0] - coordA[0];\n const dy = start ? coordA[1] - coordB[1] : coordB[1] - coordA[1];\n const rotation = Math.atan2(dy, dx);\n\n return new Style({\n geometry: (feat) => {\n const ge = feat.getGeometry();\n return new Point(getVertexCoord(ge, start));\n },\n image: new Icon({\n src: icon.url,\n color,\n rotation: -rotation,\n rotateWithView: true,\n scale: icon.scale,\n imgSize: icon.size, // ie 11\n }),\n zIndex: icon.zIndex,\n });\n};\n\n// Clean the unneeded feature's style and properties created by the KML parser.\nconst sanitizeFeature = (feature) => {\n const geom = feature.getGeometry();\n let styles = feature.getStyleFunction();\n\n // Store maxZoom in properties\n if (feature.get('maxZoom')) {\n feature.set('maxZoom', parseFloat(feature.get('maxZoom'), 10));\n }\n\n // Store minZoom in properties\n if (feature.get('minZoom')) {\n feature.set('minZoom', parseFloat(feature.get('minZoom'), 10));\n }\n\n // The use of clone is part of the scale fix line 156\n const tmpStyles = styles(feature);\n const style = (Array.isArray(tmpStyles) ? tmpStyles[0] : tmpStyles).clone();\n\n let stroke = style.getStroke();\n if (stroke && feature.get('lineDash')) {\n stroke.setLineDash(\n feature\n .get('lineDash')\n .split(',')\n .map((l) => {\n return parseInt(l, 10);\n }),\n );\n }\n\n // The canvas draws a stroke width=1 by default if width=0, so we\n // remove the stroke style in that case.\n if (stroke && stroke.getWidth() === 0) {\n stroke = undefined;\n }\n\n if (feature.get('zIndex')) {\n style.setZIndex(parseInt(feature.get('zIndex'), 10));\n }\n\n // if the feature is a Point and we are offline, we use default vector\n // style.\n // if the feature is a Point and has a name with a text style, we\n // create a correct text style.\n // TODO Handle GeometryCollection displaying name on the first Point\n // geometry.\n if (style && (geom instanceof Point || geom instanceof MultiPoint)) {\n let image = style.getImage();\n let text = null;\n let fill = style.getFill();\n\n // If the feature has name we display it on the map as Google does\n if (\n feature.get('name') &&\n style.getText() &&\n style.getText().getScale() !== 0\n ) {\n if (image && image.getScale() === 0) {\n // transparentCircle is used to allow selection\n image = new Circle({\n radius: 1,\n fill: new Fill({ color: [0, 0, 0, 0] }),\n stroke: new Stroke({ color: [0, 0, 0, 0] }),\n });\n }\n\n // We replace empty white spaces used to keep normal spaces before and after the name.\n let name = feature.get('name');\n if (/\\u200B/g.test(name)) {\n name = name.replace(/\\u200B/g, '');\n feature.set('name', name);\n }\n\n text = new Text({\n font: feature.get('textFont') || 'normal 16px Helvetica',\n text: feature.get('name'),\n fill: style.getText().getFill(),\n // rotation unsupported by KML, taken instead from custom field.\n rotation: feature.get('textRotation') || 0,\n // since ol 6.3.1 : https://github.com/openlayers/openlayers/pull/10613/files#diff-1883da8b57e690db7ea0c35ce53c880aR925\n // a default textstroke is added to mimic google earth.\n // it was not the case before, the stroke was always null. So to keep\n // the same behavior we don't copy the stroke style.\n // TODO : maybe we should use this functionnality in the futur.\n // stroke: style.getText().getStroke(),\n scale: style.getText().getScale(),\n });\n\n if (feature.get('textStrokeColor') && feature.get('textStrokeWidth')) {\n text.setStroke(\n new Stroke({\n color: feature.get('textStrokeColor'),\n width: parseFloat(feature.get('textStrokeWidth')),\n }),\n );\n }\n\n if (feature.get('textAlign')) {\n text.setTextAlign(feature.get('textAlign'));\n }\n\n if (feature.get('textOffsetX')) {\n text.setOffsetX(parseFloat(feature.get('textOffsetX')));\n }\n\n if (feature.get('textOffsetY')) {\n text.setOffsetY(parseFloat(feature.get('textOffsetY')));\n }\n\n if (feature.get('textBackgroundFillColor')) {\n text.setBackgroundFill(\n new Fill({\n color: feature.get('textBackgroundFillColor'),\n }),\n );\n }\n\n if (feature.get('textPadding')) {\n text.setPadding(\n feature\n .get('textPadding')\n .split(',')\n .map((n) => {\n return parseFloat(n);\n }),\n );\n }\n\n if (image instanceof Icon) {\n applyTextStyleForIcon(image, text);\n }\n }\n\n if (image instanceof Icon) {\n /* Apply icon rotation if defined (by default only written as\n * <heading> tag, which is not read as rotation value by the ol KML module)\n */\n image.setRotation(parseFloat(feature.get('iconRotation')) || 0);\n }\n\n fill = undefined;\n stroke = undefined;\n\n styles = (feat, resolution) => {\n /* Options to be used for picture scaling with map, should have at least\n * a resolution attribute (this is the map resolution at the zoom level when\n * the picture is created), can take an optional constant for further scale\n * adjustment.\n * e.g. { resolution: 0.123, defaultScale: 1 / 6 }\n */\n\n if (feat.get('pictureOptions')) {\n let pictureOptions = feat.get('pictureOptions');\n if (typeof pictureOptions === 'string') {\n pictureOptions = JSON.parse(pictureOptions);\n }\n feat.set('pictureOptions', pictureOptions);\n if (pictureOptions.resolution) {\n image.setScale(\n (pictureOptions.resolution / resolution) *\n pictureOptions.defaultScale || 1,\n );\n }\n }\n\n return new Style({\n fill,\n stroke,\n image,\n text,\n zIndex: style.getZIndex(),\n });\n };\n }\n\n // Remove image and text styles for polygons and lines\n if (\n !(\n geom instanceof Point ||\n geom instanceof MultiPoint ||\n geom instanceof GeometryCollection\n )\n ) {\n styles = [\n new Style({\n fill: style.getFill(),\n stroke,\n image: null,\n text: null,\n zIndex: style.getZIndex(),\n }),\n ];\n\n // Parse the fillPattern json string and store parsed object\n let fillPattern = feature.get('fillPattern');\n if (fillPattern) {\n fillPattern = JSON.parse(fillPattern);\n feature.set('fillPattern', fillPattern);\n\n /* We set the fill pattern for polygons */\n if (!style.getFill()) {\n styles[0].setFill(new Fill());\n }\n const patternOrColor = fillPattern.empty\n ? [0, 0, 0, 0]\n : getPolygonPattern(fillPattern.id, fillPattern.color);\n styles[0].getFill().setColor(patternOrColor);\n }\n\n // Add line's icons styles\n if (feature.get('lineStartIcon')) {\n styles.push(\n getLineIcon(\n feature,\n JSON.parse(feature.get('lineStartIcon')),\n stroke.getColor(),\n ),\n );\n }\n\n if (feature.get('lineEndIcon')) {\n styles.push(\n getLineIcon(\n feature,\n JSON.parse(feature.get('lineEndIcon')),\n stroke.getColor(),\n false,\n ),\n );\n }\n }\n feature.setStyle(styles);\n};\n\n/**\n * Read a KML string.\n * @param {String} kmlString A string representing a KML file.\n * @param {<ol.Projection|String>} featureProjection The projection used by the map.\n */\nconst readFeatures = (kmlString, featureProjection) => {\n const features = new KML().readFeatures(kmlString, {\n featureProjection,\n });\n features.forEach((feature) => {\n sanitizeFeature(feature);\n });\n return features;\n};\n\n/**\n * Create a KML string.\n * @param {VectorLayer} layer A react-spatial VectorLayer.\n * @param {<ol.Projection|String>} featureProjection The current projection used by the features.\n */\nconst writeFeatures = (layer, featureProjection, mapResolution) => {\n let featString;\n const { olLayer } = layer;\n const exportFeatures = [];\n\n olLayer.getSource().forEachFeature((feature) => {\n // We silently ignore Circle elements as they are\n // not supported in kml.\n if (feature.getGeometry().getType() === 'Circle') {\n return;\n }\n\n const clone = feature.clone();\n clone.setId(feature.getId());\n clone.getGeometry().setProperties(feature.getGeometry().getProperties());\n clone.getGeometry().transform(featureProjection, 'EPSG:4326');\n\n // We remove all ExtendedData not related to style.\n Object.keys(feature.getProperties()).forEach((key) => {\n if (!/^(geometry|name|description)$/.test(key)) {\n clone.unset(key, true);\n }\n });\n\n let styles;\n\n if (feature.getStyleFunction()) {\n styles = feature.getStyleFunction()(feature, mapResolution);\n } else if (olLayer && olLayer.getStyleFunction()) {\n styles = olLayer.getStyleFunction()(feature, mapResolution);\n }\n\n const mainStyle = styles[0] || styles;\n\n const newStyle = {\n fill: mainStyle.getFill(),\n stroke: mainStyle.getStroke(),\n text: mainStyle.getText(),\n image: mainStyle.getImage(),\n zIndex: mainStyle.getZIndex(),\n };\n\n if (newStyle.zIndex) {\n clone.set('zIndex', newStyle.zIndex);\n }\n\n // If we see spaces at the beginning or at the end we add a empty\n // white space at the beginning and at the end.\n if (newStyle.text && /^\\s|\\s$/g.test(newStyle.text.getText())) {\n newStyle.text.setText(`\\u200B${newStyle.text.getText()}\\u200B`);\n }\n\n // Set custom properties to be converted in extendedData in KML.\n if (newStyle.text && newStyle.text.getRotation()) {\n clone.set('textRotation', newStyle.text.getRotation());\n }\n\n if (newStyle.text && newStyle.text.getFont()) {\n clone.set('textFont', newStyle.text.getFont());\n }\n\n if (newStyle.text && newStyle.text.getTextAlign()) {\n clone.set('textAlign', newStyle.text.getTextAlign());\n }\n\n if (newStyle.text && newStyle.text.getOffsetX()) {\n clone.set('textOffsetX', newStyle.text.getOffsetX());\n }\n\n if (newStyle.text && newStyle.text.getOffsetY()) {\n clone.set('textOffsetY', newStyle.text.getOffsetY());\n }\n\n if (newStyle.text && newStyle.text.getStroke()) {\n if (newStyle.text.getStroke().getColor()) {\n clone.set(\n 'textStrokeColor',\n asString(newStyle.text.getStroke().getColor()),\n );\n }\n\n if (newStyle.text.getStroke().getWidth()) {\n clone.set('textStrokeWidth', newStyle.text.getStroke().getWidth());\n }\n }\n\n if (newStyle.text && newStyle.text.getBackgroundFill()) {\n clone.set(\n 'textBackgroundFillColor',\n asString(newStyle.text.getBackgroundFill().getColor()),\n );\n }\n\n if (newStyle.text && newStyle.text.getPadding()) {\n clone.set('textPadding', newStyle.text.getPadding().join());\n }\n\n if (newStyle.stroke && newStyle.stroke.getLineDash()) {\n clone.set('lineDash', newStyle.stroke.getLineDash().join(','));\n }\n\n if (newStyle.image instanceof Circle) {\n newStyle.image = null;\n }\n\n if (newStyle.image) {\n const imgSource = newStyle.image.getSrc();\n if (!/(http(s?)):\\/\\//gi.test(imgSource)) {\n // eslint-disable-next-line no-console\n console.log(\n 'Local image source not supported for KML export.' +\n 'Should use remote web server',\n );\n }\n\n if (newStyle.image.getRotation()) {\n // We set the icon rotation as extended data\n clone.set('iconRotation', newStyle.image.getRotation());\n }\n\n // Set map resolution to use for icon-to-map proportional scaling\n if (feature.get('pictureOptions')) {\n clone.set(\n 'pictureOptions',\n JSON.stringify(feature.get('pictureOptions')),\n );\n }\n }\n\n // In case a fill pattern should be applied (use fillPattern attribute to store pattern id, color etc)\n if (feature.get('fillPattern')) {\n clone.set('fillPattern', JSON.stringify(feature.get('fillPattern')));\n newStyle.fill = null;\n }\n\n // maxZoom: maximum zoom level at which the feature is displayed\n if (feature.get('maxZoom')) {\n clone.set('maxZoom', parseFloat(feature.get('maxZoom'), 10));\n }\n\n // minZoom: minimum zoom level at which the feature is displayed\n if (feature.get('minZoom')) {\n clone.set('minZoom', parseFloat(feature.get('minZoom'), 10));\n }\n\n // If only text is displayed we must specify an\n // image style with scale=0\n if (newStyle.text && !newStyle.image) {\n newStyle.image = new Icon({\n src: 'noimage',\n scale: 0,\n });\n }\n\n // In case we use line's icon .\n const extraLineStyles = (Array.isArray(styles) && styles.slice(1)) || [];\n extraLineStyles.forEach((extraLineStyle) => {\n if (\n extraLineStyle &&\n extraLineStyle.getImage() instanceof Icon &&\n extraLineStyle.getGeometry()\n ) {\n const coord = extraLineStyle.getGeometry()(feature).getCoordinates();\n const startCoord = feature.getGeometry().getFirstCoordinate();\n if (coord[0] === startCoord[0] && coord[1] === startCoord[1]) {\n clone.set(\n 'lineStartIcon',\n JSON.stringify({\n url: extraLineStyle.getImage().getSrc(),\n scale: extraLineStyle.getImage().getScale(),\n size: extraLineStyle.getImage().getSize(),\n zIndex: extraLineStyle.getZIndex(),\n }),\n );\n } else {\n clone.set(\n 'lineEndIcon',\n JSON.stringify({\n url: extraLineStyle.getImage().getSrc(),\n scale: extraLineStyle.getImage().getScale(),\n size: extraLineStyle.getImage().getSize(),\n zIndex: extraLineStyle.getZIndex(),\n }),\n );\n }\n }\n });\n\n const olStyle = new Style(newStyle);\n clone.setStyle(olStyle);\n\n if (\n !(\n clone.getGeometry() instanceof Point &&\n olStyle.getText() &&\n !olStyle.getText().getText()\n )\n ) {\n exportFeatures.push(clone);\n }\n });\n\n if (exportFeatures.length > 0) {\n if (exportFeatures.length === 1) {\n // force the add of a <Document> node\n exportFeatures.push(new Feature());\n }\n\n featString = new KML({\n extractStyles: true,\n defaultStyle: [kmlStyle],\n }).writeFeatures(exportFeatures);\n\n // Remove no image hack\n featString = featString.replace(\n /<Icon>\\s*<href>noimage<\\/href>\\s*<\\/Icon>/g,\n '',\n );\n\n // Remove empty placemark added to have\n // <Document> tag\n featString = featString.replace(/<Placemark\\/>/g, '');\n\n // Add KML document name\n if (layer.name) {\n featString = featString.replace(\n /<Document>/,\n `<Document><name>${layer.name}</name>`,\n );\n }\n }\n\n return featString;\n};\n\nexport default { readFeatures, writeFeatures };\n"],"names":["const","let"],"mappings":"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"}
1
+ {"version":3,"file":"KML.js","sources":["../../src/utils/KML.js"],"sourcesContent":["import KML from 'ol/format/KML';\nimport { Feature } from 'ol';\nimport Point from 'ol/geom/Point';\nimport MultiPoint from 'ol/geom/MultiPoint';\nimport GeometryCollection from 'ol/geom/GeometryCollection';\nimport { Style, Text, Icon, Circle, Fill, Stroke } from 'ol/style';\nimport { asString } from 'ol/color';\nimport { parse } from 'ol/xml';\nimport { kmlStyle } from './Styles';\nimport getPolygonPattern from './getPolygonPattern';\n\nconst applyTextStyleForIcon = (olIcon, olText) => {\n const size = olIcon.getSize() || [48, 48];\n const scale = olIcon.getScale() || 1;\n const anchor = olIcon.getAnchor() || [\n (size[0] * scale) / 2,\n (size[1] * scale) / 2,\n ];\n const offset = [\n scale * (size[0] - anchor[0]) + 5,\n scale * (size[1] / 2 - anchor[1]),\n ];\n olText.setOffsetX(offset[0]);\n olText.setOffsetY(offset[1]);\n olText.setTextAlign('left');\n};\n\nconst getVertexCoord = (geom, start = true, index = 0) => {\n const coords = geom.getCoordinates();\n const len = coords.length - 1;\n return start ? coords[index] : coords[len - index];\n};\n\nconst getLineIcon = (feature, icon, color, start = true) => {\n const geom = feature.getGeometry();\n const coordA = getVertexCoord(geom, start, 1);\n const coordB = getVertexCoord(geom, start);\n const dx = start ? coordA[0] - coordB[0] : coordB[0] - coordA[0];\n const dy = start ? coordA[1] - coordB[1] : coordB[1] - coordA[1];\n const rotation = Math.atan2(dy, dx);\n\n return new Style({\n geometry: (feat) => {\n const ge = feat.getGeometry();\n return new Point(getVertexCoord(ge, start));\n },\n image: new Icon({\n src: icon.url,\n color,\n rotation: -rotation,\n rotateWithView: true,\n scale: icon.scale,\n imgSize: icon.size, // ie 11\n }),\n zIndex: icon.zIndex,\n });\n};\n\n// Clean the unneeded feature's style and properties created by the KML parser.\nconst sanitizeFeature = (feature) => {\n const geom = feature.getGeometry();\n let styles = feature.getStyleFunction();\n\n // Store maxZoom in properties\n if (feature.get('maxZoom')) {\n feature.set('maxZoom', parseFloat(feature.get('maxZoom'), 10));\n }\n\n // Store minZoom in properties\n if (feature.get('minZoom')) {\n feature.set('minZoom', parseFloat(feature.get('minZoom'), 10));\n }\n\n // The use of clone is part of the scale fix line 156\n const tmpStyles = styles(feature);\n const style = (Array.isArray(tmpStyles) ? tmpStyles[0] : tmpStyles).clone();\n\n let stroke = style.getStroke();\n if (stroke && feature.get('lineDash')) {\n stroke.setLineDash(\n feature\n .get('lineDash')\n .split(',')\n .map((l) => {\n return parseInt(l, 10);\n }),\n );\n }\n\n // The canvas draws a stroke width=1 by default if width=0, so we\n // remove the stroke style in that case.\n if (stroke && stroke.getWidth() === 0) {\n stroke = undefined;\n }\n\n if (feature.get('zIndex')) {\n style.setZIndex(parseInt(feature.get('zIndex'), 10));\n }\n\n // if the feature is a Point and we are offline, we use default vector\n // style.\n // if the feature is a Point and has a name with a text style, we\n // create a correct text style.\n // TODO Handle GeometryCollection displaying name on the first Point\n // geometry.\n if (style && (geom instanceof Point || geom instanceof MultiPoint)) {\n let image = style.getImage();\n let text = null;\n let fill = style.getFill();\n\n // If the feature has name we display it on the map as Google does\n if (\n feature.get('name') &&\n style.getText() &&\n style.getText().getScale() !== 0\n ) {\n if (image && image.getScale() === 0) {\n // transparentCircle is used to allow selection\n image = new Circle({\n radius: 1,\n fill: new Fill({ color: [0, 0, 0, 0] }),\n stroke: new Stroke({ color: [0, 0, 0, 0] }),\n });\n }\n\n // We replace empty white spaces used to keep normal spaces before and after the name.\n let name = feature.get('name');\n if (/\\u200B/g.test(name)) {\n name = name.replace(/\\u200B/g, '');\n feature.set('name', name);\n }\n\n text = new Text({\n font: feature.get('textFont') || 'normal 16px Helvetica',\n text: feature.get('name'),\n fill: style.getText().getFill(),\n // rotation unsupported by KML, taken instead from custom field.\n rotation: feature.get('textRotation') || 0,\n // since ol 6.3.1 : https://github.com/openlayers/openlayers/pull/10613/files#diff-1883da8b57e690db7ea0c35ce53c880aR925\n // a default textstroke is added to mimic google earth.\n // it was not the case before, the stroke was always null. So to keep\n // the same behavior we don't copy the stroke style.\n // TODO : maybe we should use this functionnality in the futur.\n // stroke: style.getText().getStroke(),\n scale: style.getText().getScale(),\n });\n\n if (feature.get('textStrokeColor') && feature.get('textStrokeWidth')) {\n text.setStroke(\n new Stroke({\n color: feature.get('textStrokeColor'),\n width: parseFloat(feature.get('textStrokeWidth')),\n }),\n );\n }\n\n if (feature.get('textAlign')) {\n text.setTextAlign(feature.get('textAlign'));\n }\n\n if (feature.get('textOffsetX')) {\n text.setOffsetX(parseFloat(feature.get('textOffsetX')));\n }\n\n if (feature.get('textOffsetY')) {\n text.setOffsetY(parseFloat(feature.get('textOffsetY')));\n }\n\n if (feature.get('textBackgroundFillColor')) {\n text.setBackgroundFill(\n new Fill({\n color: feature.get('textBackgroundFillColor'),\n }),\n );\n }\n\n if (feature.get('textPadding')) {\n text.setPadding(\n feature\n .get('textPadding')\n .split(',')\n .map((n) => {\n return parseFloat(n);\n }),\n );\n }\n\n if (image instanceof Icon) {\n applyTextStyleForIcon(image, text);\n }\n }\n\n if (image instanceof Icon) {\n /* Apply icon rotation if defined (by default only written as\n * <heading> tag, which is not read as rotation value by the ol KML module)\n */\n image.setRotation(parseFloat(feature.get('iconRotation')) || 0);\n }\n\n fill = undefined;\n stroke = undefined;\n\n styles = (feat, resolution) => {\n /* Options to be used for picture scaling with map, should have at least\n * a resolution attribute (this is the map resolution at the zoom level when\n * the picture is created), can take an optional constant for further scale\n * adjustment.\n * e.g. { resolution: 0.123, defaultScale: 1 / 6 }\n */\n\n if (feat.get('pictureOptions')) {\n let pictureOptions = feat.get('pictureOptions');\n if (typeof pictureOptions === 'string') {\n pictureOptions = JSON.parse(pictureOptions);\n }\n feat.set('pictureOptions', pictureOptions);\n if (pictureOptions.resolution) {\n image.setScale(\n (pictureOptions.resolution / resolution) *\n pictureOptions.defaultScale || 1,\n );\n }\n }\n\n return new Style({\n fill,\n stroke,\n image,\n text,\n zIndex: style.getZIndex(),\n });\n };\n }\n\n // Remove image and text styles for polygons and lines\n if (\n !(\n geom instanceof Point ||\n geom instanceof MultiPoint ||\n geom instanceof GeometryCollection\n )\n ) {\n styles = [\n new Style({\n fill: style.getFill(),\n stroke,\n image: null,\n text: null,\n zIndex: style.getZIndex(),\n }),\n ];\n\n // Parse the fillPattern json string and store parsed object\n let fillPattern = feature.get('fillPattern');\n if (fillPattern) {\n fillPattern = JSON.parse(fillPattern);\n feature.set('fillPattern', fillPattern);\n\n /* We set the fill pattern for polygons */\n if (!style.getFill()) {\n styles[0].setFill(new Fill());\n }\n const patternOrColor = fillPattern.empty\n ? [0, 0, 0, 0]\n : getPolygonPattern(fillPattern.id, fillPattern.color);\n styles[0].getFill().setColor(patternOrColor);\n }\n\n // Add line's icons styles\n if (feature.get('lineStartIcon')) {\n styles.push(\n getLineIcon(\n feature,\n JSON.parse(feature.get('lineStartIcon')),\n stroke.getColor(),\n ),\n );\n }\n\n if (feature.get('lineEndIcon')) {\n styles.push(\n getLineIcon(\n feature,\n JSON.parse(feature.get('lineEndIcon')),\n stroke.getColor(),\n false,\n ),\n );\n }\n }\n feature.setStyle(styles);\n};\n\n/**\n * Read a KML string.\n * @param {String} kmlString A string representing a KML file.\n * @param {<ol.Projection|String>} featureProjection The projection used by the map.\n */\nconst readFeatures = (kmlString, featureProjection) => {\n const features = new KML().readFeatures(kmlString, {\n featureProjection,\n });\n features.forEach((feature) => {\n sanitizeFeature(feature);\n });\n return features;\n};\n\n/**\n * Create a KML string.\n * @param {VectorLayer} layer A react-spatial VectorLayer.\n * @param {<ol.Projection|String>} featureProjection The current projection used by the features.\n */\nconst writeFeatures = (layer, featureProjection, mapResolution) => {\n let featString;\n const { olLayer } = layer;\n const exportFeatures = [];\n\n olLayer.getSource().forEachFeature((feature) => {\n // We silently ignore Circle elements as they are\n // not supported in kml.\n if (feature.getGeometry().getType() === 'Circle') {\n return;\n }\n\n const clone = feature.clone();\n clone.setId(feature.getId());\n clone.getGeometry().setProperties(feature.getGeometry().getProperties());\n clone.getGeometry().transform(featureProjection, 'EPSG:4326');\n\n // We remove all ExtendedData not related to style.\n Object.keys(feature.getProperties()).forEach((key) => {\n if (!/^(geometry|name|description)$/.test(key)) {\n clone.unset(key, true);\n }\n });\n\n let styles;\n\n if (feature.getStyleFunction()) {\n styles = feature.getStyleFunction()(feature, mapResolution);\n } else if (olLayer && olLayer.getStyleFunction()) {\n styles = olLayer.getStyleFunction()(feature, mapResolution);\n }\n\n const mainStyle = styles[0] || styles;\n\n const newStyle = {\n fill: mainStyle.getFill(),\n stroke: mainStyle.getStroke(),\n text: mainStyle.getText(),\n image: mainStyle.getImage(),\n zIndex: mainStyle.getZIndex(),\n };\n\n if (newStyle.zIndex) {\n clone.set('zIndex', newStyle.zIndex);\n }\n\n // If we see spaces at the beginning or at the end we add a empty\n // white space at the beginning and at the end.\n if (newStyle.text && /^\\s|\\s$/g.test(newStyle.text.getText())) {\n newStyle.text.setText(`\\u200B${newStyle.text.getText()}\\u200B`);\n }\n\n // Set custom properties to be converted in extendedData in KML.\n if (newStyle.text && newStyle.text.getRotation()) {\n clone.set('textRotation', newStyle.text.getRotation());\n }\n\n if (newStyle.text && newStyle.text.getFont()) {\n clone.set('textFont', newStyle.text.getFont());\n }\n\n if (newStyle.text && newStyle.text.getTextAlign()) {\n clone.set('textAlign', newStyle.text.getTextAlign());\n }\n\n if (newStyle.text && newStyle.text.getOffsetX()) {\n clone.set('textOffsetX', newStyle.text.getOffsetX());\n }\n\n if (newStyle.text && newStyle.text.getOffsetY()) {\n clone.set('textOffsetY', newStyle.text.getOffsetY());\n }\n\n if (newStyle.text && newStyle.text.getStroke()) {\n if (newStyle.text.getStroke().getColor()) {\n clone.set(\n 'textStrokeColor',\n asString(newStyle.text.getStroke().getColor()),\n );\n }\n\n if (newStyle.text.getStroke().getWidth()) {\n clone.set('textStrokeWidth', newStyle.text.getStroke().getWidth());\n }\n }\n\n if (newStyle.text && newStyle.text.getBackgroundFill()) {\n clone.set(\n 'textBackgroundFillColor',\n asString(newStyle.text.getBackgroundFill().getColor()),\n );\n }\n\n if (newStyle.text && newStyle.text.getPadding()) {\n clone.set('textPadding', newStyle.text.getPadding().join());\n }\n\n if (newStyle.stroke && newStyle.stroke.getLineDash()) {\n clone.set('lineDash', newStyle.stroke.getLineDash().join(','));\n }\n\n if (newStyle.image instanceof Circle) {\n newStyle.image = null;\n }\n\n if (newStyle.image) {\n const imgSource = newStyle.image.getSrc();\n if (!/(http(s?)):\\/\\//gi.test(imgSource)) {\n // eslint-disable-next-line no-console\n console.log(\n 'Local image source not supported for KML export.' +\n 'Should use remote web server',\n );\n }\n\n if (newStyle.image.getRotation()) {\n // We set the icon rotation as extended data\n clone.set('iconRotation', newStyle.image.getRotation());\n }\n\n // Set map resolution to use for icon-to-map proportional scaling\n if (feature.get('pictureOptions')) {\n clone.set(\n 'pictureOptions',\n JSON.stringify(feature.get('pictureOptions')),\n );\n }\n }\n\n // In case a fill pattern should be applied (use fillPattern attribute to store pattern id, color etc)\n if (feature.get('fillPattern')) {\n clone.set('fillPattern', JSON.stringify(feature.get('fillPattern')));\n newStyle.fill = null;\n }\n\n // maxZoom: maximum zoom level at which the feature is displayed\n if (feature.get('maxZoom')) {\n clone.set('maxZoom', parseFloat(feature.get('maxZoom'), 10));\n }\n\n // minZoom: minimum zoom level at which the feature is displayed\n if (feature.get('minZoom')) {\n clone.set('minZoom', parseFloat(feature.get('minZoom'), 10));\n }\n\n // If only text is displayed we must specify an\n // image style with scale=0\n if (newStyle.text && !newStyle.image) {\n newStyle.image = new Icon({\n src: 'noimage',\n scale: 0,\n });\n }\n\n // In case we use line's icon .\n const extraLineStyles = (Array.isArray(styles) && styles.slice(1)) || [];\n extraLineStyles.forEach((extraLineStyle) => {\n if (\n extraLineStyle &&\n extraLineStyle.getImage() instanceof Icon &&\n extraLineStyle.getGeometry()\n ) {\n const coord = extraLineStyle.getGeometry()(feature).getCoordinates();\n const startCoord = feature.getGeometry().getFirstCoordinate();\n if (coord[0] === startCoord[0] && coord[1] === startCoord[1]) {\n clone.set(\n 'lineStartIcon',\n JSON.stringify({\n url: extraLineStyle.getImage().getSrc(),\n scale: extraLineStyle.getImage().getScale(),\n size: extraLineStyle.getImage().getSize(),\n zIndex: extraLineStyle.getZIndex(),\n }),\n );\n } else {\n clone.set(\n 'lineEndIcon',\n JSON.stringify({\n url: extraLineStyle.getImage().getSrc(),\n scale: extraLineStyle.getImage().getScale(),\n size: extraLineStyle.getImage().getSize(),\n zIndex: extraLineStyle.getZIndex(),\n }),\n );\n }\n }\n });\n\n const olStyle = new Style(newStyle);\n clone.setStyle(olStyle);\n\n if (\n !(\n clone.getGeometry() instanceof Point &&\n olStyle.getText() &&\n !olStyle.getText().getText()\n )\n ) {\n exportFeatures.push(clone);\n }\n });\n\n if (exportFeatures.length > 0) {\n if (exportFeatures.length === 1) {\n // force the add of a <Document> node\n exportFeatures.push(new Feature());\n }\n\n featString = new KML({\n extractStyles: true,\n defaultStyle: [kmlStyle],\n }).writeFeatures(exportFeatures);\n\n // Remove no image hack\n featString = featString.replace(\n /<Icon>\\s*<href>noimage<\\/href>\\s*<\\/Icon>/g,\n '',\n );\n\n // Remove empty placemark added to have\n // <Document> tag\n featString = featString.replace(/<Placemark\\/>/g, '');\n\n // Add KML document name\n if (layer.name) {\n featString = featString.replace(\n /<Document>/,\n `<Document><name>${layer.name}</name>`,\n );\n }\n }\n\n return featString;\n};\n\n/**\n * Removes the <Camera> tag from a KML string. Returns the KML string with removed <Camera> tag.\n * @param {String} kmlString A string representing a KML file.\n */\nconst removeDocumentCamera = (kmlString) => {\n const kmlDoc = parse(kmlString);\n // Remove old Camera node\n const oldCameraNode = kmlDoc.getElementsByTagName('Camera')[0];\n if (oldCameraNode) {\n oldCameraNode.remove();\n }\n return new XMLSerializer().serializeToString(kmlDoc);\n};\n\n/**\n * Write the <Camera> tag into a KML string. Returns the KML string with added <Camera> tag.\n * @param {String} kmlString A string representing a KML file.\n * @param {Object} cameraAttributes Object containing the camera tags (longitude, latitude, altitude, heading, tilt, altitudeMode, roll)\n * as keys with corresponding values. See https://developers.google.com/kml/documentation/kmlreference#camera\n */\nconst writeDocumentCamera = (kmlString, cameraAttributes) => {\n const kmlDoc = parse(removeDocumentCamera(kmlString));\n\n if (cameraAttributes) {\n // Create Camera node with child attributes if the cameraAttributes object is defined\n const cameraNode = kmlDoc.createElement('Camera');\n Object.keys(cameraAttributes).forEach((key) => {\n const cameraAttribute = kmlDoc.createElement(\n `${key.charAt(0).toUpperCase() + key.slice(1)}`,\n );\n cameraAttribute.innerHTML = cameraAttributes[key];\n cameraNode.appendChild(cameraAttribute);\n });\n const documentNode = kmlDoc.getElementsByTagName('Document')[0];\n documentNode.appendChild(cameraNode);\n }\n\n return new XMLSerializer().serializeToString(kmlDoc);\n};\n\nexport default {\n readFeatures,\n writeFeatures,\n writeDocumentCamera,\n removeDocumentCamera,\n};\n"],"names":["const","let"],"mappings":"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"}
package/utils/KML.test.js CHANGED
@@ -140,6 +140,27 @@ describe('KML', function () {
140
140
  expectWriteResult(feats, str);
141
141
  });
142
142
  });
143
+
144
+ describe('writeDocumentCamera()', function () {
145
+ var str = "\n <kml " + xmlns + ">\n <Document>\n <name>\n CamTest\n </name>\n </Document>\n </kml>";
146
+
147
+ var strWithCam = "<kml " + xmlns + ">\n <Document>\n <name>\n CamTest\n </name>\n <Camera xmlns=\"\">\n <Heading>\n 270\n </Heading>\n <Altitude>\n 300\n </Altitude>\n <Longitude>\n 5.8\n </Longitude>\n <Latitude>\n 41.6\n </Latitude>\n </Camera>\n </Document>\n </kml>";
148
+
149
+ test('should insert the correct <Camera> tag.', function () {
150
+ var kmlWithKamera = KML.writeDocumentCamera(str, {
151
+ heading: 270,
152
+ altitude: 300,
153
+ longitude: 5.8,
154
+ latitude: 41.6,
155
+ });
156
+ expect(beautify(kmlWithKamera)).toEqual(beautify(strWithCam));
157
+ });
158
+
159
+ test('should remove the present <Camera> tag when called without cameraAttributes.', function () {
160
+ var kmlWithoutKamera = KML.writeDocumentCamera(strWithCam);
161
+ expect(beautify(kmlWithoutKamera)).toEqual(beautify(str));
162
+ });
163
+ });
143
164
  });
144
165
 
145
166
  //# sourceMappingURL=KML.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KML.test.js","sources":["../../src/utils/KML.test.js"],"sourcesContent":["import { configure } from 'enzyme';\nimport VectorLayer from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\nimport { Style } from 'ol/style';\nimport { get } from 'ol/proj';\nimport Adapter from 'enzyme-adapter-react-16';\nimport beautify from 'xml-beautifier';\nimport KML from './KML';\n\nconfigure({ adapter: new Adapter() });\nconst xmlns =\n 'xmlns=\"http://www.opengis.net/kml/2.2\" xmlns:gx=\"http://www.google.com/kml/ext/2.2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd\"';\n\nconst expectWriteResult = (feats, str) => {\n expect(\n beautify(\n KML.writeFeatures(\n {\n name: 'lala',\n olLayer: new VectorLayer({\n source: new VectorSource({\n features: feats,\n }),\n }),\n },\n get('EPSG:4326'),\n ),\n ),\n ).toEqual(beautify(str));\n};\n\ndescribe('KML', () => {\n describe('readFeatures() and writeFeatures()', () => {\n test('should read/write LineStyle and ExtendedData (linesDash, lineStartIcon and lineEndIcon).', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Placemark>\n <Style>\n <LineStyle>\n <color>ff056600</color>\n <width>1</width>\n </LineStyle>\n </Style>\n <ExtendedData>\n <Data name=\"lineDash\"><value>40,40</value></Data>\n <Data name=\"lineEndIcon\"><value>{\"url\":\"fooarrowend.png\",\"scale\":0.35,\"size\":[36,58],\"zIndex\":1}</value></Data>\n <Data name=\"lineStartIcon\"><value>{\"url\":\"fooarrowstart.png\",\"scale\":0.35,\"size\":[36,58],\"zIndex\":1}</value></Data>\n </ExtendedData>\n <LineString><coordinates>0,1,0 3,5,0 40,25,0</coordinates></LineString>\n </Placemark>\n </Document>\n </kml>\n `;\n const feats = KML.readFeatures(str);\n const styles = feats[0].getStyle();\n expect(feats.length).toBe(1);\n expect(styles.length).toBe(3);\n\n // line stroke\n const strokeStyle = styles[0].getStroke();\n expect(strokeStyle.getColor()).toEqual([0, 102, 5, 1]);\n expect(strokeStyle.getLineDash()).toEqual([40, 40]);\n\n // line start icon\n const lineStartStyle = styles[1];\n expect(lineStartStyle.getImage().getRotation()).toEqual(\n -0.9272952180016122,\n );\n expect(lineStartStyle.getImage().getColor()).toEqual([0, 102, 5, 1]);\n expect(lineStartStyle.getImage().getRotateWithView()).toBe(true);\n expect(lineStartStyle.getGeometry()(feats[0]).getCoordinates()).toEqual([\n 0, 1, 0,\n ]);\n expect(lineStartStyle.getZIndex()).toEqual(1);\n\n // line end icon\n const lineEndStyle = styles[2];\n expect(lineEndStyle.getImage().getRotation()).toEqual(\n -0.49555167348582857,\n );\n expect(lineEndStyle.getImage().getRotateWithView()).toBe(true);\n expect(lineEndStyle.getImage().getColor()).toEqual([0, 102, 5, 1]);\n expect(lineEndStyle.getGeometry()(feats[0]).getCoordinates()).toEqual([\n 40, 25, 0,\n ]);\n expect(lineEndStyle.getZIndex()).toEqual(1);\n\n expectWriteResult(feats, str);\n });\n\n test('should read/write TextStyle and ExtendedData.', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Placemark>\n <name> bar </name>\n <Style>\n <IconStyle>\n <scale>0</scale>\n </IconStyle>\n <LabelStyle>\n <color>ff7e3420</color>\n <scale>2</scale>\n </LabelStyle>\n </Style>\n <ExtendedData>\n <Data name=\"textAlign\">\n <value>right</value>\n </Data>\n <Data name=\"textBackgroundFillColor\">\n <value>rgba(255,255,255,0.01)</value>\n </Data>\n <Data name=\"textFont\">\n <value>bold 16px arial</value>\n </Data>\n <Data name=\"textOffsetX\">\n <value>-90</value>\n </Data>\n <Data name=\"textOffsetY\">\n <value>30</value>\n </Data>\n <Data name=\"textPadding\">\n <value>5,6,7,8</value>\n </Data>\n <Data name=\"textRotation\">\n <value>2.303834612632515</value>\n </Data>\n <Data name=\"textStrokeColor\">\n <value>rgba(100,255,255,0.2)</value>\n </Data>\n <Data name=\"textStrokeWidth\">\n <value>3</value>\n </Data>\n </ExtendedData>\n <Point>\n <coordinates>0,0,0</coordinates>\n </Point>\n </Placemark>\n </Document>\n </kml>\n `;\n const feats = KML.readFeatures(str);\n const style = feats[0].getStyleFunction()(feats[0], 1);\n expect(feats.length).toBe(1);\n expect(style instanceof Style).toBe(true);\n\n // Text\n const styleText = style.getText();\n expect(styleText.getText()).toBe('bar'); // spaces are trimmed.\n expect(styleText.getFont()).toEqual('bold 16px arial');\n expect(styleText.getFill()).toEqual({ color_: [32, 52, 126, 1] });\n expect(styleText.getStroke()).toEqual({\n color_: 'rgba(100,255,255,0.2)',\n width_: 3,\n lineCap_: undefined,\n lineDashOffset_: undefined,\n lineDash_: null,\n lineJoin_: undefined,\n miterLimit_: undefined,\n });\n expect(styleText.getScale()).toEqual(2);\n expect(styleText.getRotation()).toEqual('2.303834612632515');\n expect(styleText.getPadding()).toEqual([5, 6, 7, 8]);\n expect(styleText.getBackgroundFill()).toEqual({\n color_: 'rgba(255,255,255,0.01)',\n });\n expect(styleText.getTextAlign()).toEqual('right');\n expect(styleText.getOffsetX()).toEqual(-90);\n expect(styleText.getOffsetY()).toEqual(30);\n expectWriteResult(feats, str);\n });\n\n test('should read and write lineDash and fillPattern style for polygon', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Placemark>\n <description></description>\n <Style>\n <LineStyle>\n <color>ff0000eb</color>\n <width>2</width>\n </LineStyle>\n <PolyStyle>\n <fill>0</fill>\n </PolyStyle>\n </Style>\n <ExtendedData>\n <Data name=\"fillPattern\">\n <value>{\"id\":3,\"color\":[235,0,0,1]}</value>\n </Data>\n <Data name=\"lineDash\">\n <value>1,1</value>\n </Data>\n </ExtendedData>\n <Polygon>\n <outerBoundaryIs>\n <LinearRing>\n <coordinates>8.521,47.381,0 8.529,47.375,0 8.531,47.382,0 8.521,47.381,0</coordinates>\n </LinearRing>\n </outerBoundaryIs>\n </Polygon>\n </Placemark>\n </Document>\n </kml>\n `;\n const feats = KML.readFeatures(str);\n const styles = feats[0].getStyle();\n expect(feats.length).toBe(1);\n expect(styles.length).toBe(1);\n\n // Polygon\n const feature = feats[0];\n const outlineStyle = styles[0].getStroke();\n expect(outlineStyle.getColor()).toEqual([235, 0, 0, 1]);\n expect(outlineStyle.getWidth()).toEqual(2);\n const fillStyle = styles[0].getFill();\n expect(feature.get('fillPattern')).toEqual({\n id: 3,\n color: [235, 0, 0, 1],\n });\n const color = fillStyle.getColor();\n expect(color.canvas).toMatchSnapshot();\n expect(color.id).toBe(3);\n expect(color.color).toEqual([235, 0, 0, 1]);\n expectWriteResult(feats, str);\n });\n\n test('should add zIndex and rotation to icon style and pictureOptions to feature properties.', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Placemark>\n <description></description>\n <Style>\n <IconStyle>\n <heading>\n 1.5707963267948966\n </heading>\n <Icon>\n <href>https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>\n <gx:w>64</gx:w>\n <gx:h>64</gx:h>\n </Icon>\n <hotSpot x=\"20\" y=\"2\" xunits=\"pixels\" yunits=\"pixels\"/>\n </IconStyle>\n </Style>\n <ExtendedData>\n <Data name=\"iconRotation\">\n <value>1.5707963267948966</value>\n </Data>\n <Data name=\"maxZoom\">\n <value>18.5</value>\n </Data>\n <Data name=\"minZoom\">\n <value>15</value>\n </Data>\n <Data name=\"pictureOptions\">\n <value>{\"resolution\":4,\"defaultScale\":0.5}</value>\n </Data>\n <Data name=\"zIndex\">\n <value>1</value>\n </Data>\n </ExtendedData>\n <Point>\n <coordinates>0,0,0</coordinates>\n </Point>\n </Placemark>\n </Document>\n </kml>\n `;\n const feats = KML.readFeatures(str);\n const style = feats[0].getStyleFunction()(feats[0], 1);\n expect(style.getZIndex()).toBe(1);\n expect(style.getImage().getRotation()).toBe(1.5707963267948966);\n expect(feats[0].get('pictureOptions')).toEqual({\n resolution: 4,\n defaultScale: 0.5,\n });\n expect(feats[0].get('maxZoom')).toEqual(18.5);\n expect(feats[0].get('minZoom')).toEqual(15);\n expectWriteResult(feats, str);\n });\n });\n});\n"],"names":["const"],"mappings":"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"}
1
+ {"version":3,"file":"KML.test.js","sources":["../../src/utils/KML.test.js"],"sourcesContent":["import { configure } from 'enzyme';\nimport VectorLayer from 'ol/layer/Vector';\nimport VectorSource from 'ol/source/Vector';\nimport { Style } from 'ol/style';\nimport { get } from 'ol/proj';\nimport Adapter from 'enzyme-adapter-react-16';\nimport beautify from 'xml-beautifier';\nimport KML from './KML';\n\nconfigure({ adapter: new Adapter() });\nconst xmlns =\n 'xmlns=\"http://www.opengis.net/kml/2.2\" xmlns:gx=\"http://www.google.com/kml/ext/2.2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd\"';\n\nconst expectWriteResult = (feats, str) => {\n expect(\n beautify(\n KML.writeFeatures(\n {\n name: 'lala',\n olLayer: new VectorLayer({\n source: new VectorSource({\n features: feats,\n }),\n }),\n },\n get('EPSG:4326'),\n ),\n ),\n ).toEqual(beautify(str));\n};\n\ndescribe('KML', () => {\n describe('readFeatures() and writeFeatures()', () => {\n test('should read/write LineStyle and ExtendedData (linesDash, lineStartIcon and lineEndIcon).', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Placemark>\n <Style>\n <LineStyle>\n <color>ff056600</color>\n <width>1</width>\n </LineStyle>\n </Style>\n <ExtendedData>\n <Data name=\"lineDash\"><value>40,40</value></Data>\n <Data name=\"lineEndIcon\"><value>{\"url\":\"fooarrowend.png\",\"scale\":0.35,\"size\":[36,58],\"zIndex\":1}</value></Data>\n <Data name=\"lineStartIcon\"><value>{\"url\":\"fooarrowstart.png\",\"scale\":0.35,\"size\":[36,58],\"zIndex\":1}</value></Data>\n </ExtendedData>\n <LineString><coordinates>0,1,0 3,5,0 40,25,0</coordinates></LineString>\n </Placemark>\n </Document>\n </kml>\n `;\n const feats = KML.readFeatures(str);\n const styles = feats[0].getStyle();\n expect(feats.length).toBe(1);\n expect(styles.length).toBe(3);\n\n // line stroke\n const strokeStyle = styles[0].getStroke();\n expect(strokeStyle.getColor()).toEqual([0, 102, 5, 1]);\n expect(strokeStyle.getLineDash()).toEqual([40, 40]);\n\n // line start icon\n const lineStartStyle = styles[1];\n expect(lineStartStyle.getImage().getRotation()).toEqual(\n -0.9272952180016122,\n );\n expect(lineStartStyle.getImage().getColor()).toEqual([0, 102, 5, 1]);\n expect(lineStartStyle.getImage().getRotateWithView()).toBe(true);\n expect(lineStartStyle.getGeometry()(feats[0]).getCoordinates()).toEqual([\n 0, 1, 0,\n ]);\n expect(lineStartStyle.getZIndex()).toEqual(1);\n\n // line end icon\n const lineEndStyle = styles[2];\n expect(lineEndStyle.getImage().getRotation()).toEqual(\n -0.49555167348582857,\n );\n expect(lineEndStyle.getImage().getRotateWithView()).toBe(true);\n expect(lineEndStyle.getImage().getColor()).toEqual([0, 102, 5, 1]);\n expect(lineEndStyle.getGeometry()(feats[0]).getCoordinates()).toEqual([\n 40, 25, 0,\n ]);\n expect(lineEndStyle.getZIndex()).toEqual(1);\n\n expectWriteResult(feats, str);\n });\n\n test('should read/write TextStyle and ExtendedData.', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Placemark>\n <name> bar </name>\n <Style>\n <IconStyle>\n <scale>0</scale>\n </IconStyle>\n <LabelStyle>\n <color>ff7e3420</color>\n <scale>2</scale>\n </LabelStyle>\n </Style>\n <ExtendedData>\n <Data name=\"textAlign\">\n <value>right</value>\n </Data>\n <Data name=\"textBackgroundFillColor\">\n <value>rgba(255,255,255,0.01)</value>\n </Data>\n <Data name=\"textFont\">\n <value>bold 16px arial</value>\n </Data>\n <Data name=\"textOffsetX\">\n <value>-90</value>\n </Data>\n <Data name=\"textOffsetY\">\n <value>30</value>\n </Data>\n <Data name=\"textPadding\">\n <value>5,6,7,8</value>\n </Data>\n <Data name=\"textRotation\">\n <value>2.303834612632515</value>\n </Data>\n <Data name=\"textStrokeColor\">\n <value>rgba(100,255,255,0.2)</value>\n </Data>\n <Data name=\"textStrokeWidth\">\n <value>3</value>\n </Data>\n </ExtendedData>\n <Point>\n <coordinates>0,0,0</coordinates>\n </Point>\n </Placemark>\n </Document>\n </kml>\n `;\n const feats = KML.readFeatures(str);\n const style = feats[0].getStyleFunction()(feats[0], 1);\n expect(feats.length).toBe(1);\n expect(style instanceof Style).toBe(true);\n\n // Text\n const styleText = style.getText();\n expect(styleText.getText()).toBe('bar'); // spaces are trimmed.\n expect(styleText.getFont()).toEqual('bold 16px arial');\n expect(styleText.getFill()).toEqual({ color_: [32, 52, 126, 1] });\n expect(styleText.getStroke()).toEqual({\n color_: 'rgba(100,255,255,0.2)',\n width_: 3,\n lineCap_: undefined,\n lineDashOffset_: undefined,\n lineDash_: null,\n lineJoin_: undefined,\n miterLimit_: undefined,\n });\n expect(styleText.getScale()).toEqual(2);\n expect(styleText.getRotation()).toEqual('2.303834612632515');\n expect(styleText.getPadding()).toEqual([5, 6, 7, 8]);\n expect(styleText.getBackgroundFill()).toEqual({\n color_: 'rgba(255,255,255,0.01)',\n });\n expect(styleText.getTextAlign()).toEqual('right');\n expect(styleText.getOffsetX()).toEqual(-90);\n expect(styleText.getOffsetY()).toEqual(30);\n expectWriteResult(feats, str);\n });\n\n test('should read and write lineDash and fillPattern style for polygon', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Placemark>\n <description></description>\n <Style>\n <LineStyle>\n <color>ff0000eb</color>\n <width>2</width>\n </LineStyle>\n <PolyStyle>\n <fill>0</fill>\n </PolyStyle>\n </Style>\n <ExtendedData>\n <Data name=\"fillPattern\">\n <value>{\"id\":3,\"color\":[235,0,0,1]}</value>\n </Data>\n <Data name=\"lineDash\">\n <value>1,1</value>\n </Data>\n </ExtendedData>\n <Polygon>\n <outerBoundaryIs>\n <LinearRing>\n <coordinates>8.521,47.381,0 8.529,47.375,0 8.531,47.382,0 8.521,47.381,0</coordinates>\n </LinearRing>\n </outerBoundaryIs>\n </Polygon>\n </Placemark>\n </Document>\n </kml>\n `;\n const feats = KML.readFeatures(str);\n const styles = feats[0].getStyle();\n expect(feats.length).toBe(1);\n expect(styles.length).toBe(1);\n\n // Polygon\n const feature = feats[0];\n const outlineStyle = styles[0].getStroke();\n expect(outlineStyle.getColor()).toEqual([235, 0, 0, 1]);\n expect(outlineStyle.getWidth()).toEqual(2);\n const fillStyle = styles[0].getFill();\n expect(feature.get('fillPattern')).toEqual({\n id: 3,\n color: [235, 0, 0, 1],\n });\n const color = fillStyle.getColor();\n expect(color.canvas).toMatchSnapshot();\n expect(color.id).toBe(3);\n expect(color.color).toEqual([235, 0, 0, 1]);\n expectWriteResult(feats, str);\n });\n\n test('should add zIndex and rotation to icon style and pictureOptions to feature properties.', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Placemark>\n <description></description>\n <Style>\n <IconStyle>\n <heading>\n 1.5707963267948966\n </heading>\n <Icon>\n <href>https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>\n <gx:w>64</gx:w>\n <gx:h>64</gx:h>\n </Icon>\n <hotSpot x=\"20\" y=\"2\" xunits=\"pixels\" yunits=\"pixels\"/>\n </IconStyle>\n </Style>\n <ExtendedData>\n <Data name=\"iconRotation\">\n <value>1.5707963267948966</value>\n </Data>\n <Data name=\"maxZoom\">\n <value>18.5</value>\n </Data>\n <Data name=\"minZoom\">\n <value>15</value>\n </Data>\n <Data name=\"pictureOptions\">\n <value>{\"resolution\":4,\"defaultScale\":0.5}</value>\n </Data>\n <Data name=\"zIndex\">\n <value>1</value>\n </Data>\n </ExtendedData>\n <Point>\n <coordinates>0,0,0</coordinates>\n </Point>\n </Placemark>\n </Document>\n </kml>\n `;\n const feats = KML.readFeatures(str);\n const style = feats[0].getStyleFunction()(feats[0], 1);\n expect(style.getZIndex()).toBe(1);\n expect(style.getImage().getRotation()).toBe(1.5707963267948966);\n expect(feats[0].get('pictureOptions')).toEqual({\n resolution: 4,\n defaultScale: 0.5,\n });\n expect(feats[0].get('maxZoom')).toEqual(18.5);\n expect(feats[0].get('minZoom')).toEqual(15);\n expectWriteResult(feats, str);\n });\n });\n\n describe('writeDocumentCamera()', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>\n CamTest\n </name>\n </Document>\n </kml>`;\n\n const strWithCam = `<kml ${xmlns}>\n <Document>\n <name>\n CamTest\n </name>\n <Camera xmlns=\"\">\n <Heading>\n 270\n </Heading>\n <Altitude>\n 300\n </Altitude>\n <Longitude>\n 5.8\n </Longitude>\n <Latitude>\n 41.6\n </Latitude>\n </Camera>\n </Document>\n </kml>`;\n\n test('should insert the correct <Camera> tag.', () => {\n const kmlWithKamera = KML.writeDocumentCamera(str, {\n heading: 270,\n altitude: 300,\n longitude: 5.8,\n latitude: 41.6,\n });\n expect(beautify(kmlWithKamera)).toEqual(beautify(strWithCam));\n });\n\n test('should remove the present <Camera> tag when called without cameraAttributes.', () => {\n const kmlWithoutKamera = KML.writeDocumentCamera(strWithCam);\n expect(beautify(kmlWithoutKamera)).toEqual(beautify(str));\n });\n });\n});\n"],"names":["const"],"mappings":"AAAA,SAAS,SAAS,QAAQ,QAAQ,CAAC;AACnC,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,SAAS,KAAK,QAAQ,UAAU,CAAC;AACjC,SAAS,GAAG,QAAQ,SAAS,CAAC;AAC9B,OAAO,OAAO,MAAM,yBAAyB,CAAC;AAC9C,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB;AACA,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AACtCA,GAAK,CAAC,KAAK;AACX,EAAE,oPAAoP,CAAC;AACvP;AACAA,GAAK,CAAC,iBAAiB,YAAG,CAAC,KAAK,EAAE,GAAG,EAAK;AAC1C,EAAE,MAAM;AACR,IAAI,QAAQ;AACZ,MAAM,GAAG,CAAC,aAAa;AACvB,QAAQ;AACR,UAAU,IAAI,EAAE,MAAM;AACtB,UAAU,OAAO,EAAE,IAAI,WAAW,CAAC;AACnC,YAAY,MAAM,EAAE,IAAI,YAAY,CAAC;AACrC,cAAc,QAAQ,EAAE,KAAK;AAC7B,aAAa,CAAC;AACd,WAAW,CAAC;AACZ,SAAS;AACT,QAAQ,GAAG,CAAC,WAAW,CAAE;AACzB,OAAQ;AACR,KAAM;AACN,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC,CAAC;AACF;AACA,QAAQ,CAAC,KAAK,WAAE,GAAM;AACtB,EAAE,QAAQ,CAAC,oCAAoC,WAAE,GAAM;AACvD,IAAI,IAAI,CAAC,0FAA0F,WAAE,GAAM;AAC3G,MAAMA,GAAK,CAAC,GAAG,GAAG,oBACH,KAAK,q2BAmBb,CAAC;AACR,MAAMA,GAAK,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1C,MAAMA,GAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC;AACA;AACA,MAAMA,GAAK,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAChD,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,MAAM,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D;AACA;AACA,MAAMA,GAAK,CAAC,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACvC,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO;AAC7D,QAAQ,CAAC,kBAAmB;AAC5B,OAAO,CAAC;AACR,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,MAAM,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,MAAM,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC;AAC9E,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CACT,CAAC,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpD;AACA;AACA,MAAMA,GAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO;AAC3D,QAAQ,CAAC,mBAAoB;AAC7B,OAAO,CAAC;AACR,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrE,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,MAAM,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC;AAC5E,QAAQ,EAAE,EAAE,EAAE,EAAE,CAAC,CACX,CAAC,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClD;AACA,MAAM,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,CAAC,+CAA+C,WAAE,GAAM;AAChE,MAAMA,GAAK,CAAC,GAAG,GAAG,oBACH,KAAK,wpDAiDb,CAAC;AACR,MAAMA,GAAK,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1C,MAAMA,GAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD;AACA;AACA,MAAMA,GAAK,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACxC,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9C,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC7D,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC;AAC5C,QAAQ,MAAM,EAAE,uBAAuB;AACvC,QAAQ,MAAM,EAAE,CAAC;AACjB,QAAQ,QAAQ,EAAE,SAAS;AAC3B,QAAQ,eAAe,EAAE,SAAS;AAClC,QAAQ,SAAS,EAAE,IAAI;AACvB,QAAQ,SAAS,EAAE,SAAS;AAC5B,QAAQ,WAAW,EAAE,SAAS;AAC9B,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9C,MAAM,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;AACnE,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,MAAM,MAAM,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC;AACpD,QAAQ,MAAM,EAAE,wBAAwB;AACxC,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxD,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AAClD,MAAM,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACjD,MAAM,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,CAAC,kEAAkE,WAAE,GAAM;AACnF,MAAMA,GAAK,CAAC,GAAG,GAAG,oBACH,KAAK,spCAgCb,CAAC;AACR,MAAMA,GAAK,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1C,MAAMA,GAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;AACzC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC;AACA;AACA,MAAMA,GAAK,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,MAAMA,GAAK,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACjD,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjD,MAAMA,GAAK,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC;AACjD,QAAQ,EAAE,EAAE,CAAC;AACb,QAAQ,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7B,OAAO,CAAC,CAAC;AACT,MAAMA,GAAK,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;AACzC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/B,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClD,MAAM,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,CAAC,wFAAwF,WAAE,GAAM;AACzG,MAAMA,GAAK,CAAC,GAAG,GAAG,kBACL,KAAK,sjDAyCX,CAAC;AACR,MAAMA,GAAK,CAAC,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1C,MAAMA,GAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,MAAM,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACtE,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC;AACrD,QAAQ,UAAU,EAAE,CAAC;AACrB,QAAQ,YAAY,EAAE,GAAG;AACzB,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpD,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAClD,MAAM,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpC,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,CAAC;AACL;AACA,EAAE,QAAQ,CAAC,uBAAuB,WAAE,GAAM;AAC1C,IAAIA,GAAK,CAAC,GAAG,GAAG,kBACH,KAAK,uHAML,CAAC;AACd;AACA,IAAIA,GAAK,CAAC,UAAU,GAAG,UAAQ,KAAK,ggBAoBvB,CAAC;AACd;AACA,IAAI,IAAI,CAAC,yCAAyC,WAAE,GAAM;AAC1D,MAAMA,GAAK,CAAC,aAAa,GAAG,GAAG,CAAC,mBAAmB,CAAC,GAAG,EAAE;AACzD,QAAQ,OAAO,EAAE,GAAG;AACpB,QAAQ,QAAQ,EAAE,GAAG;AACrB,QAAQ,SAAS,EAAE,GAAG;AACtB,QAAQ,QAAQ,EAAE,IAAI;AACtB,OAAO,CAAC,CAAC;AACT,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACpE,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,CAAC,8EAA8E,WAAE,GAAM;AAC/F,MAAMA,GAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;AACnE,MAAM,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAChE,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;"}
@@ -0,0 +1,105 @@
1
+ import OLKML from 'ol/format/KML';
2
+ import {
3
+ parse,
4
+ pushParseAndPop,
5
+ isDocument,
6
+ makeStructureNS,
7
+ makeObjectPropertySetter,
8
+ } from 'ol/xml';
9
+ import { extend, includes } from 'ol/array';
10
+ import { readDecimal, readString } from 'ol/format/xsd';
11
+
12
+ var NAMESPACE_URIS = [
13
+ null,
14
+ 'http://earth.google.com/kml/2.0',
15
+ 'http://earth.google.com/kml/2.1',
16
+ 'http://earth.google.com/kml/2.2',
17
+ 'http://www.opengis.net/kml/2.2' ];
18
+
19
+ var CAMERA_PARSERS = makeStructureNS(NAMESPACE_URIS, {
20
+ Altitude: makeObjectPropertySetter(readDecimal),
21
+ Longitude: makeObjectPropertySetter(readDecimal),
22
+ Latitude: makeObjectPropertySetter(readDecimal),
23
+ Tilt: makeObjectPropertySetter(readDecimal),
24
+ AltitudeMode: makeObjectPropertySetter(readString),
25
+ Heading: makeObjectPropertySetter(readDecimal),
26
+ Roll: makeObjectPropertySetter(readDecimal),
27
+ });
28
+
29
+ var KML = /*@__PURE__*/(function (OLKML) {
30
+ function KML () {
31
+ OLKML.apply(this, arguments);
32
+ }
33
+
34
+ if ( OLKML ) KML.__proto__ = OLKML;
35
+ KML.prototype = Object.create( OLKML && OLKML.prototype );
36
+ KML.prototype.constructor = KML;
37
+
38
+ KML.prototype.readCamera = function readCamera (source) {
39
+ var cameras = [];
40
+ if (typeof source === 'string') {
41
+ var doc = parse(source);
42
+ extend(cameras, this.readCameraFromDocument(doc));
43
+ } else if (isDocument(source)) {
44
+ extend(
45
+ cameras,
46
+ this.readCameraFromDocument(/** @type {Document} */ (source))
47
+ );
48
+ } else {
49
+ extend(cameras, this.readCameraFromNode(/** @type {Element} */ (source)));
50
+ }
51
+ return cameras;
52
+ };
53
+
54
+ /**
55
+ * @param {Document} doc Document.
56
+ * @return {Array<Object>} Cameras.
57
+ */
58
+ KML.prototype.readCameraFromDocument = function readCameraFromDocument (doc) {
59
+ var cameras = [];
60
+ for (var n = /** @type {Node} */ (doc.firstChild); n; n = n.nextSibling) {
61
+ if (n.nodeType === Node.ELEMENT_NODE) {
62
+ extend(cameras, this.readCameraFromNode(/** @type {Element} */ (n)));
63
+ }
64
+ }
65
+ return cameras;
66
+ };
67
+
68
+ /**
69
+ * @param {Element} node Node.
70
+ * @return {Array<Object>} Cameras.
71
+ * @api
72
+ */
73
+ KML.prototype.readCameraFromNode = function readCameraFromNode (node) {
74
+ var cameras = [];
75
+ for (var n = node.firstElementChild; n; n = n.nextElementSibling) {
76
+ if (
77
+ includes(NAMESPACE_URIS, n.namespaceURI) &&
78
+ n.localName === 'Camera'
79
+ ) {
80
+ var obj = pushParseAndPop({}, CAMERA_PARSERS, n, []);
81
+ cameras.push(obj);
82
+ }
83
+ }
84
+ for (var n$1 = node.firstElementChild; n$1; n$1 = n$1.nextElementSibling) {
85
+ var ref = n$1;
86
+ var localName = ref.localName;
87
+ if (
88
+ includes(NAMESPACE_URIS, n$1.namespaceURI) &&
89
+ (localName === 'Document' ||
90
+ localName === 'Folder' ||
91
+ localName === 'Placemark' ||
92
+ localName === 'kml')
93
+ ) {
94
+ extend(cameras, this.readCameraFromNode(n$1));
95
+ }
96
+ }
97
+ return cameras;
98
+ };
99
+
100
+ return KML;
101
+ }(OLKML));
102
+
103
+ export default KML;
104
+
105
+ //# sourceMappingURL=KMLFormat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KMLFormat.js","sources":["../../src/utils/KMLFormat.js"],"sourcesContent":["import OLKML from 'ol/format/KML';\nimport {\n parse,\n pushParseAndPop,\n isDocument,\n makeStructureNS,\n makeObjectPropertySetter,\n} from 'ol/xml';\nimport { extend, includes } from 'ol/array';\nimport { readDecimal, readString } from 'ol/format/xsd';\n\nconst NAMESPACE_URIS = [\n null,\n 'http://earth.google.com/kml/2.0',\n 'http://earth.google.com/kml/2.1',\n 'http://earth.google.com/kml/2.2',\n 'http://www.opengis.net/kml/2.2',\n];\n\nconst CAMERA_PARSERS = makeStructureNS(NAMESPACE_URIS, {\n Altitude: makeObjectPropertySetter(readDecimal),\n Longitude: makeObjectPropertySetter(readDecimal),\n Latitude: makeObjectPropertySetter(readDecimal),\n Tilt: makeObjectPropertySetter(readDecimal),\n AltitudeMode: makeObjectPropertySetter(readString),\n Heading: makeObjectPropertySetter(readDecimal),\n Roll: makeObjectPropertySetter(readDecimal),\n});\n\nclass KML extends OLKML {\n /**\n * Read the cameras of the KML.\n *\n * @param {Document|Element|string} source Source.\n * @return {Array<Object>} Cameras.\n * @api\n */\n readCamera(source) {\n const cameras = [];\n if (typeof source === 'string') {\n const doc = parse(source);\n extend(cameras, this.readCameraFromDocument(doc));\n } else if (isDocument(source)) {\n extend(\n cameras,\n this.readCameraFromDocument(/** @type {Document} */ (source)),\n );\n } else {\n extend(cameras, this.readCameraFromNode(/** @type {Element} */ (source)));\n }\n return cameras;\n }\n\n /**\n * @param {Document} doc Document.\n * @return {Array<Object>} Cameras.\n */\n readCameraFromDocument(doc) {\n const cameras = [];\n for (let n = /** @type {Node} */ (doc.firstChild); n; n = n.nextSibling) {\n if (n.nodeType === Node.ELEMENT_NODE) {\n extend(cameras, this.readCameraFromNode(/** @type {Element} */ (n)));\n }\n }\n return cameras;\n }\n\n /**\n * @param {Element} node Node.\n * @return {Array<Object>} Cameras.\n * @api\n */\n readCameraFromNode(node) {\n const cameras = [];\n for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n if (\n includes(NAMESPACE_URIS, n.namespaceURI) &&\n n.localName === 'Camera'\n ) {\n const obj = pushParseAndPop({}, CAMERA_PARSERS, n, []);\n cameras.push(obj);\n }\n }\n for (let n = node.firstElementChild; n; n = n.nextElementSibling) {\n const { localName } = n;\n if (\n includes(NAMESPACE_URIS, n.namespaceURI) &&\n (localName === 'Document' ||\n localName === 'Folder' ||\n localName === 'Placemark' ||\n localName === 'kml')\n ) {\n extend(cameras, this.readCameraFromNode(n));\n }\n }\n return cameras;\n }\n}\n\nexport default KML;\n"],"names":["const","let","n"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { configure } from 'enzyme';
2
+ import Adapter from 'enzyme-adapter-react-16';
3
+ import KML from './KMLFormat';
4
+
5
+ configure({ adapter: new Adapter() });
6
+ var xmlns =
7
+ 'xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd"';
8
+
9
+ describe('KML', function () {
10
+ test('should read <Camera> tags correctly.', function () {
11
+ var str = "\n <kml " + xmlns + ">\n <Document>\n <name>lala</name>\n <Camera>\n <Heading>\n 270\n </Heading>\n <Altitude>\n 300\n </Altitude>\n <Longitude>\n 5.8\n </Longitude>\n <Latitude>\n 41.6\n </Latitude>\n </Camera>\n <Placemark>\n <Camera>\n <Heading>\n 180\n </Heading>\n <AltitudeMode>\n clampToGround\n </AltitudeMode>\n </Camera>\n </Placemark>\n </Document>\n </kml>\n ";
12
+ var format = new KML();
13
+ var cameras = format.readCamera(str);
14
+
15
+ expect(cameras.length).toEqual(2);
16
+ expect(cameras[0].Heading).toEqual(270);
17
+ expect(cameras[0].Altitude).toEqual(300);
18
+ expect(cameras[0].Longitude).toEqual(5.8);
19
+ expect(cameras[0].Latitude).toEqual(41.6);
20
+ expect(cameras[1].Heading).toEqual(180);
21
+ expect(cameras[1].AltitudeMode).toEqual('clampToGround');
22
+ });
23
+ });
24
+
25
+ //# sourceMappingURL=KMLFormat.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KMLFormat.test.js","sources":["../../src/utils/KMLFormat.test.js"],"sourcesContent":["import { configure } from 'enzyme';\nimport Adapter from 'enzyme-adapter-react-16';\nimport KML from './KMLFormat';\n\nconfigure({ adapter: new Adapter() });\nconst xmlns =\n 'xmlns=\"http://www.opengis.net/kml/2.2\" xmlns:gx=\"http://www.google.com/kml/ext/2.2\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd\"';\n\ndescribe('KML', () => {\n test('should read <Camera> tags correctly.', () => {\n const str = `\n <kml ${xmlns}>\n <Document>\n <name>lala</name>\n <Camera>\n <Heading>\n 270\n </Heading>\n <Altitude>\n 300\n </Altitude>\n <Longitude>\n 5.8\n </Longitude>\n <Latitude>\n 41.6\n </Latitude>\n </Camera>\n <Placemark>\n <Camera>\n <Heading>\n 180\n </Heading>\n <AltitudeMode>\n clampToGround\n </AltitudeMode>\n </Camera>\n </Placemark>\n </Document>\n </kml>\n `;\n const format = new KML();\n const cameras = format.readCamera(str);\n\n expect(cameras.length).toEqual(2);\n expect(cameras[0].Heading).toEqual(270);\n expect(cameras[0].Altitude).toEqual(300);\n expect(cameras[0].Longitude).toEqual(5.8);\n expect(cameras[0].Latitude).toEqual(41.6);\n expect(cameras[1].Heading).toEqual(180);\n expect(cameras[1].AltitudeMode).toEqual('clampToGround');\n });\n});\n"],"names":["const"],"mappings":"AAAA,SAAS,SAAS,QAAQ,QAAQ,CAAC;AACnC,OAAO,OAAO,MAAM,yBAAyB,CAAC;AAC9C,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B;AACA,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;AACtCA,GAAK,CAAC,KAAK;AACX,EAAE,oPAAoP,CAAC;AACvP;AACA,QAAQ,CAAC,KAAK,WAAE,GAAM;AACtB,EAAE,IAAI,CAAC,sCAAsC,WAAE,GAAM;AACrD,IAAIA,GAAK,CAAC,GAAG,GAAG,kBACH,KAAK,ouBA6Bb,CAAC;AACN,IAAIA,GAAK,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,IAAIA,GAAK,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AAC3C;AACA,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACtC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC5C,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAC7D,GAAG,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;"}