react-spatial 1.5.2 → 1.5.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/.github/workflows/conventional-pr-title.yml +21 -0
- package/.github/workflows/main.yml +28 -0
- package/.husky/commit-msg +4 -0
- package/.husky/post-checkout +4 -0
- package/.husky/post-merge +4 -0
- package/.husky/post-rebase +4 -0
- package/.husky/pre-commit +4 -0
- package/.nvmrc +1 -0
- package/.whitesource +8 -0
- package/CHANGELOG.md +65 -0
- package/DEVELOP.md +113 -0
- package/__mocks__/mapbox-gl.js +11 -0
- package/__mocks__/resize-observer-polyfill.js +9 -0
- package/babel.config.js +3 -0
- package/commitlint.config.js +1 -0
- package/data/topic1.js +119 -0
- package/data/topic2.js +28 -0
- package/doc/README.md +21 -0
- package/doc/doc-config.json +4 -0
- package/package.json +4 -3
- package/pull_request_template.md +16 -0
- package/renovate.json +4 -0
- package/scripts/read-pkg-json.js +17 -0
- package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.js +322 -0
- package/src/components/BaseLayerSwitcher/BaseLayerSwitcher.test.js +69 -0
- package/src/components/BaseLayerSwitcher/README.md +61 -0
- package/src/components/BaseLayerSwitcher/__snapshots__/BaseLayerSwitcher.test.js.snap +88 -0
- package/src/components/BaseLayerSwitcher/index.js +1 -0
- package/src/components/BasicMap/BasicMap.js +413 -0
- package/src/components/BasicMap/BasicMap.test.js +281 -0
- package/src/components/BasicMap/README.md +18 -0
- package/src/components/BasicMap/index.js +1 -0
- package/{components → src/components}/CanvasSaveButton/CanvasSaveButton.js +320 -93
- package/src/components/CanvasSaveButton/CanvasSaveButton.test.js +148 -0
- package/src/components/CanvasSaveButton/README.md +76 -0
- package/src/components/CanvasSaveButton/__snapshots__/CanvasSaveButton.test.js.snap +76 -0
- package/src/components/CanvasSaveButton/index.js +1 -0
- package/src/components/Copyright/Copyright.js +89 -0
- package/src/components/Copyright/Copyright.test.js +134 -0
- package/src/components/Copyright/README.md +36 -0
- package/src/components/Copyright/index.js +1 -0
- package/src/components/FeatureExportButton/FeatureExportButton.js +118 -0
- package/src/components/FeatureExportButton/FeatureExportButton.test.js +417 -0
- package/src/components/FeatureExportButton/README.md +76 -0
- package/src/components/FeatureExportButton/__snapshots__/FeatureExportButton.test.js.snap +67 -0
- package/src/components/FeatureExportButton/index.js +1 -0
- package/src/components/FitExtent/FitExtent.js +62 -0
- package/src/components/FitExtent/FitExtent.test.js +48 -0
- package/src/components/FitExtent/README.md +34 -0
- package/src/components/FitExtent/__snapshots__/FitExtent.test.js.snap +13 -0
- package/src/components/FitExtent/index.js +1 -0
- package/{components → src/components}/Geolocation/Geolocation.js +144 -61
- package/src/components/Geolocation/Geolocation.test.js +267 -0
- package/src/components/Geolocation/README.md +25 -0
- package/src/components/Geolocation/__snapshots__/Geolocation.test.js.snap +92 -0
- package/src/components/Geolocation/index.js +1 -0
- package/src/components/LayerTree/LayerTree.js +487 -0
- package/src/components/LayerTree/LayerTree.test.js +337 -0
- package/src/components/LayerTree/README.md +92 -0
- package/src/components/LayerTree/__snapshots__/LayerTree.test.js.snap +1746 -0
- package/src/components/LayerTree/index.js +1 -0
- package/src/components/MousePosition/MousePosition.js +175 -0
- package/src/components/MousePosition/MousePosition.test.js +132 -0
- package/src/components/MousePosition/README.md +50 -0
- package/src/components/MousePosition/__snapshots__/MousePosition.test.js.snap +76 -0
- package/src/components/MousePosition/index.js +1 -0
- package/src/components/NorthArrow/NorthArrow.js +75 -0
- package/src/components/NorthArrow/NorthArrow.test.js +104 -0
- package/src/components/NorthArrow/README.md +59 -0
- package/src/components/NorthArrow/__snapshots__/NorthArrow.test.js.snap +117 -0
- package/src/components/NorthArrow/index.js +1 -0
- package/src/components/Overlay/Overlay.js +176 -0
- package/src/components/Overlay/Overlay.test.js +149 -0
- package/src/components/Overlay/README.md +59 -0
- package/src/components/Overlay/__snapshots__/Overlay.test.js.snap +9 -0
- package/src/components/Overlay/index.js +1 -0
- package/src/components/Permalink/Permalink.js +326 -0
- package/src/components/Permalink/Permalink.test.js +285 -0
- package/src/components/Permalink/README.md +105 -0
- package/src/components/Permalink/index.js +1 -0
- package/{components → src/components}/Popup/Popup.js +165 -55
- package/src/components/Popup/Popup.test.js +307 -0
- package/src/components/Popup/README.md +93 -0
- package/src/components/Popup/__snapshots__/Popup.test.js.snap +180 -0
- package/src/components/Popup/index.js +1 -0
- package/src/components/README.md +41 -0
- package/{components → src/components}/ResizeHandler/ResizeHandler.js +50 -15
- package/src/components/ResizeHandler/ResizeHandler.test.js +344 -0
- package/src/components/ResizeHandler/index.js +1 -0
- package/src/components/RouteSchedule/README.md +118 -0
- package/src/components/RouteSchedule/RouteSchedule.js +370 -0
- package/src/components/RouteSchedule/RouteSchedule.test.js +113 -0
- package/src/components/RouteSchedule/__snapshots__/RouteSchedule.test.js.snap +248 -0
- package/src/components/RouteSchedule/index.js +1 -0
- package/src/components/ScaleLine/README.md +29 -0
- package/src/components/ScaleLine/ScaleLine.js +50 -0
- package/src/components/ScaleLine/ScaleLine.test.js +30 -0
- package/src/components/ScaleLine/__snapshots__/ScaleLine.test.js.snap +7 -0
- package/src/components/ScaleLine/index.js +1 -0
- package/src/components/StopsFinder/README.md +50 -0
- package/src/components/StopsFinder/StopsFinder.js +284 -0
- package/src/components/StopsFinder/StopsFinder.test.js +17 -0
- package/src/components/StopsFinder/StopsFinderOption.js +61 -0
- package/src/components/StopsFinder/__snapshots__/StopsFinder.test.js.snap +133 -0
- package/src/components/StopsFinder/index.js +1 -0
- package/src/components/Zoom/README.md +25 -0
- package/src/components/Zoom/Zoom.js +180 -0
- package/src/components/Zoom/Zoom.test.js +141 -0
- package/src/components/Zoom/__snapshots__/Zoom.test.js.snap +201 -0
- package/src/components/Zoom/index.js +1 -0
- package/{propTypes.js → src/propTypes.js} +16 -12
- package/{setupTests.js → src/setupTests.js} +1 -1
- package/src/styleguidist/ComponentsList.js +52 -0
- package/src/styleguidist/StyleGuide.js +277 -0
- package/src/styleguidist/styleguidist.css +38 -0
- package/src/utils/GlobalsForOle.js +99 -0
- package/src/utils/KML.js +594 -0
- package/src/utils/KML.test.js +337 -0
- package/src/utils/KMLFormat.js +100 -0
- package/src/utils/KMLFormat.test.js +50 -0
- package/{utils → src/utils}/Styles.js +20 -14
- package/src/utils/__snapshots__/KML.test.js.snap.KML-readFeatures()-and-writeFeatures()-should-read-and-write-lineDash-and-fillPattern-style-for-polygon.canvas-image.png +0 -0
- package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-2-(cross)-color-and-(light-blue)-opacity.canvas-image.png +0 -0
- package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-3-(diagonal-line-from-bottom-left-tot-top-right)-with-color-(light-blue)-and-opacity.canvas-image.png +0 -0
- package/src/utils/__snapshots__/getPolygonPattern.test.js.snap.getPolygonPattern()-render-pattern-4-(diagonal-line-from-top-left-to-bottom-right)-with-color-(light-blue)-and-opacity.canvas-image.png +0 -0
- package/{utils → src/utils}/getPolygonPattern.js +34 -6
- package/src/utils/getPolygonPattern.test.js +61 -0
- package/src/utils/timeUtils.js +52 -0
- package/src/utils/timeUtils.test.js +30 -0
- package/styleguide.config.js +251 -0
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js +0 -231
- package/components/BaseLayerSwitcher/BaseLayerSwitcher.js.map +0 -7
- package/components/BaseLayerSwitcher/index.js +0 -1
- package/components/BaseLayerSwitcher/index.js.map +0 -7
- package/components/BasicMap/BasicMap.js +0 -278
- package/components/BasicMap/BasicMap.js.map +0 -7
- package/components/BasicMap/index.js +0 -1
- package/components/BasicMap/index.js.map +0 -7
- package/components/CanvasSaveButton/CanvasSaveButton.js.map +0 -7
- package/components/CanvasSaveButton/index.js +0 -1
- package/components/CanvasSaveButton/index.js.map +0 -7
- package/components/Copyright/Copyright.js +0 -55
- package/components/Copyright/Copyright.js.map +0 -7
- package/components/Copyright/index.js +0 -1
- package/components/Copyright/index.js.map +0 -7
- package/components/FeatureExportButton/FeatureExportButton.js +0 -62
- package/components/FeatureExportButton/FeatureExportButton.js.map +0 -7
- package/components/FeatureExportButton/index.js +0 -1
- package/components/FeatureExportButton/index.js.map +0 -7
- package/components/FitExtent/FitExtent.js +0 -32
- package/components/FitExtent/FitExtent.js.map +0 -7
- package/components/FitExtent/index.js +0 -1
- package/components/FitExtent/index.js.map +0 -7
- package/components/Geolocation/Geolocation.js.map +0 -7
- package/components/Geolocation/index.js +0 -1
- package/components/Geolocation/index.js.map +0 -7
- package/components/LayerTree/LayerTree.js +0 -278
- package/components/LayerTree/LayerTree.js.map +0 -7
- package/components/LayerTree/index.js +0 -1
- package/components/LayerTree/index.js.map +0 -7
- package/components/MousePosition/MousePosition.js +0 -110
- package/components/MousePosition/MousePosition.js.map +0 -7
- package/components/MousePosition/index.js +0 -1
- package/components/MousePosition/index.js.map +0 -7
- package/components/NorthArrow/NorthArrow.js +0 -43
- package/components/NorthArrow/NorthArrow.js.map +0 -7
- package/components/NorthArrow/index.js +0 -1
- package/components/NorthArrow/index.js.map +0 -7
- package/components/Overlay/Overlay.js +0 -122
- package/components/Overlay/Overlay.js.map +0 -7
- package/components/Overlay/index.js +0 -1
- package/components/Overlay/index.js.map +0 -7
- package/components/Permalink/Permalink.js +0 -206
- package/components/Permalink/Permalink.js.map +0 -7
- package/components/Permalink/index.js +0 -1
- package/components/Permalink/index.js.map +0 -7
- package/components/Popup/Popup.js.map +0 -7
- package/components/Popup/index.js +0 -1
- package/components/Popup/index.js.map +0 -7
- package/components/ResizeHandler/ResizeHandler.js.map +0 -7
- package/components/ResizeHandler/index.js +0 -1
- package/components/ResizeHandler/index.js.map +0 -7
- package/components/RouteSchedule/RouteSchedule.js +0 -220
- package/components/RouteSchedule/RouteSchedule.js.map +0 -7
- package/components/RouteSchedule/index.js +0 -1
- package/components/RouteSchedule/index.js.map +0 -7
- package/components/ScaleLine/ScaleLine.js +0 -32
- package/components/ScaleLine/ScaleLine.js.map +0 -7
- package/components/ScaleLine/index.js +0 -1
- package/components/ScaleLine/index.js.map +0 -7
- package/components/StopsFinder/StopsFinder.js +0 -210
- package/components/StopsFinder/StopsFinder.js.map +0 -7
- package/components/StopsFinder/StopsFinderOption.js +0 -51
- package/components/StopsFinder/StopsFinderOption.js.map +0 -7
- package/components/StopsFinder/index.js +0 -1
- package/components/StopsFinder/index.js.map +0 -7
- package/components/Zoom/Zoom.js +0 -130
- package/components/Zoom/Zoom.js.map +0 -7
- package/components/Zoom/index.js +0 -1
- package/components/Zoom/index.js.map +0 -7
- package/propTypes.js.map +0 -7
- package/setupTests.js.map +0 -7
- package/utils/GlobalsForOle.js +0 -94
- package/utils/GlobalsForOle.js.map +0 -7
- package/utils/KML.js +0 -412
- package/utils/KML.js.map +0 -7
- package/utils/KMLFormat.js +0 -69
- package/utils/KMLFormat.js.map +0 -7
- package/utils/Styles.js.map +0 -7
- package/utils/getPolygonPattern.js.map +0 -7
- package/utils/timeUtils.js +0 -31
- package/utils/timeUtils.js.map +0 -7
- /package/{components → src/components}/BaseLayerSwitcher/BaseLayerSwitcher.md.scss +0 -0
- /package/{components → src/components}/BaseLayerSwitcher/BaseLayerSwitcher.scss +0 -0
- /package/{components → src/components}/BasicMap/BasicMap.md.scss +0 -0
- /package/{components → src/components}/CanvasSaveButton/CanvasSaveButton.md.scss +0 -0
- /package/{components → src/components}/Copyright/Copyright.md.scss +0 -0
- /package/{components → src/components}/FeatureExportButton/FeatureExportButton.md.scss +0 -0
- /package/{components → src/components}/FitExtent/FitExtent.md.scss +0 -0
- /package/{components → src/components}/Geolocation/Geolocation.md.scss +0 -0
- /package/{components → src/components}/Geolocation/Geolocation.scss +0 -0
- /package/{components → src/components}/LayerTree/LayerTree.md.scss +0 -0
- /package/{components → src/components}/LayerTree/LayerTree.scss +0 -0
- /package/{components → src/components}/MousePosition/MousePosition.md.scss +0 -0
- /package/{components → src/components}/NorthArrow/NorthArrow.scss +0 -0
- /package/{components → src/components}/Overlay/Overlay.md.scss +0 -0
- /package/{components → src/components}/Overlay/Overlay.scss +0 -0
- /package/{components → src/components}/Permalink/Permalink.md.scss +0 -0
- /package/{components → src/components}/Popup/Popup.md.scss +0 -0
- /package/{components → src/components}/Popup/Popup.scss +0 -0
- /package/{components → src/components}/RouteSchedule/RouteSchedule.md.scss +0 -0
- /package/{components → src/components}/RouteSchedule/RouteSchedule.scss +0 -0
- /package/{components → src/components}/ScaleLine/ScaleLine.scss +0 -0
- /package/{components → src/components}/Zoom/Zoom.md.scss +0 -0
- /package/{components → src/components}/Zoom/Zoom.scss +0 -0
- /package/{images → src/images}/RouteSchedule/firstStation.png +0 -0
- /package/{images → src/images}/RouteSchedule/lastStation.png +0 -0
- /package/{images → src/images}/RouteSchedule/line.png +0 -0
- /package/{images → src/images}/RouteSchedule/station.png +0 -0
- /package/{images → src/images}/baselayer/baselayer.basebright.png +0 -0
- /package/{images → src/images}/baselayer/baselayer.osm.png +0 -0
- /package/{images → src/images}/baselayer/baselayer.travic.png +0 -0
- /package/{images → src/images}/baselayer/open.topo.map.png +0 -0
- /package/{images → src/images}/baselayer/osm.baselayer.hot.png +0 -0
- /package/{images → src/images}/baselayer/osm.baselayer.png +0 -0
- /package/{images → src/images}/favicon.png +0 -0
- /package/{images → src/images}/geops_logo.png +0 -0
- /package/{images → src/images}/geops_logo.svg +0 -0
- /package/{images → src/images}/geops_qr.png +0 -0
- /package/{images → src/images}/mots/bus_poi-blue-01.svg +0 -0
- /package/{images → src/images}/mots/bus_poi-grey-01.svg +0 -0
- /package/{images → src/images}/mots/bus_round-blue-01.svg +0 -0
- /package/{images → src/images}/mots/bus_round-grey-01.svg +0 -0
- /package/{images → src/images}/mots/bus_square-blue-01.svg +0 -0
- /package/{images → src/images}/mots/bus_square-grey-01.svg +0 -0
- /package/{images → src/images}/mots/cable_car_poi-blue-01.svg +0 -0
- /package/{images → src/images}/mots/cable_car_poi-grey-01.svg +0 -0
- /package/{images → src/images}/mots/cable_car_round-blue-01.svg +0 -0
- /package/{images → src/images}/mots/cable_car_round-grey-01.svg +0 -0
- /package/{images → src/images}/mots/cable_car_square-blue-01.svg +0 -0
- /package/{images → src/images}/mots/cable_car_square-grey-01.svg +0 -0
- /package/{images → src/images}/mots/ferry_poi-blue-01.svg +0 -0
- /package/{images → src/images}/mots/ferry_poi-grey-01.svg +0 -0
- /package/{images → src/images}/mots/ferry_round-blue-01.svg +0 -0
- /package/{images → src/images}/mots/ferry_round-grey-01.svg +0 -0
- /package/{images → src/images}/mots/ferry_square-blue-01.svg +0 -0
- /package/{images → src/images}/mots/ferry_square-grey-01.svg +0 -0
- /package/{images → src/images}/mots/funicular_round-blue-01.svg +0 -0
- /package/{images → src/images}/mots/funicular_round-grey-01.svg +0 -0
- /package/{images → src/images}/mots/funicular_square-blue-01.svg +0 -0
- /package/{images → src/images}/mots/gondola_round-blue-01.svg +0 -0
- /package/{images → src/images}/mots/rail_poi-blue-01.svg +0 -0
- /package/{images → src/images}/mots/rail_poi-grey-01.svg +0 -0
- /package/{images → src/images}/mots/rail_round-blue-01.svg +0 -0
- /package/{images → src/images}/mots/rail_round-grey-01.svg +0 -0
- /package/{images → src/images}/mots/rail_square-blue-01.svg +0 -0
- /package/{images → src/images}/mots/rail_square-grey-01.svg +0 -0
- /package/{images → src/images}/mots/subway_round blue-01.svg +0 -0
- /package/{images → src/images}/mots/subway_round-blue-01.svg +0 -0
- /package/{images → src/images}/mots/tram_poi-blue-01.svg +0 -0
- /package/{images → src/images}/mots/tram_poi-grey-01.svg +0 -0
- /package/{images → src/images}/mots/tram_round-blue-01.svg +0 -0
- /package/{images → src/images}/mots/tram_round-grey-01.svg +0 -0
- /package/{images → src/images}/mots/tram_square-blue-01.svg +0 -0
- /package/{images → src/images}/mots/tram_square-grey-01.svg +0 -0
- /package/{images → src/images}/northArrow.svg +0 -0
- /package/{images → src/images}/northArrow.url.svg +0 -0
- /package/{images → src/images}/northArrowCircle.svg +0 -0
- /package/{images → src/images}/northArrowCircle.url.svg +0 -0
- /package/{themes → src/themes}/README.md +0 -0
- /package/{themes → src/themes}/default/components.scss +0 -0
- /package/{themes → src/themes}/default/examples.scss +0 -0
- /package/{themes → src/themes}/default/index.scss +0 -0
- /package/{themes → src/themes}/default/mixins.scss +0 -0
- /package/{themes → src/themes}/default/variables.scss +0 -0
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
import React, { PureComponent } from "react";
|
|
2
|
-
import PropTypes from "prop-types";
|
|
3
|
-
import { defaults as defaultInteractions } from "ol/interaction";
|
|
4
|
-
import { equals } from "ol/extent";
|
|
5
|
-
import OLMap from "ol/Map";
|
|
6
|
-
import OLCollection from "ol/Collection";
|
|
7
|
-
import View from "ol/View";
|
|
8
|
-
import { unByKey } from "ol/Observable";
|
|
9
|
-
import Interaction from "ol/interaction/Interaction";
|
|
10
|
-
import { Layer } from "mobility-toolbox-js/ol";
|
|
11
|
-
import ResizeHandler from "../ResizeHandler";
|
|
12
|
-
const propTypes = {
|
|
13
|
-
animationOptions: PropTypes.shape({
|
|
14
|
-
center: PropTypes.arrayOf(PropTypes.number),
|
|
15
|
-
resolution: PropTypes.number,
|
|
16
|
-
zoom: PropTypes.number
|
|
17
|
-
}),
|
|
18
|
-
center: PropTypes.arrayOf(PropTypes.number),
|
|
19
|
-
className: PropTypes.string,
|
|
20
|
-
extent: PropTypes.arrayOf(PropTypes.number),
|
|
21
|
-
fitOptions: PropTypes.object,
|
|
22
|
-
interactions: PropTypes.oneOfType([
|
|
23
|
-
PropTypes.arrayOf(PropTypes.instanceOf(Interaction)),
|
|
24
|
-
PropTypes.instanceOf(OLCollection)
|
|
25
|
-
]),
|
|
26
|
-
layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),
|
|
27
|
-
map: PropTypes.instanceOf(OLMap),
|
|
28
|
-
onFeaturesClick: PropTypes.func,
|
|
29
|
-
featuresClickOptions: PropTypes.shape({
|
|
30
|
-
layerFilter: PropTypes.func,
|
|
31
|
-
hitTolerance: PropTypes.number,
|
|
32
|
-
checkWrapped: PropTypes.bool
|
|
33
|
-
}),
|
|
34
|
-
onFeaturesHover: PropTypes.func,
|
|
35
|
-
onMapMoved: PropTypes.func,
|
|
36
|
-
resolution: PropTypes.number,
|
|
37
|
-
tabIndex: PropTypes.number,
|
|
38
|
-
style: PropTypes.object,
|
|
39
|
-
ariaLabel: PropTypes.string,
|
|
40
|
-
viewOptions: PropTypes.shape({
|
|
41
|
-
minZoom: PropTypes.number,
|
|
42
|
-
maxZoom: PropTypes.number,
|
|
43
|
-
extent: PropTypes.array,
|
|
44
|
-
projection: PropTypes.string
|
|
45
|
-
}),
|
|
46
|
-
zoom: PropTypes.number
|
|
47
|
-
};
|
|
48
|
-
const defaultProps = {
|
|
49
|
-
animationOptions: void 0,
|
|
50
|
-
center: [0, 0],
|
|
51
|
-
className: "rs-map",
|
|
52
|
-
extent: void 0,
|
|
53
|
-
fitOptions: {
|
|
54
|
-
duration: 1e3,
|
|
55
|
-
padding: [20, 20, 20, 20],
|
|
56
|
-
maxZoom: 23
|
|
57
|
-
},
|
|
58
|
-
style: void 0,
|
|
59
|
-
interactions: null,
|
|
60
|
-
layers: [],
|
|
61
|
-
map: null,
|
|
62
|
-
onFeaturesClick: void 0,
|
|
63
|
-
featuresClickOptions: {
|
|
64
|
-
hitTolerance: 0
|
|
65
|
-
},
|
|
66
|
-
onFeaturesHover: void 0,
|
|
67
|
-
onMapMoved: void 0,
|
|
68
|
-
resolution: void 0,
|
|
69
|
-
tabIndex: void 0,
|
|
70
|
-
ariaLabel: "map",
|
|
71
|
-
viewOptions: {
|
|
72
|
-
minZoom: 0,
|
|
73
|
-
maxZoom: 22,
|
|
74
|
-
extent: void 0,
|
|
75
|
-
projection: "EPSG:3857"
|
|
76
|
-
},
|
|
77
|
-
zoom: 1
|
|
78
|
-
};
|
|
79
|
-
class BasicMap extends PureComponent {
|
|
80
|
-
constructor(props) {
|
|
81
|
-
super(props);
|
|
82
|
-
const { map, interactions } = this.props;
|
|
83
|
-
this.map = map || new OLMap({
|
|
84
|
-
controls: [],
|
|
85
|
-
interactions: interactions || defaultInteractions({
|
|
86
|
-
altShiftDragRotate: false,
|
|
87
|
-
pinchRotate: false
|
|
88
|
-
})
|
|
89
|
-
});
|
|
90
|
-
this.state = {
|
|
91
|
-
node: null
|
|
92
|
-
};
|
|
93
|
-
this.layers = [];
|
|
94
|
-
this.moveEndRef = null;
|
|
95
|
-
this.singleClickRef = null;
|
|
96
|
-
this.pointerMoveRef = null;
|
|
97
|
-
this.setNode = this.setNode.bind(this);
|
|
98
|
-
}
|
|
99
|
-
componentDidMount() {
|
|
100
|
-
const { layers, extent, viewOptions, center, zoom, resolution } = this.props;
|
|
101
|
-
const { node } = this.state;
|
|
102
|
-
this.map.setTarget(node);
|
|
103
|
-
this.map.setView(new View({ ...viewOptions, center, zoom, resolution }));
|
|
104
|
-
const viewPort = this.map.getViewport();
|
|
105
|
-
viewPort.style.touchAction = "none";
|
|
106
|
-
viewPort.style.msTouchAction = "none";
|
|
107
|
-
viewPort.setAttribute("touch-action", "none");
|
|
108
|
-
if (this.map.getSize() && extent) {
|
|
109
|
-
this.map.getView().fit(extent);
|
|
110
|
-
}
|
|
111
|
-
this.setLayers(layers);
|
|
112
|
-
this.listenMoveEnd();
|
|
113
|
-
this.listenSingleClick();
|
|
114
|
-
this.listenPointerMove();
|
|
115
|
-
}
|
|
116
|
-
componentDidUpdate(prevProps, prevState) {
|
|
117
|
-
const {
|
|
118
|
-
animationOptions,
|
|
119
|
-
center,
|
|
120
|
-
extent,
|
|
121
|
-
fitOptions,
|
|
122
|
-
layers,
|
|
123
|
-
resolution,
|
|
124
|
-
viewOptions,
|
|
125
|
-
zoom,
|
|
126
|
-
onMapMoved,
|
|
127
|
-
onFeaturesClick,
|
|
128
|
-
onFeaturesHover
|
|
129
|
-
} = this.props;
|
|
130
|
-
const { node } = this.state;
|
|
131
|
-
if (prevState.node !== node) {
|
|
132
|
-
this.map.setTarget(node);
|
|
133
|
-
if (!prevState.node && node && extent) {
|
|
134
|
-
this.map.getView().fit(extent);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
if (prevProps.layers !== layers) {
|
|
138
|
-
this.setLayers(layers, prevProps.layers);
|
|
139
|
-
}
|
|
140
|
-
if (viewOptions && JSON.stringify(viewOptions) !== JSON.stringify(prevProps.viewOptions)) {
|
|
141
|
-
this.map.setView(
|
|
142
|
-
new View({
|
|
143
|
-
...viewOptions,
|
|
144
|
-
center,
|
|
145
|
-
resolution,
|
|
146
|
-
zoom
|
|
147
|
-
})
|
|
148
|
-
);
|
|
149
|
-
}
|
|
150
|
-
const view = this.map.getView();
|
|
151
|
-
if (animationOptions && prevProps.animationOptions !== animationOptions) {
|
|
152
|
-
view.animate(animationOptions);
|
|
153
|
-
}
|
|
154
|
-
if (prevProps.center !== center) {
|
|
155
|
-
view.setCenter(center);
|
|
156
|
-
}
|
|
157
|
-
if (zoom !== prevProps.zoom) {
|
|
158
|
-
view.setZoom(zoom);
|
|
159
|
-
}
|
|
160
|
-
if (resolution !== prevProps.resolution) {
|
|
161
|
-
view.setResolution(resolution);
|
|
162
|
-
}
|
|
163
|
-
if (extent && !equals(extent, prevProps.extent || [])) {
|
|
164
|
-
view.fit(extent, fitOptions);
|
|
165
|
-
}
|
|
166
|
-
if (onMapMoved !== prevProps.onMapMoved) {
|
|
167
|
-
this.listenMoveEnd();
|
|
168
|
-
}
|
|
169
|
-
if (onFeaturesClick !== prevProps.onFeaturesClick) {
|
|
170
|
-
this.listenSingleClick();
|
|
171
|
-
}
|
|
172
|
-
if (onFeaturesHover !== prevProps.onFeaturesHover) {
|
|
173
|
-
this.listenPointerMove();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
componentWillUnmount() {
|
|
177
|
-
unByKey([this.moveEndRef, this.singleClickRef, this.pointerMoveRef]);
|
|
178
|
-
}
|
|
179
|
-
setNode(node) {
|
|
180
|
-
this.setState({ node });
|
|
181
|
-
}
|
|
182
|
-
setLayers(layers = [], prevLayers = []) {
|
|
183
|
-
for (let i = 0; i < prevLayers.length; i += 1) {
|
|
184
|
-
this.terminateLayer(prevLayers[i]);
|
|
185
|
-
}
|
|
186
|
-
for (let i = 0; i < layers.length; i += 1) {
|
|
187
|
-
this.initLayer(layers[i]);
|
|
188
|
-
}
|
|
189
|
-
this.layers = layers;
|
|
190
|
-
}
|
|
191
|
-
initLayer(layer) {
|
|
192
|
-
if (layer.attachToMap) {
|
|
193
|
-
layer.attachToMap(this.map);
|
|
194
|
-
}
|
|
195
|
-
if (layer.init) {
|
|
196
|
-
layer.init(this.map);
|
|
197
|
-
}
|
|
198
|
-
if (layer.olLayer && this.map.getLayers() && !this.map.getLayers().getArray().includes(layer.olLayer)) {
|
|
199
|
-
this.map.addLayer(layer.olLayer);
|
|
200
|
-
}
|
|
201
|
-
const layers = layer.children || [];
|
|
202
|
-
for (let i = 0; i < layers.length; i += 1) {
|
|
203
|
-
this.initLayer(layers[i]);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
terminateLayer(layer) {
|
|
207
|
-
const layers = layer.children || [];
|
|
208
|
-
for (let i = 0; i < layers.length; i += 1) {
|
|
209
|
-
this.terminateLayer(layers[i]);
|
|
210
|
-
}
|
|
211
|
-
if (layer.olLayer && this.map.getLayers() && this.map.getLayers().getArray().includes(layer.olLayer)) {
|
|
212
|
-
this.map.removeLayer(layer.olLayer);
|
|
213
|
-
}
|
|
214
|
-
if (layer.terminate) {
|
|
215
|
-
layer.terminate(this.map);
|
|
216
|
-
}
|
|
217
|
-
if (layer.detachFromMap) {
|
|
218
|
-
layer.detachFromMap(this.map);
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
listenMoveEnd() {
|
|
222
|
-
const { onMapMoved } = this.props;
|
|
223
|
-
unByKey(this.moveEndRef);
|
|
224
|
-
if (!onMapMoved) {
|
|
225
|
-
return;
|
|
226
|
-
}
|
|
227
|
-
this.moveEndRef = this.map.on("moveend", (evt) => {
|
|
228
|
-
return onMapMoved(evt);
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
listenSingleClick() {
|
|
232
|
-
const { onFeaturesClick, featuresClickOptions } = this.props;
|
|
233
|
-
unByKey(this.singleClickRef);
|
|
234
|
-
if (!onFeaturesClick) {
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
this.singleClickRef = this.map.on("singleclick", (evt) => {
|
|
238
|
-
const features = evt.map.getFeaturesAtPixel(
|
|
239
|
-
evt.pixel,
|
|
240
|
-
featuresClickOptions
|
|
241
|
-
);
|
|
242
|
-
onFeaturesClick(features || [], evt);
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
listenPointerMove() {
|
|
246
|
-
const { onFeaturesHover } = this.props;
|
|
247
|
-
unByKey(this.pointerMoveRef);
|
|
248
|
-
if (!onFeaturesHover) {
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
this.pointerMoveRef = this.map.on("pointermove", (evt) => {
|
|
252
|
-
const features = evt.map.getFeaturesAtPixel(evt.pixel);
|
|
253
|
-
onFeaturesHover(features || [], evt);
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
render() {
|
|
257
|
-
const { className, tabIndex, ariaLabel, style } = this.props;
|
|
258
|
-
const { node } = this.state;
|
|
259
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
260
|
-
className,
|
|
261
|
-
ref: this.setNode,
|
|
262
|
-
role: "presentation",
|
|
263
|
-
"aria-label": ariaLabel,
|
|
264
|
-
tabIndex,
|
|
265
|
-
style
|
|
266
|
-
}, /* @__PURE__ */ React.createElement(ResizeHandler, {
|
|
267
|
-
maxHeightBrkpts: null,
|
|
268
|
-
maxWidthBrkpts: null,
|
|
269
|
-
observe: node,
|
|
270
|
-
onResize: () => {
|
|
271
|
-
this.map.updateSize();
|
|
272
|
-
}
|
|
273
|
-
}));
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
BasicMap.propTypes = propTypes;
|
|
277
|
-
BasicMap.defaultProps = defaultProps;
|
|
278
|
-
export default BasicMap;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/BasicMap/BasicMap.js"],
|
|
4
|
-
"sourcesContent": ["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport { defaults as defaultInteractions } from 'ol/interaction';\nimport { equals } from 'ol/extent';\nimport OLMap from 'ol/Map';\nimport OLCollection from 'ol/Collection';\nimport View from 'ol/View';\nimport { unByKey } from 'ol/Observable';\nimport Interaction from 'ol/interaction/Interaction';\nimport { Layer } from 'mobility-toolbox-js/ol';\nimport ResizeHandler from '../ResizeHandler';\n\nconst propTypes = {\n /** Map animation options */\n animationOptions: PropTypes.shape({\n center: PropTypes.arrayOf(PropTypes.number),\n resolution: PropTypes.number,\n zoom: PropTypes.number,\n }),\n\n /** Center of the [ol/View](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html). */\n center: PropTypes.arrayOf(PropTypes.number),\n\n /** Class name of the map container */\n className: PropTypes.string,\n\n /** Map extent */\n extent: PropTypes.arrayOf(PropTypes.number),\n\n /** Openlayers [fit options](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html#fit) when extent is updated */\n fitOptions: PropTypes.object,\n\n /** Array of [ol/interaction](https://openlayers.org/en/latest/apidoc/module-ol_interaction_Interaction-Interaction.html). */\n interactions: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.instanceOf(Interaction)),\n PropTypes.instanceOf(OLCollection),\n ]),\n\n /** Array of [mobility-toolbox-js layers](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers) to display. */\n layers: PropTypes.arrayOf(PropTypes.instanceOf(Layer)),\n\n /** An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html). */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Callback when a [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html) is clicked.\n * @param {OLFeature[]} features An array of [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html).\n * @param {ol.MapBrowserEvent} event The singleclick [ol/MapBrowserEvent](https://openlayers.org/en/latest/apidoc/module-ol_MapBrowserEvent-MapBrowserEvent.html#event:singleclick).\n */\n onFeaturesClick: PropTypes.func,\n\n /**\n * Optional options to pass on feature click. Passed to ol's 'getFeaturesAtPixel' method.\n * https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html#getFeaturesAtPixel\n */\n featuresClickOptions: PropTypes.shape({\n layerFilter: PropTypes.func,\n hitTolerance: PropTypes.number,\n checkWrapped: PropTypes.bool,\n }),\n\n /**\n * Callback when a [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html) is hovered.\n * @param {OLFeature[]} features An array of [ol/Feature](https://openlayers.org/en/latest/apidoc/module-ol_Feature-Feature.html).\n * @param {ol.MapBrowserEvent} event The pointermove [ol/MapBrowserEvent](https://openlayers.org/en/latest/apidoc/module-ol_MapBrowserEvent-MapBrowserEvent.html#event:pointermove).\n */\n onFeaturesHover: PropTypes.func,\n\n /**\n * Callback when the map was moved.\n * @param {ol.MapEvent} event The movend [ol/MapEvent](https://openlayers.org/en/latest/apidoc/module-ol_MapBrowserEvent-MapBrowserEvent.html#event:moveend).\n */\n onMapMoved: PropTypes.func,\n\n /** Map resolution */\n resolution: PropTypes.number,\n\n /** The tabIndex of the map. */\n tabIndex: PropTypes.number,\n\n /** The style of the map. */\n style: PropTypes.object,\n\n /** HTML aria-label. */\n ariaLabel: PropTypes.string,\n\n /** [ol/View](https://openlayers.org/en/latest/apidoc/module-ol_View-View.html) constructor options */\n viewOptions: PropTypes.shape({\n minZoom: PropTypes.number,\n maxZoom: PropTypes.number,\n extent: PropTypes.array,\n projection: PropTypes.string,\n }),\n\n /** Map zoom level */\n zoom: PropTypes.number,\n};\n\nconst defaultProps = {\n animationOptions: undefined,\n center: [0, 0],\n className: 'rs-map',\n extent: undefined,\n fitOptions: {\n duration: 1000,\n padding: [20, 20, 20, 20],\n maxZoom: 23,\n },\n style: undefined,\n interactions: null,\n layers: [],\n map: null,\n onFeaturesClick: undefined,\n featuresClickOptions: {\n hitTolerance: 0,\n },\n onFeaturesHover: undefined,\n onMapMoved: undefined,\n resolution: undefined,\n tabIndex: undefined,\n ariaLabel: 'map',\n viewOptions: {\n minZoom: 0,\n maxZoom: 22,\n extent: undefined,\n projection: 'EPSG:3857',\n },\n zoom: 1,\n};\n\n/**\n * The BasicMap component renders an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n *\n * The map's view is created with the following parameters for the view:\n * - projection: 'EPSG:3857'\n * - zoom: 0\n * - minZoom: 0\n * - maxZoom: 22\n *\n * These options can be overridden using the viewOptions property.\n */\nclass BasicMap extends PureComponent {\n constructor(props) {\n super(props);\n const { map, interactions } = this.props;\n\n this.map =\n map ||\n new OLMap({\n controls: [],\n interactions:\n interactions ||\n defaultInteractions({\n altShiftDragRotate: false,\n pinchRotate: false,\n }),\n });\n\n this.state = {\n node: null,\n };\n\n this.layers = [];\n this.moveEndRef = null;\n this.singleClickRef = null;\n this.pointerMoveRef = null;\n this.setNode = this.setNode.bind(this);\n }\n\n componentDidMount() {\n const { layers, extent, viewOptions, center, zoom, resolution } =\n this.props;\n const { node } = this.state;\n this.map.setTarget(node);\n\n // We set the view here otherwise the map is not correctly zoomed.\n this.map.setView(new View({ ...viewOptions, center, zoom, resolution }));\n\n // // Since ol 6.1.0 touch-action is set to auto and creates a bad navigation experience on mobile,\n // // so we have to force it to none for mobile.\n // // https://github.com/openlayers/openlayers/pull/10187/files\n const viewPort = this.map.getViewport();\n viewPort.style.touchAction = 'none';\n viewPort.style.msTouchAction = 'none';\n viewPort.setAttribute('touch-action', 'none');\n\n // Fit only work if the map has a size.\n if (this.map.getSize() && extent) {\n this.map.getView().fit(extent);\n }\n\n this.setLayers(layers);\n this.listenMoveEnd();\n this.listenSingleClick();\n this.listenPointerMove();\n }\n\n componentDidUpdate(prevProps, prevState) {\n const {\n animationOptions,\n center,\n extent,\n fitOptions,\n layers,\n resolution,\n viewOptions,\n zoom,\n onMapMoved,\n onFeaturesClick,\n onFeaturesHover,\n } = this.props;\n const { node } = this.state;\n\n if (prevState.node !== node) {\n this.map.setTarget(node);\n\n // When the node is set we reinitialize the extent with the extent property.\n if (!prevState.node && node && extent) {\n this.map.getView().fit(extent);\n }\n }\n\n if (prevProps.layers !== layers) {\n this.setLayers(layers, prevProps.layers);\n }\n\n // Creates a new view if necessary before updating the others prop.\n if (\n viewOptions &&\n JSON.stringify(viewOptions) !== JSON.stringify(prevProps.viewOptions)\n ) {\n // Re-create a view, ol doesn't provide any method to setExtent of view.\n this.map.setView(\n new View({\n ...viewOptions,\n center,\n resolution,\n zoom,\n }),\n );\n }\n\n const view = this.map.getView();\n\n if (animationOptions && prevProps.animationOptions !== animationOptions) {\n view.animate(animationOptions);\n }\n\n if (prevProps.center !== center) {\n view.setCenter(center);\n }\n\n if (zoom !== prevProps.zoom) {\n view.setZoom(zoom);\n }\n\n if (resolution !== prevProps.resolution) {\n view.setResolution(resolution);\n }\n\n if (extent && !equals(extent, prevProps.extent || [])) {\n view.fit(extent, fitOptions);\n }\n\n if (onMapMoved !== prevProps.onMapMoved) {\n this.listenMoveEnd();\n }\n\n if (onFeaturesClick !== prevProps.onFeaturesClick) {\n this.listenSingleClick();\n }\n\n if (onFeaturesHover !== prevProps.onFeaturesHover) {\n this.listenPointerMove();\n }\n }\n\n componentWillUnmount() {\n unByKey([this.moveEndRef, this.singleClickRef, this.pointerMoveRef]);\n }\n\n setNode(node) {\n this.setState({ node });\n }\n\n setLayers(layers = [], prevLayers = []) {\n for (let i = 0; i < prevLayers.length; i += 1) {\n this.terminateLayer(prevLayers[i]);\n }\n for (let i = 0; i < layers.length; i += 1) {\n this.initLayer(layers[i]);\n }\n this.layers = layers;\n }\n\n initLayer(layer) {\n if (layer.attachToMap) {\n layer.attachToMap(this.map);\n }\n\n if (layer.init) {\n layer.init(this.map);\n }\n\n if (\n layer.olLayer &&\n this.map.getLayers() &&\n !this.map.getLayers().getArray().includes(layer.olLayer)\n ) {\n this.map.addLayer(layer.olLayer);\n }\n const layers = layer.children || [];\n for (let i = 0; i < layers.length; i += 1) {\n this.initLayer(layers[i]);\n }\n }\n\n terminateLayer(layer) {\n const layers = layer.children || [];\n for (let i = 0; i < layers.length; i += 1) {\n this.terminateLayer(layers[i]);\n }\n\n if (\n layer.olLayer &&\n this.map.getLayers() &&\n this.map.getLayers().getArray().includes(layer.olLayer)\n ) {\n this.map.removeLayer(layer.olLayer);\n }\n\n if (layer.terminate) {\n layer.terminate(this.map);\n }\n\n if (layer.detachFromMap) {\n layer.detachFromMap(this.map);\n }\n }\n\n listenMoveEnd() {\n const { onMapMoved } = this.props;\n unByKey(this.moveEndRef);\n\n if (!onMapMoved) {\n return;\n }\n\n this.moveEndRef = this.map.on('moveend', (evt) => {\n return onMapMoved(evt);\n });\n }\n\n listenSingleClick() {\n const { onFeaturesClick, featuresClickOptions } = this.props;\n unByKey(this.singleClickRef);\n\n if (!onFeaturesClick) {\n return;\n }\n\n this.singleClickRef = this.map.on('singleclick', (evt) => {\n const features = evt.map.getFeaturesAtPixel(\n evt.pixel,\n featuresClickOptions,\n );\n onFeaturesClick(features || [], evt);\n });\n }\n\n listenPointerMove() {\n const { onFeaturesHover } = this.props;\n unByKey(this.pointerMoveRef);\n\n if (!onFeaturesHover) {\n return;\n }\n\n this.pointerMoveRef = this.map.on('pointermove', (evt) => {\n const features = evt.map.getFeaturesAtPixel(evt.pixel);\n onFeaturesHover(features || [], evt);\n });\n }\n\n render() {\n const { className, tabIndex, ariaLabel, style } = this.props;\n const { node } = this.state;\n return (\n <div\n className={className}\n ref={this.setNode}\n role=\"presentation\"\n aria-label={ariaLabel}\n tabIndex={tabIndex}\n style={style}\n >\n <ResizeHandler\n maxHeightBrkpts={null}\n maxWidthBrkpts={null}\n observe={node}\n onResize={() => {\n this.map.updateSize();\n }}\n />\n </div>\n );\n }\n}\n\nBasicMap.propTypes = propTypes;\nBasicMap.defaultProps = defaultProps;\n\nexport default BasicMap;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from "./BasicMap";
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/CanvasSaveButton/CanvasSaveButton.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable no-param-reassign */\nimport React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport OLMap from 'ol/Map';\nimport { getTopLeft, getBottomRight } from 'ol/extent';\nimport NorthArrowSimple from '../../images/northArrow.url.svg';\nimport NorthArrowCircle from '../../images/northArrowCircle.url.svg';\n\nconst extraDataImgPropType = PropTypes.shape({\n src: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n rotation: PropTypes.oneOfType([PropTypes.number, PropTypes.func]),\n circled: PropTypes.bool,\n});\n\nconst propTypes = {\n /**\n * Automatically download the image saved.\n */\n autoDownload: PropTypes.bool,\n\n /**\n * Children content of the button.\n */\n children: PropTypes.node,\n\n /**\n * Output format of the image.\n */\n format: PropTypes.oneOf(['image/jpeg', 'image/png']),\n\n /** An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html). */\n map: PropTypes.instanceOf(OLMap),\n\n /**\n * Extent for the export. If no extent is given, the whole map is exported.\n */\n extent: PropTypes.arrayOf(PropTypes.number),\n\n /**\n * Array of 4 [ol/Coordinate](https://openlayers.org/en/latest/apidoc/module-ol_coordinate.html#~Coordinate).\n * If no coordinates and no extent are given, the whole map is exported.\n * This property must be used to export rotated map.\n * If you don't need to export rotated map the extent property can be used as well.\n * If extent is specified, coordinates property is ignored.\n */\n coordinates: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),\n\n /**\n * Scale the map for better quality. Possible values: 1, 2 or 3.\n * WARNING: The tiled layer with a WMTS or XYZ source must provides an url\n * for each scale in the config file.\n */\n scale: PropTypes.number,\n\n /**\n * Function called before the dowload process begins.\n */\n onSaveStart: PropTypes.func,\n\n /**\n * Function called after the dowload process ends.\n *\n * @param {object} error Error message the process fails.\n */\n onSaveEnd: PropTypes.func,\n\n /**\n * Extra data, such as copyright, north arrow configuration.\n * All extra data is optional.\n *\n * Example 1:\n *\n {\n copyright: {\n text: 'Example copyright', // Copyright text or function\n font: '10px Arial', // Font, default is '12px Arial'\n fillStyle: 'blue', // Fill style, default is 'black'\n },\n northArrow, // True if the north arrow\n // should be placed with default configuration\n // (default image, rotation=0, circled=false)\n }\n * Example 2:\n *\n {\n northArrow: {\n src: NorthArrowCustom,\n width: 60, // Width in px, default is 80\n height: 100, // Height in px, default is 80\n rotation: 25, // Absolute rotation in degrees as number or function\n\n }\n }\n * Example 3:\n *\n {\n copyright: {\n text: () => { // Copyright as function\n return this.copyright;\n },\n },\n northArrow: {\n rotation: () => { // Rotation as function\n return NorthArrow.radToDeg(this.map.getView().getRotation());\n },\n circled, // Display circle around the north arrow (Does not work for custom src)\n },\n }\n */\n extraData: PropTypes.shape({\n logo: extraDataImgPropType,\n northArrow: extraDataImgPropType,\n qrCode: extraDataImgPropType,\n copyright: PropTypes.shape({\n text: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n font: PropTypes.string,\n fillStyle: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.instanceOf(CanvasPattern),\n ]),\n background: PropTypes.bool,\n }),\n }),\n};\n\nconst defaultProps = {\n autoDownload: true,\n children: null,\n map: null,\n format: 'image/png',\n extent: null,\n extraData: null,\n coordinates: null,\n scale: 1,\n onSaveStart: (map) => {\n return Promise.resolve(map);\n },\n onSaveEnd: () => {},\n};\n\n/**\n * The CanvasSaveButton component creates a button to save\n * an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html)\n * canvas as an image.\n */\nclass CanvasSaveButton extends PureComponent {\n constructor(props) {\n super(props);\n this.padding = 5;\n }\n\n static getMargin(destCanvas) {\n const newMargin = destCanvas.width / 100; // 1% of the canvas width\n return newMargin;\n }\n\n onClick(evt) {\n const { map, onSaveStart, onSaveEnd, autoDownload } = this.props;\n if (window.navigator.msSaveBlob) {\n // ie only\n evt.preventDefault();\n evt.stopPropagation();\n }\n onSaveStart(map).then((mapToExport) => {\n return this.createCanvasImage(mapToExport || map)\n .then((canvas) => {\n if (autoDownload) {\n this.downloadCanvasImage(canvas).then((blob) => {\n onSaveEnd(mapToExport, canvas, blob);\n });\n } else {\n onSaveEnd(mapToExport, canvas);\n }\n })\n .catch((err) => {\n if (err) {\n // eslint-disable-next-line no-console\n console.error(err);\n }\n onSaveEnd(mapToExport, err);\n });\n });\n }\n\n getDownloadImageName() {\n const { format } = this.props;\n const fileExt = format === 'image/jpeg' ? 'jpg' : 'png';\n return (\n `${window.document.title.replace(/ /g, '_').toLowerCase()}` +\n `.${fileExt}`\n );\n }\n\n // Ensure the font size fita with the image width.\n decreaseFontSize(destContext, maxWidth, copyright, scale) {\n const minFontSize = 8;\n let sizeMatch;\n let fontSize;\n do {\n sizeMatch = destContext.font.match(/[0-9]+(?:\\.[0-9]+)?(px)/i);\n fontSize = parseInt(sizeMatch[0].replace(sizeMatch[1], ''), 10);\n\n // eslint-disable-next-line no-param-reassign\n destContext.font = destContext.font.replace(fontSize, fontSize - 1);\n\n if (fontSize - 1 === minFontSize) {\n this.multilineCopyright = true;\n }\n } while (\n fontSize - 1 > minFontSize &&\n destContext.measureText(copyright).width * scale > maxWidth\n );\n\n return destContext.font;\n }\n\n // eslint-disable-next-line class-methods-use-this\n drawTextBackground(\n destContext,\n textMeasure,\n textX,\n textY,\n padding,\n styleOptions = {},\n ) {\n /// get width of text\n const { width, height, actualBoundingBoxAscent } = textMeasure;\n destContext.save();\n // Dflt is a white background\n destContext.fillStyle = 'rgba(255,255,255,.8)';\n\n // To simplify usability the user could pass a boolean to use only default values.\n if (typeof styleOptions === 'object') {\n Object.entries(styleOptions).forEach(([key, value]) => {\n destContext[key] = value;\n });\n }\n\n /// draw background rect assuming height of font\n destContext.fillRect(\n textX - padding,\n textY - actualBoundingBoxAscent - padding,\n width + padding * 2,\n height + padding * 2,\n );\n destContext.restore();\n }\n\n drawCopyright(destContext, destCanvas, maxWidth) {\n const { extraData, scale } = this.props;\n const { text, font, fillStyle, background } = extraData.copyright;\n let copyright = typeof text === 'function' ? text() : text;\n\n if (Array.isArray(copyright)) {\n copyright = copyright.join();\n }\n\n destContext.save();\n destContext.scale(scale, scale);\n destContext.font = font || '12px Arial';\n destContext.font = this.decreaseFontSize(\n destContext,\n maxWidth - this.padding,\n copyright,\n scale,\n );\n\n destContext.scale(scale, scale);\n destContext.fillStyle = fillStyle || 'black';\n\n // We search if the display on 2 line is necessary\n let firstLine = copyright;\n const wordNumber = copyright.split(' ').length;\n\n // If the text is bigger than the max width we split it into 2 lines\n if (this.multilineCopyright) {\n for (let i = 0; i < wordNumber; i += 1) {\n firstLine = firstLine.substring(0, firstLine.lastIndexOf(' '));\n // Stop removing word when fits within one line.\n if (\n destContext.measureText(firstLine).width * scale <\n maxWidth - this.padding\n ) {\n break;\n }\n }\n }\n const secondLine = copyright.replace(firstLine, '');\n\n // Draw first line (line break isn't supported for fillText).\n const textX = this.margin;\n let textMeasure = destContext.measureText(firstLine);\n textMeasure.height =\n textMeasure.actualBoundingBoxAscent +\n textMeasure.actualBoundingBoxDescent;\n let firstLineY = destCanvas.height / scale - this.padding;\n const secondLineY = firstLineY;\n const paddingBetweenLines = 3;\n const paddingBackground = paddingBetweenLines / 2;\n\n if (secondLine) {\n firstLineY -= textMeasure.height + paddingBetweenLines;\n }\n if (background) {\n this.drawTextBackground(\n destContext,\n textMeasure,\n textX,\n firstLineY,\n paddingBackground,\n background,\n );\n }\n destContext.fillText(firstLine, textX, firstLineY);\n\n // Draw second line.\n if (secondLine) {\n textMeasure = destContext.measureText(secondLine);\n textMeasure.height =\n textMeasure.actualBoundingBoxAscent +\n textMeasure.actualBoundingBoxDescent;\n if (background) {\n this.drawTextBackground(\n destContext,\n textMeasure,\n textX,\n secondLineY,\n paddingBackground,\n background,\n );\n }\n destContext.fillText(secondLine, textX, secondLineY);\n }\n\n const firstLineMetrics = destContext.measureText(firstLine);\n const secondLineMetrics = destContext.measureText(secondLine);\n const heightFirstLine =\n firstLineMetrics.actualBoundingBoxAscent +\n firstLineMetrics.actualBoundingBoxDescent;\n const heightSecondLine =\n secondLineMetrics.actualBoundingBoxAscent +\n secondLineMetrics.actualBoundingBoxDescent;\n this.copyrightY =\n destCanvas.height -\n (heightFirstLine + paddingBetweenLines + heightSecondLine) / 2;\n destContext.restore();\n }\n\n drawElement(data, destCanvas, previousItemSize = [0, 0], side = 'right') {\n const destContext = destCanvas.getContext('2d');\n const { scale } = this.props;\n const { src, width, height, rotation } = data;\n\n return new Promise((resolve) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.src = src;\n img.onload = () => {\n destContext.save();\n const elementWidth = (width || 80) * scale;\n const elementHeight = (height || 80) * scale;\n const left =\n side === 'left'\n ? this.margin + elementWidth / 2\n : destCanvas.width - this.margin - elementWidth / 2;\n const top =\n (side === 'left' && this.copyrightY\n ? this.copyrightY - 2 * this.padding\n : destCanvas.height) -\n this.margin -\n elementHeight / 2 -\n previousItemSize[1];\n\n destContext.translate(left, top);\n\n if (rotation) {\n const angle = typeof rotation === 'function' ? rotation() : rotation;\n destContext.rotate(angle * (Math.PI / 180));\n }\n\n destContext.drawImage(\n img,\n -elementWidth / 2,\n -elementHeight / 2,\n elementWidth,\n elementHeight,\n );\n destContext.restore();\n\n // Return the pixels width of the arrow and the margin right,\n // that must not be occupied by the copyright.\n resolve([\n elementWidth + 2 * this.padding,\n elementHeight + 2 * this.padding,\n ]);\n };\n\n img.onerror = () => {\n resolve();\n };\n });\n }\n\n calculatePixelsToExport(mapToExport) {\n const { extent, coordinates } = this.props;\n let firstCoordinate;\n let oppositeCoordinate;\n\n if (extent) {\n firstCoordinate = getTopLeft(extent);\n oppositeCoordinate = getBottomRight(extent);\n } else if (coordinates) {\n // In case of coordinates coming from DragBox interaction:\n // firstCoordinate is the first coordinate drawn by the user.\n // oppositeCoordinate is the coordinate of the point dragged by the user.\n [firstCoordinate, , oppositeCoordinate] = coordinates;\n }\n\n if (firstCoordinate && oppositeCoordinate) {\n const firstPixel = mapToExport.getPixelFromCoordinate(firstCoordinate);\n const oppositePixel =\n mapToExport.getPixelFromCoordinate(oppositeCoordinate);\n const pixelTopLeft = [\n firstPixel[0] <= oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] <= oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n const pixelBottomRight = [\n firstPixel[0] > oppositePixel[0] ? firstPixel[0] : oppositePixel[0],\n firstPixel[1] > oppositePixel[1] ? firstPixel[1] : oppositePixel[1],\n ];\n\n return {\n x: pixelTopLeft[0],\n y: pixelTopLeft[1],\n w: pixelBottomRight[0] - pixelTopLeft[0],\n h: pixelBottomRight[1] - pixelTopLeft[1],\n };\n }\n return null;\n }\n\n createCanvasImage(mapToExport) {\n const { extraData } = this.props;\n\n return new Promise((resolve) => {\n mapToExport.once('rendercomplete', () => {\n // Find all layer canvases and add it to dest canvas.\n const canvases = mapToExport\n .getTargetElement()\n .getElementsByTagName('canvas');\n\n // Create the canvas to export with the good size.\n let destCanvas;\n let destContext;\n\n // canvases is an HTMLCollection, we don't try to transform to array because some compilers like cra doesn't translate it right.\n for (let i = 0; i < canvases.length; i += 1) {\n const canvas = canvases[i];\n if (!canvas.width || !canvas.height) {\n // eslint-disable-next-line no-continue\n continue;\n }\n const clip = this.calculatePixelsToExport(mapToExport) || {\n x: 0,\n y: 0,\n w: canvas.width,\n h: canvas.height,\n };\n\n if (!destCanvas) {\n destCanvas = document.createElement('canvas');\n destCanvas.width = clip.w;\n destCanvas.height = clip.h;\n destContext = destCanvas.getContext('2d');\n }\n\n // Draw canvas to the canvas to export.\n destContext.drawImage(\n canvas,\n clip.x,\n clip.y,\n clip.w,\n clip.h,\n 0,\n 0,\n destCanvas.width,\n destCanvas.height,\n );\n }\n\n this.margin = CanvasSaveButton.getMargin(destCanvas);\n\n // Custom info\n let logoPromise = Promise.resolve();\n if (destContext && extraData && extraData.logo) {\n logoPromise = this.drawElement(extraData.logo, destCanvas);\n }\n\n logoPromise.then((logoSize = [0, 0]) => {\n // North arrow\n let arrowPromise = Promise.resolve();\n if (destContext && extraData && extraData.northArrow) {\n arrowPromise = this.drawElement(\n {\n src: extraData.northArrow.circled\n ? NorthArrowCircle\n : NorthArrowSimple,\n ...extraData.northArrow,\n },\n destCanvas,\n logoSize,\n );\n }\n\n // Copyright\n arrowPromise.then((arrowSize = [0, 0]) => {\n const widestElement = Math.max(logoSize[0], arrowSize[0]);\n if (\n destContext &&\n extraData &&\n extraData.copyright &&\n extraData.copyright.text\n ) {\n const maxWidth = widestElement\n ? destContext.canvas.width - widestElement - this.margin\n : destContext.canvas.width;\n this.drawCopyright(destContext, destCanvas, maxWidth);\n }\n let qrCodePromise = Promise.resolve();\n if (destContext && extraData && extraData.qrCode) {\n qrCodePromise = this.drawElement(\n extraData.qrCode,\n destCanvas,\n undefined,\n 'left',\n );\n }\n qrCodePromise.then(() => {\n return resolve(destCanvas);\n });\n });\n });\n });\n mapToExport.renderSync();\n });\n }\n\n downloadCanvasImage(canvas) {\n // Use blob for large images\n const promise = new Promise((resolve) => {\n const { format } = this.props;\n if (/msie (9|10)/gi.test(window.navigator.userAgent.toLowerCase())) {\n // ie 9 and 10\n const url = canvas.toDataURL(format);\n const w = window.open('about:blank', '');\n w.document.write(`<img src=\"${url}\" alt=\"from canvas\"/>`);\n resolve(url);\n }\n if (window.navigator.msSaveBlob) {\n // ie 11 and higher\n let image;\n try {\n image = canvas.msToBlob();\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log(e);\n }\n const blob = new Blob([image], {\n type: format,\n });\n resolve(blob);\n window.navigator.msSaveBlob(blob, this.getDownloadImageName());\n } else {\n canvas.toBlob((blob) => {\n const link = document.createElement('a');\n link.download = this.getDownloadImageName();\n link.href = URL.createObjectURL(blob);\n // append child to document for firefox to be able to download.\n document.body.appendChild(link);\n link.click();\n resolve(blob);\n }, format);\n }\n });\n return promise;\n }\n\n render() {\n const { children, ...other } = this.props;\n\n delete other.onSaveStart;\n delete other.onSaveEnd;\n delete other.extraData;\n delete other.extent;\n delete other.format;\n delete other.map;\n delete other.coordinates;\n delete other.autoDownload;\n delete other.scale;\n\n return (\n <div\n role=\"button\"\n className=\"rs-canvas-save-button\"\n tabIndex={0}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n onClick={(e) => {\n return this.onClick(e);\n }}\n onKeyPress={(e) => {\n return e.which === 13 && this.onClick(e);\n }}\n >\n {children}\n </div>\n );\n }\n}\n\nCanvasSaveButton.propTypes = propTypes;\nCanvasSaveButton.defaultProps = defaultProps;\n\nexport default CanvasSaveButton;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from "./CanvasSaveButton";
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import React, { useMemo, useEffect, useState } from "react";
|
|
2
|
-
import PropTypes from "prop-types";
|
|
3
|
-
import { Map } from "ol";
|
|
4
|
-
import { CopyrightControl } from "mobility-toolbox-js/ol";
|
|
5
|
-
const propTypes = {
|
|
6
|
-
map: PropTypes.instanceOf(Map).isRequired,
|
|
7
|
-
format: PropTypes.func,
|
|
8
|
-
className: PropTypes.string
|
|
9
|
-
};
|
|
10
|
-
const defaultProps = {
|
|
11
|
-
format: (copyrights) => {
|
|
12
|
-
return copyrights.join(" | ");
|
|
13
|
-
},
|
|
14
|
-
className: "rs-copyright"
|
|
15
|
-
};
|
|
16
|
-
function Copyright({ map, format, ...other }) {
|
|
17
|
-
const [copyrights, setCopyrights] = useState([]);
|
|
18
|
-
const control = useMemo(
|
|
19
|
-
() => {
|
|
20
|
-
return new CopyrightControl({
|
|
21
|
-
target: document.createElement("div"),
|
|
22
|
-
element: document.createElement("div"),
|
|
23
|
-
render() {
|
|
24
|
-
const newCopyrights = this.getCopyrights();
|
|
25
|
-
if (copyrights.toString() !== newCopyrights.toString()) {
|
|
26
|
-
setCopyrights(newCopyrights);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
},
|
|
31
|
-
[]
|
|
32
|
-
);
|
|
33
|
-
useEffect(() => {
|
|
34
|
-
if (!control) {
|
|
35
|
-
return () => {
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
control.map = map;
|
|
39
|
-
return () => {
|
|
40
|
-
control.map = null;
|
|
41
|
-
};
|
|
42
|
-
}, [map, control]);
|
|
43
|
-
if (!control || !control.getCopyrights().length) {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
47
|
-
...other,
|
|
48
|
-
dangerouslySetInnerHTML: {
|
|
49
|
-
__html: format(copyrights) || ""
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
Copyright.propTypes = propTypes;
|
|
54
|
-
Copyright.defaultProps = defaultProps;
|
|
55
|
-
export default React.memo(Copyright);
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/Copyright/Copyright.js"],
|
|
4
|
-
"sourcesContent": ["import React, { useMemo, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { Map } from 'ol';\nimport { CopyrightControl } from 'mobility-toolbox-js/ol';\n\nconst propTypes = {\n /**\n * A map.\n */\n map: PropTypes.instanceOf(Map).isRequired,\n\n /**\n * Format function. Called with an array of copyrights from visible layers\n * and returns the copyright.\n */\n format: PropTypes.func,\n\n /**\n * CSS class of th root element\n */\n className: PropTypes.string,\n};\n\nconst defaultProps = {\n format: (copyrights) => {\n return copyrights.join(' | ');\n },\n className: 'rs-copyright',\n};\n\n/**\n * The Copyright component uses the\n * [mobility-toolbox-js CopyrightControl](https://mobility-toolbox-js.geops.io/api/class/src/mapbox/controls/CopyrightControl%20js~CopyrightControl%20html-offset-anchor)\n * to render the layer copyrights.\n */\nfunction Copyright({ map, format, ...other }) {\n const [copyrights, setCopyrights] = useState([]);\n\n const control = useMemo(\n () => {\n return new CopyrightControl({\n target: document.createElement('div'),\n element: document.createElement('div'),\n render() {\n // eslint-disable-next-line react/no-this-in-sfc\n const newCopyrights = this.getCopyrights();\n if (copyrights.toString() !== newCopyrights.toString()) {\n setCopyrights(newCopyrights);\n }\n },\n });\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Ensure the control is not associated to the wrong map\n useEffect(() => {\n if (!control) {\n return () => {};\n }\n\n control.map = map;\n\n return () => {\n control.map = null;\n };\n }, [map, control]);\n\n if (!control || !control.getCopyrights().length) {\n return null;\n }\n\n return (\n <div\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{\n __html: format(copyrights) || '',\n }}\n />\n );\n}\n\nCopyright.propTypes = propTypes;\nCopyright.defaultProps = defaultProps;\n\nexport default React.memo(Copyright);\n"],
|
|
5
|
-
"mappings": "AAAA,OAAO,SAAS,SAAS,WAAW,gBAAgB;AACpD,OAAO,eAAe;AACtB,SAAS,WAAW;AACpB,SAAS,wBAAwB;AAEjC,MAAM,YAAY;AAAA,EAIhB,KAAK,UAAU,WAAW,GAAG,EAAE;AAAA,EAM/B,QAAQ,UAAU;AAAA,EAKlB,WAAW,UAAU;AACvB;AAEA,MAAM,eAAe;AAAA,EACnB,QAAQ,CAAC,eAAe;AACtB,WAAO,WAAW,KAAK,KAAK;AAAA,EAC9B;AAAA,EACA,WAAW;AACb;AAOA,SAAS,UAAU,EAAE,KAAK,WAAW,MAAM,GAAG;AAC5C,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,CAAC,CAAC;AAE/C,QAAM,UAAU;AAAA,IACd,MAAM;AACJ,aAAO,IAAI,iBAAiB;AAAA,QAC1B,QAAQ,SAAS,cAAc,KAAK;AAAA,QACpC,SAAS,SAAS,cAAc,KAAK;AAAA,QACrC,SAAS;AAEP,gBAAM,gBAAgB,KAAK,cAAc;AACzC,cAAI,WAAW,SAAS,MAAM,cAAc,SAAS,GAAG;AACtD,0BAAc,aAAa;AAAA,UAC7B;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEA,CAAC;AAAA,EACH;AAGA,YAAU,MAAM;AACd,QAAI,CAAC,SAAS;AACZ,aAAO,MAAM;AAAA,MAAC;AAAA,IAChB;AAEA,YAAQ,MAAM;AAEd,WAAO,MAAM;AACX,cAAQ,MAAM;AAAA,IAChB;AAAA,EACF,GAAG,CAAC,KAAK,OAAO,CAAC;AAEjB,MAAI,CAAC,WAAW,CAAC,QAAQ,cAAc,EAAE,QAAQ;AAC/C,WAAO;AAAA,EACT;AAEA,SACE,oCAAC;AAAA,IAEE,GAAG;AAAA,IAEJ,yBAAyB;AAAA,MACvB,QAAQ,OAAO,UAAU,KAAK;AAAA,IAChC;AAAA,GACF;AAEJ;AAEA,UAAU,YAAY;AACtB,UAAU,eAAe;AAEzB,eAAe,MAAM,KAAK,SAAS;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from "./Copyright";
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import React, { PureComponent } from "react";
|
|
2
|
-
import PropTypes from "prop-types";
|
|
3
|
-
import KMLFormat from "ol/format/KML";
|
|
4
|
-
import { Layer } from "mobility-toolbox-js/ol";
|
|
5
|
-
import KML from "../../utils/KML";
|
|
6
|
-
const propTypes = {
|
|
7
|
-
children: PropTypes.node,
|
|
8
|
-
format: PropTypes.func,
|
|
9
|
-
layer: PropTypes.instanceOf(Layer).isRequired,
|
|
10
|
-
projection: PropTypes.string
|
|
11
|
-
};
|
|
12
|
-
const defaultProps = {
|
|
13
|
-
children: null,
|
|
14
|
-
format: KMLFormat,
|
|
15
|
-
projection: "EPSG:3857"
|
|
16
|
-
};
|
|
17
|
-
class FeatureExportButton extends PureComponent {
|
|
18
|
-
static createFeatureString(layer, projection, format) {
|
|
19
|
-
if (format === KMLFormat) {
|
|
20
|
-
return KML.writeFeatures(layer, projection);
|
|
21
|
-
}
|
|
22
|
-
return new format().writeFeatures(layer.olLayer.getSource().getFeatures(), {
|
|
23
|
-
featureProjection: projection
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
static exportFeatures(layer, projection, format) {
|
|
27
|
-
const now = new Date().toJSON().slice(0, 20).replace(/[.:T-]+/g, "");
|
|
28
|
-
const featString = this.createFeatureString(layer, projection, format);
|
|
29
|
-
const formatString = featString ? featString.match(/<(\w+)\s+\w+.*?>/)[1] : "xml";
|
|
30
|
-
const fileName = `exported_features_${now}.${formatString}`;
|
|
31
|
-
const charset = document.characterSet || "UTF-8";
|
|
32
|
-
const type = `${formatString === "kml" ? "data:application/vnd.google-earth.kml+xml" : "data:text/xml"};charset=${charset}`;
|
|
33
|
-
if (featString) {
|
|
34
|
-
if (window.navigator.msSaveBlob) {
|
|
35
|
-
window.navigator.msSaveBlob(new Blob([featString], { type }), fileName);
|
|
36
|
-
} else {
|
|
37
|
-
const link = document.createElement("a");
|
|
38
|
-
link.download = fileName;
|
|
39
|
-
link.href = `${type},${encodeURIComponent(featString)}`;
|
|
40
|
-
link.click();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
render() {
|
|
45
|
-
const { children, layer, projection, format, ...other } = this.props;
|
|
46
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
47
|
-
role: "button",
|
|
48
|
-
className: "rs-feature-export-button",
|
|
49
|
-
tabIndex: 0,
|
|
50
|
-
...other,
|
|
51
|
-
onClick: () => {
|
|
52
|
-
return FeatureExportButton.exportFeatures(layer, projection, format);
|
|
53
|
-
},
|
|
54
|
-
onKeyPress: (evt) => {
|
|
55
|
-
return evt.which === 13 && FeatureExportButton.exportFeatures(layer, projection, format);
|
|
56
|
-
}
|
|
57
|
-
}, children);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
FeatureExportButton.propTypes = propTypes;
|
|
61
|
-
FeatureExportButton.defaultProps = defaultProps;
|
|
62
|
-
export default FeatureExportButton;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/FeatureExportButton/FeatureExportButton.js"],
|
|
4
|
-
"sourcesContent": ["import React, { PureComponent } from 'react';\nimport PropTypes from 'prop-types';\nimport KMLFormat from 'ol/format/KML';\nimport { Layer } from 'mobility-toolbox-js/ol';\nimport KML from '../../utils/KML';\n\nconst propTypes = {\n /**\n * Children content of the Feature export button.\n */\n children: PropTypes.node,\n\n /**\n * Format to export features (function).\n * Supported formats: https://openlayers.org/en/latest/apidoc/module-ol_format_Feature-FeatureFormat.html\n */\n format: PropTypes.func,\n\n /**\n * An existing [mobility-toolbox-js Layer](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers),\n * using a valid [ol/source/Vector](https://openlayers.org/en/latest/apidoc/module-ol_source_Vector.html)\n */\n layer: PropTypes.instanceOf(Layer).isRequired,\n\n /**\n * Map projection.\n */\n projection: PropTypes.string,\n};\n\nconst defaultProps = {\n children: null,\n format: KMLFormat,\n projection: 'EPSG:3857',\n};\n\n/**\n * The FeatureExportButton component creates a button that exports feature geometries\n * from a [[mobility-toolbox-js Layer](https://mobility-toolbox-js.geops.io/api/identifiers%20html#ol-layers)]\n * containing an [ol/layer/Vector](https://openlayers.org/en/latest/apidoc/module-ol_layer_Vector-VectorLayer.html)\n * with a [ol/source/Vector](https://openlayers.org/en/latest/apidoc/module-ol_source_Vector.html) on click.<br>\n * The default export format is KML, which supports the features' style export.<br>\n * Other formats do not always support style export (See specific format specs).\n */\nclass FeatureExportButton extends PureComponent {\n static createFeatureString(layer, projection, format) {\n if (format === KMLFormat) {\n return KML.writeFeatures(layer, projection);\n }\n\n // eslint-disable-next-line new-cap\n return new format().writeFeatures(layer.olLayer.getSource().getFeatures(), {\n featureProjection: projection,\n });\n }\n\n static exportFeatures(layer, projection, format) {\n const now = new Date()\n .toJSON()\n .slice(0, 20)\n .replace(/[.:T-]+/g, '');\n const featString = this.createFeatureString(layer, projection, format);\n\n const formatString = featString\n ? featString.match(/<(\\w+)\\s+\\w+.*?>/)[1]\n : 'xml';\n\n const fileName = `exported_features_${now}.${formatString}`;\n const charset = document.characterSet || 'UTF-8';\n const type = `${\n formatString === 'kml'\n ? 'data:application/vnd.google-earth.kml+xml'\n : 'data:text/xml'\n };charset=${charset}`;\n\n if (featString) {\n if (window.navigator.msSaveBlob) {\n // ie 11 and higher\n window.navigator.msSaveBlob(new Blob([featString], { type }), fileName);\n } else {\n const link = document.createElement('a');\n link.download = fileName;\n link.href = `${type},${encodeURIComponent(featString)}`;\n link.click();\n }\n }\n }\n\n render() {\n const { children, layer, projection, format, ...other } = this.props;\n\n return (\n <div\n role=\"button\"\n className=\"rs-feature-export-button\"\n tabIndex={0}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n onClick={() => {\n return FeatureExportButton.exportFeatures(layer, projection, format);\n }}\n onKeyPress={(evt) => {\n return (\n evt.which === 13 &&\n FeatureExportButton.exportFeatures(layer, projection, format)\n );\n }}\n >\n {children}\n </div>\n );\n }\n}\n\nFeatureExportButton.propTypes = propTypes;\nFeatureExportButton.defaultProps = defaultProps;\n\nexport default FeatureExportButton;\n"],
|
|
5
|
-
"mappings": "AAAA,OAAO,SAAS,qBAAqB;AACrC,OAAO,eAAe;AACtB,OAAO,eAAe;AACtB,SAAS,aAAa;AACtB,OAAO,SAAS;AAEhB,MAAM,YAAY;AAAA,EAIhB,UAAU,UAAU;AAAA,EAMpB,QAAQ,UAAU;AAAA,EAMlB,OAAO,UAAU,WAAW,KAAK,EAAE;AAAA,EAKnC,YAAY,UAAU;AACxB;AAEA,MAAM,eAAe;AAAA,EACnB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,YAAY;AACd;AAUA,MAAM,4BAA4B,cAAc;AAAA,EAC9C,OAAO,oBAAoB,OAAO,YAAY,QAAQ;AACpD,QAAI,WAAW,WAAW;AACxB,aAAO,IAAI,cAAc,OAAO,UAAU;AAAA,IAC5C;AAGA,WAAO,IAAI,OAAO,EAAE,cAAc,MAAM,QAAQ,UAAU,EAAE,YAAY,GAAG;AAAA,MACzE,mBAAmB;AAAA,IACrB,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,eAAe,OAAO,YAAY,QAAQ;AAC/C,UAAM,MAAM,IAAI,KAAK,EAClB,OAAO,EACP,MAAM,GAAG,EAAE,EACX,QAAQ,YAAY,EAAE;AACzB,UAAM,aAAa,KAAK,oBAAoB,OAAO,YAAY,MAAM;AAErE,UAAM,eAAe,aACjB,WAAW,MAAM,kBAAkB,EAAE,KACrC;AAEJ,UAAM,WAAW,qBAAqB,OAAO;AAC7C,UAAM,UAAU,SAAS,gBAAgB;AACzC,UAAM,OAAO,GACX,iBAAiB,QACb,8CACA,2BACM;AAEZ,QAAI,YAAY;AACd,UAAI,OAAO,UAAU,YAAY;AAE/B,eAAO,UAAU,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,KAAK,CAAC,GAAG,QAAQ;AAAA,MACxE,OAAO;AACL,cAAM,OAAO,SAAS,cAAc,GAAG;AACvC,aAAK,WAAW;AAChB,aAAK,OAAO,GAAG,QAAQ,mBAAmB,UAAU;AACpD,aAAK,MAAM;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,UAAU,OAAO,YAAY,WAAW,MAAM,IAAI,KAAK;AAE/D,WACE,oCAAC;AAAA,MACC,MAAK;AAAA,MACL,WAAU;AAAA,MACV,UAAU;AAAA,MAET,GAAG;AAAA,MACJ,SAAS,MAAM;AACb,eAAO,oBAAoB,eAAe,OAAO,YAAY,MAAM;AAAA,MACrE;AAAA,MACA,YAAY,CAAC,QAAQ;AACnB,eACE,IAAI,UAAU,MACd,oBAAoB,eAAe,OAAO,YAAY,MAAM;AAAA,MAEhE;AAAA,OAEC,QACH;AAAA,EAEJ;AACF;AAEA,oBAAoB,YAAY;AAChC,oBAAoB,eAAe;AAEnC,eAAe;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from "./FeatureExportButton";
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import PropTypes from "prop-types";
|
|
3
|
-
import OLMap from "ol/Map";
|
|
4
|
-
const propTypes = {
|
|
5
|
-
map: PropTypes.instanceOf(OLMap).isRequired,
|
|
6
|
-
extent: PropTypes.arrayOf(PropTypes.number).isRequired,
|
|
7
|
-
className: PropTypes.string,
|
|
8
|
-
children: PropTypes.node.isRequired
|
|
9
|
-
};
|
|
10
|
-
const defaultProps = {
|
|
11
|
-
className: "rs-fit-extent"
|
|
12
|
-
};
|
|
13
|
-
function FitExtent({ map, extent, className, children, ...other }) {
|
|
14
|
-
const fit = (evt) => {
|
|
15
|
-
if (evt.which && evt.which !== 13) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
map.getView().cancelAnimations();
|
|
19
|
-
map.getView().fit(extent, map.getSize());
|
|
20
|
-
};
|
|
21
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
22
|
-
className,
|
|
23
|
-
role: "button",
|
|
24
|
-
tabIndex: "0",
|
|
25
|
-
onClick: fit,
|
|
26
|
-
onKeyPress: fit,
|
|
27
|
-
...other
|
|
28
|
-
}, children);
|
|
29
|
-
}
|
|
30
|
-
FitExtent.propTypes = propTypes;
|
|
31
|
-
FitExtent.defaultProps = defaultProps;
|
|
32
|
-
export default FitExtent;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/FitExtent/FitExtent.js"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport PropTypes from 'prop-types';\nimport OLMap from 'ol/Map';\n\nconst propTypes = {\n /**\n * An [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\n map: PropTypes.instanceOf(OLMap).isRequired,\n\n /**\n * The extent to be zoomed.\n */\n extent: PropTypes.arrayOf(PropTypes.number).isRequired,\n\n /**\n * CSS class for the fitExtent button.\n */\n className: PropTypes.string,\n\n /**\n * Button content.\n */\n children: PropTypes.node.isRequired,\n};\n\nconst defaultProps = {\n className: 'rs-fit-extent',\n};\n\n/**\n * The FitExtent component creates a button that updates the current extent of\n * an [ol/map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html).\n */\nfunction FitExtent({ map, extent, className, children, ...other }) {\n const fit = (evt) => {\n if (evt.which && evt.which !== 13) {\n return;\n }\n map.getView().cancelAnimations();\n map.getView().fit(extent, map.getSize());\n };\n\n return (\n <div\n className={className}\n role=\"button\"\n tabIndex=\"0\"\n onClick={fit}\n onKeyPress={fit}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...other}\n >\n {children}\n </div>\n );\n}\n\nFitExtent.propTypes = propTypes;\nFitExtent.defaultProps = defaultProps;\n\nexport default FitExtent;\n"],
|
|
5
|
-
"mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe;AACtB,OAAO,WAAW;AAElB,MAAM,YAAY;AAAA,EAIhB,KAAK,UAAU,WAAW,KAAK,EAAE;AAAA,EAKjC,QAAQ,UAAU,QAAQ,UAAU,MAAM,EAAE;AAAA,EAK5C,WAAW,UAAU;AAAA,EAKrB,UAAU,UAAU,KAAK;AAC3B;AAEA,MAAM,eAAe;AAAA,EACnB,WAAW;AACb;AAMA,SAAS,UAAU,EAAE,KAAK,QAAQ,WAAW,aAAa,MAAM,GAAG;AACjE,QAAM,MAAM,CAAC,QAAQ;AACnB,QAAI,IAAI,SAAS,IAAI,UAAU,IAAI;AACjC;AAAA,IACF;AACA,QAAI,QAAQ,EAAE,iBAAiB;AAC/B,QAAI,QAAQ,EAAE,IAAI,QAAQ,IAAI,QAAQ,CAAC;AAAA,EACzC;AAEA,SACE,oCAAC;AAAA,IACC;AAAA,IACA,MAAK;AAAA,IACL,UAAS;AAAA,IACT,SAAS;AAAA,IACT,YAAY;AAAA,IAEX,GAAG;AAAA,KAEH,QACH;AAEJ;AAEA,UAAU,YAAY;AACtB,UAAU,eAAe;AAEzB,eAAe;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default } from "./FitExtent";
|