@mapgis/webclient-vue-cesium 10.5.5-1 → 10.5.5-6
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/README.md +46 -49
- package/dist-libs/webclient-vue-cesium.common.js +191087 -0
- package/dist-libs/webclient-vue-cesium.css +1 -1
- package/dist-libs/webclient-vue-cesium.umd.js +191097 -0
- package/dist-libs/webclient-vue-cesium.umd.min.js +204 -194
- package/docs/.vuepress/config.js +47 -46
- package/docs/README.md +5 -4
- package/docs/api/analysis/Aspect.md +236 -0
- package/docs/api/analysis/Contour.md +240 -0
- package/docs/api/analysis/CutFill.md +306 -0
- package/docs/api/analysis/DynamicSection.md +336 -0
- package/docs/api/analysis/Excavate.md +3 -11
- package/docs/api/analysis/Flood.md +177 -200
- package/docs/api/analysis/HeightLimited.md +7 -4
- package/docs/api/analysis/ParticleEffects.md +549 -0
- package/docs/api/analysis/Profile.md +464 -0
- package/docs/api/analysis/Shadow.md +76 -13
- package/docs/api/analysis/Sightline.md +66 -13
- package/docs/api/analysis/Skyline.md +144 -29
- package/docs/api/analysis/Slope.md +236 -0
- package/docs/api/analysis/Viewshed.md +100 -21
- package/docs/api/layer/IGServer/IgsDocLayer.md +10 -0
- package/docs/api/layer/IGServer/IgsFeatureLayer.md +253 -0
- package/docs/api/layer/IGServer/IgsTileLayer.md +11 -0
- package/docs/api/layer/OGC/CesiumOgcWmsLayer.md +20 -19
- package/docs/api/layer/OGC/Wms.png +0 -0
- package/docs/api/layer/marker/DynamicMarker.md +81 -0
- package/docs/api/layer/marker/dynamicmarker.png +0 -0
- package/docs/api/layer/marker/selects.png +0 -0
- package/docs/api/layer/vectortile/vectortile.md +10 -0
- package/docs/api/m3d/image/layer_control_1.png +0 -0
- package/docs/api/m3d/image/layer_control_2.png +0 -0
- package/docs/api/m3d/image/layer_control_3.png +0 -0
- package/docs/api/m3d/m3d.md +13 -2
- package/docs/api/service/comprehensiveQuery/comprehensiveQuery.md +946 -0
- package/docs/api/ui/draw.md +68 -40
- package/docs/api/ui/link.md +8 -1
- package/docs/api/ui/marker.md +19 -1
- package/docs/api/ui/measure.md +82 -10
- package/docs/api/ui/table.md +6 -6
- package/docs/guide/README.md +26 -23
- package/docs/guide/basemap.md +35 -33
- package/docs/guide/markers&popups.md +46 -53
- package/docs/plugin_components/create_storybook.md +241 -0
- package/docs/plugin_components/img.png +0 -0
- package/docs/plugin_components/img_1.png +0 -0
- package/docs/plugin_components/img_10.png +0 -0
- package/docs/plugin_components/img_2.png +0 -0
- package/docs/plugin_components/img_3.png +0 -0
- package/docs/plugin_components/img_4.png +0 -0
- package/docs/plugin_components/img_5.png +0 -0
- package/docs/plugin_components/img_6.png +0 -0
- package/docs/plugin_components/img_7.png +0 -0
- package/docs/plugin_components/img_8.png +0 -0
- package/docs/version/diff.md +4 -4
- package/docs/version/version.md +81 -0
- package/package.json +5 -5
- package/src/cdn/cdn_component.js +62 -0
- package/src/component.js +20 -2
- package/src/components/Analysis/Aspect.vue +318 -0
- package/src/components/Analysis/Contour.vue +257 -0
- package/src/components/Analysis/CutFill.vue +581 -0
- package/src/components/Analysis/DynamicCutting.vue +98 -59
- package/src/components/Analysis/DynamicSection.vue +494 -0
- package/src/components/Analysis/Excavate.vue +133 -87
- package/src/components/Analysis/Flood.vue +395 -487
- package/src/components/Analysis/Flood.vue-- +630 -0
- package/src/components/Analysis/HeightLimited.vue +66 -47
- package/src/components/Analysis/ModelFlatten.vue +2 -2
- package/src/components/Analysis/Profile.vue +503 -0
- package/src/components/Analysis/Shadow.vue +220 -309
- package/src/components/Analysis/Sightline.vue +393 -375
- package/src/components/Analysis/SkyLine.vue +283 -93
- package/src/components/Analysis/Slope.vue +317 -0
- package/src/components/Analysis/Viewshed.vue +806 -373
- package/src/components/Analysis/skyline2dChartOptions.js +66 -0
- package/src/components/DataSource/Geojson/GeoJsonDataSource.vue +201 -3
- package/src/components/Layer/GeoJSON/GeoJsonLayer.vue +345 -0
- package/src/components/Layer/IGServer/IgsFeatureLayer.vue +227 -0
- package/src/components/Layer/Marker/DynamicMarkerLayer.vue +487 -0
- package/src/components/Layer/Marker/Marker3dPro.vue +196 -0
- package/src/components/Layer/Marker/Marker3dSetPro.vue +67 -0
- package/src/components/Layer/VectorTile/VectorTileLayer.vue +117 -33
- package/src/components/Layer/VectorTile/VectorTileOptions.js +1 -1
- package/src/components/M3D/3DTilesetOptions.js +23 -1
- package/src/components/M3D/G3D.vue +150 -0
- package/src/components/M3D/M3d.vue +142 -32
- package/src/components/M3D/M3dSet.vue +118 -0
- package/src/components/M3D/M3dType.js +24 -0
- package/src/components/Overlay/Mapv3dLayer.vue +2 -0
- package/src/components/Overlay/ParticleEffects.vue +545 -0
- package/src/components/Overlay/mapv/MapvBaseLayer.js +351 -172
- package/src/components/Overlay/mapv/MapvLayer.js +372 -324
- package/src/components/Overlay/mapv/SuperCluster.js +611 -0
- package/src/components/Overlay/themeLayer/heater/CesiumHeater.vue +152 -0
- package/src/components/Overlay/themeLayer/heater/MapvHeater.vue +161 -0
- package/src/components/UI/Controls/Draw/Draw.vue +320 -92
- package/src/components/UI/Controls/Legend/Legend.vue +55 -51
- package/src/components/UI/Controls/Link/Link.vue +59 -37
- package/src/components/UI/Controls/Measure/Measure.vue +75 -33
- package/src/components/UI/Controls/Measure/components/MeasureResult.vue +71 -0
- package/src/components/UI/Controls/Measure/components/MeasureSetting.vue +63 -0
- package/src/components/UI/Controls/Measure/components/MeasureTool.vue +155 -0
- package/src/components/UI/Geojson/Popup.vue +101 -0
- package/src/components/UI/Marker/Marker.vue +185 -48
- package/src/components/UI/Popup/Popup.vue +21 -64
- package/src/components/Utils/common/color-util.js +159 -0
- package/src/components/Utils/util.js +311 -231
- package/src/components/WebGlobe/manager.js +81 -3
- package/src/components/WebGlobe/mixins/withPrivateMethods.js +4 -2
- package/src/components/WebGlobe/util.js +173 -0
- package/src/components/service/comprehensive-query/ComprehensiveQuery.vue +156 -0
- package/src/components/service/comprehensive-query/PlaceNameCesium.vue +102 -0
- package/src/components/service/comprehensive-query/util/catalog/document.js +626 -0
- package/src/components/service/comprehensive-query/util/feature/arcgis-feature-query.js +448 -0
- package/src/components/service/comprehensive-query/util/feature/feature-convert.js +408 -0
- package/src/components/service/comprehensive-query/util/feature/feature-edit.js +50 -0
- package/src/components/service/comprehensive-query/util/feature/feature-geojson.js +100 -0
- package/src/components/service/comprehensive-query/util/feature/feature-query.js +723 -0
- package/src/components/service/comprehensive-query/util/feature/feature.js +1 -0
- package/src/components/service/comprehensive-query/util/feature/index.js +9 -0
- package/src/components/service/comprehensive-query/util/objects/geometry.js +58 -0
- package/src/components/Overlay/Mapv.vue +0 -142
- package/src/components/Overlay/MapvHeater.vue +0 -98
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<mapgis-3d-marker-set-pro
|
|
4
|
+
:vue-key="vueKey"
|
|
5
|
+
:markers="markers"
|
|
6
|
+
@mouseenter="mouseEnterEvent"
|
|
7
|
+
@mouseleave="mouseLeaveEvent"
|
|
8
|
+
@popupload="popupLoad"
|
|
9
|
+
>
|
|
10
|
+
<template slot="popup" slot-scope="slotProps">
|
|
11
|
+
<slot name="popup" v-bind="slotProps"></slot>
|
|
12
|
+
</template>
|
|
13
|
+
</mapgis-3d-marker-set-pro>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
16
|
+
|
|
17
|
+
<script>
|
|
18
|
+
import { Style } from "@mapgis/webclient-es6-service";
|
|
19
|
+
import VueOptions from "../../Base/Vue/VueOptions";
|
|
20
|
+
import Mapgis3dMarkerSetPro from "./Marker3dSetPro.vue";
|
|
21
|
+
import * as turfjs from "@turf/turf";
|
|
22
|
+
|
|
23
|
+
const { MarkerStyle, LineStyle, PointStyle, FillStyle } = Style;
|
|
24
|
+
const DefaultActiveImagePlotting =
|
|
25
|
+
"data:image/png;base64,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";
|
|
26
|
+
const DefaultInactiveImagePlotting =
|
|
27
|
+
"data:image/png;base64,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";
|
|
28
|
+
|
|
29
|
+
export default {
|
|
30
|
+
name: "mapgis-3d-dynamic-marker-layer",
|
|
31
|
+
components: { Mapgis3dMarkerSetPro },
|
|
32
|
+
inject: ["Cesium", "CesiumZondy", "webGlobe"],
|
|
33
|
+
props: {
|
|
34
|
+
...VueOptions,
|
|
35
|
+
data: {
|
|
36
|
+
type: [Object, String],
|
|
37
|
+
required: true
|
|
38
|
+
},
|
|
39
|
+
layerStyle: {
|
|
40
|
+
type: Object,
|
|
41
|
+
default: () => {
|
|
42
|
+
return new MarkerStyle({
|
|
43
|
+
symbol: DefaultInactiveImagePlotting
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
highlight: {
|
|
48
|
+
type: Boolean,
|
|
49
|
+
default: true
|
|
50
|
+
},
|
|
51
|
+
highlightStyle: {
|
|
52
|
+
type: Object,
|
|
53
|
+
default: () => {
|
|
54
|
+
return {
|
|
55
|
+
enableHoverMarker: true,
|
|
56
|
+
enableHoverFeature: true,
|
|
57
|
+
marker: new MarkerStyle({
|
|
58
|
+
symbol: DefaultActiveImagePlotting
|
|
59
|
+
}),
|
|
60
|
+
point: new PointStyle(),
|
|
61
|
+
line: new LineStyle(),
|
|
62
|
+
polygon: new FillStyle()
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
idField: {
|
|
67
|
+
type: String,
|
|
68
|
+
default: "fid"
|
|
69
|
+
},
|
|
70
|
+
selects: {
|
|
71
|
+
type: Array,
|
|
72
|
+
default: () => []
|
|
73
|
+
},
|
|
74
|
+
filterWithMap: {
|
|
75
|
+
type: Boolean,
|
|
76
|
+
default: false
|
|
77
|
+
},
|
|
78
|
+
fitBound: {
|
|
79
|
+
type: Object,
|
|
80
|
+
default: () => {
|
|
81
|
+
return {};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
data() {
|
|
86
|
+
return {
|
|
87
|
+
markers: [],
|
|
88
|
+
currentLayer: null
|
|
89
|
+
};
|
|
90
|
+
},
|
|
91
|
+
watch: {
|
|
92
|
+
data: {
|
|
93
|
+
handler(next) {
|
|
94
|
+
// this.parseData(next);
|
|
95
|
+
this.unmount();
|
|
96
|
+
this.mount();
|
|
97
|
+
},
|
|
98
|
+
deep: true
|
|
99
|
+
},
|
|
100
|
+
selects: {
|
|
101
|
+
handler(markers, prevMarkers = []) {
|
|
102
|
+
prevMarkers.forEach(this.onClearHighlightFeature);
|
|
103
|
+
markers.forEach(this.onHighlightFeature);
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
fitBound(nV) {
|
|
107
|
+
if (nV) {
|
|
108
|
+
this.zoomTo(nV);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
selectionBound(nV) {
|
|
112
|
+
this.zoomOrPanTo(nV);
|
|
113
|
+
},
|
|
114
|
+
center(nV) {
|
|
115
|
+
this.zoomToCartesian3(nV[0], nV[1]);
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
mounted() {
|
|
119
|
+
this.mount();
|
|
120
|
+
},
|
|
121
|
+
destroyed() {
|
|
122
|
+
this.unmount();
|
|
123
|
+
this.analysisManager = null;
|
|
124
|
+
},
|
|
125
|
+
methods: {
|
|
126
|
+
mount() {
|
|
127
|
+
this.parseData();
|
|
128
|
+
|
|
129
|
+
const vm = this;
|
|
130
|
+
const { CesiumZondy, vueKey, vueIndex, data } = this;
|
|
131
|
+
const webGlobe = this.CesiumZondy.getWebGlobe(vueKey) || this.webGlobe;
|
|
132
|
+
const { viewer } = webGlobe;
|
|
133
|
+
let analysisManager = new CesiumZondy.Manager.AnalysisManager({
|
|
134
|
+
viewer: viewer
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
let promise = new Cesium.GeoJsonDataSource.load(data);
|
|
138
|
+
promise.then(function(dataSource) {
|
|
139
|
+
viewer.dataSources.add(dataSource);
|
|
140
|
+
vm.changeColor(dataSource);
|
|
141
|
+
CesiumZondy.GeojsonManager.addSource(vueKey, vueIndex, dataSource, {
|
|
142
|
+
analysisManager: analysisManager
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
},
|
|
146
|
+
unmount() {
|
|
147
|
+
const { webGlobe, vueKey, vueIndex } = this;
|
|
148
|
+
const vm = this;
|
|
149
|
+
let CesiumZondy = this.CesiumZondy || window.CesiumZondy;
|
|
150
|
+
const { viewer } = webGlobe;
|
|
151
|
+
const { dataSources } = viewer;
|
|
152
|
+
let find = CesiumZondy.GeojsonManager.findSource(vueKey, vueIndex);
|
|
153
|
+
if (find) {
|
|
154
|
+
if (dataSources) {
|
|
155
|
+
dataSources.remove(find.source, true);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
CesiumZondy.GeojsonManager.deleteSource(vueKey, vueIndex);
|
|
159
|
+
this.$emit("unload", this);
|
|
160
|
+
},
|
|
161
|
+
parseData(data) {
|
|
162
|
+
data = data || this.data;
|
|
163
|
+
const vm = this;
|
|
164
|
+
if (typeof data === "string") {
|
|
165
|
+
fetch(data)
|
|
166
|
+
.then(function(response) {
|
|
167
|
+
return response.json();
|
|
168
|
+
})
|
|
169
|
+
.then(function(resdata) {
|
|
170
|
+
vm.parseMarker(resdata);
|
|
171
|
+
});
|
|
172
|
+
} else {
|
|
173
|
+
vm.parseMarker(data);
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
parseMarker(geojson) {
|
|
177
|
+
const { idField, layerStyle } = this;
|
|
178
|
+
if (!geojson || !geojson.features) {
|
|
179
|
+
console.warn("请输入标准的GEOJSON格式,目前只支持FeatureCollection");
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
let markers = geojson.features.map((f, i) => {
|
|
183
|
+
let coordinates = turfjs.center(f).geometry.coordinates;
|
|
184
|
+
let id =
|
|
185
|
+
f.properties && f.properties[idField] ? f.properties[idField] : i;
|
|
186
|
+
let marker = {
|
|
187
|
+
fid: id,
|
|
188
|
+
coordinates,
|
|
189
|
+
img: layerStyle.symbol,
|
|
190
|
+
properties: f.properties,
|
|
191
|
+
feature: f
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
return marker;
|
|
195
|
+
});
|
|
196
|
+
this.markers = markers;
|
|
197
|
+
},
|
|
198
|
+
getMarker(fid) {
|
|
199
|
+
return this.markers.find(marker => marker.fid === fid);
|
|
200
|
+
},
|
|
201
|
+
isSelectedMarker(id) {
|
|
202
|
+
return this.selects.findIndex(idField => idField === id) !== -1;
|
|
203
|
+
},
|
|
204
|
+
changeFilterWithMap() {
|
|
205
|
+
const { webGlobe } = this;
|
|
206
|
+
if (!this.filterWithMap) {
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const rectangle = webGlobe.viewer.camera.computeViewRectangle();
|
|
210
|
+
const bounds = {
|
|
211
|
+
xmin: (rectangle.west / Math.PI) * 180,
|
|
212
|
+
ymin: (rectangle.south / Math.PI) * 180,
|
|
213
|
+
xmax: (rectangle.east / Math.PI) * 180,
|
|
214
|
+
ymax: (rectangle.north / Math.PI) * 180
|
|
215
|
+
};
|
|
216
|
+
this.$emit("map-bound-change", bounds);
|
|
217
|
+
},
|
|
218
|
+
zoomToCartesian3(x, y) {
|
|
219
|
+
const { Cesium, webGlobe } = this;
|
|
220
|
+
const destination = Cesium.Cartesian3.fromDegrees(
|
|
221
|
+
x,
|
|
222
|
+
y,
|
|
223
|
+
webGlobe.viewer.camera.positionCartographic.height
|
|
224
|
+
);
|
|
225
|
+
webGlobe.viewer.camera.flyTo({ destination });
|
|
226
|
+
},
|
|
227
|
+
zoomTo(bound) {
|
|
228
|
+
const { Cesium, webGlobe } = this;
|
|
229
|
+
const { xmin, ymin, xmax, ymax } = bound;
|
|
230
|
+
const destination = new Cesium.Rectangle.fromDegrees(
|
|
231
|
+
xmin,
|
|
232
|
+
ymin,
|
|
233
|
+
xmax,
|
|
234
|
+
ymax
|
|
235
|
+
);
|
|
236
|
+
webGlobe.viewer.camera.flyTo({ destination });
|
|
237
|
+
},
|
|
238
|
+
zoomOrPanTo({ xmin, ymin, xmax, ymax }) {
|
|
239
|
+
const {
|
|
240
|
+
xmin: b_xmin,
|
|
241
|
+
ymin: b_ymin,
|
|
242
|
+
xmax: b_xmax,
|
|
243
|
+
ymax: b_ymax
|
|
244
|
+
} = this.getViewExtend();
|
|
245
|
+
// 先查看是否在地图范围内
|
|
246
|
+
if (xmin > b_xmin && ymin > b_ymin && xmax < b_xmax && ymax < b_ymax) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
// 然后查看两个矩形的范围大小,如果选择集的范围较当前大,需要做缩放
|
|
250
|
+
if (xmax - xmin > b_xmax - b_xmin || ymax - ymin > b_ymax - b_ymin) {
|
|
251
|
+
this.zoomTo({ xmin, ymin, xmax, ymax });
|
|
252
|
+
} else {
|
|
253
|
+
this.zoomToCartesian3((xmin + xmax) / 2, (ymin + ymax) / 2);
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
mouseEnterEvent(e, id) {
|
|
257
|
+
// 高亮要素
|
|
258
|
+
const marker = this.getMarker(id);
|
|
259
|
+
const { highlightStyle } = this;
|
|
260
|
+
const {
|
|
261
|
+
enableHoverMarker = true,
|
|
262
|
+
enableHoverFeature = true
|
|
263
|
+
} = highlightStyle;
|
|
264
|
+
|
|
265
|
+
if (marker) {
|
|
266
|
+
enableHoverFeature && this.highlightFeature(marker);
|
|
267
|
+
enableHoverMarker && this.highlightMarker(marker);
|
|
268
|
+
}
|
|
269
|
+
},
|
|
270
|
+
mouseLeaveEvent(e, id) {
|
|
271
|
+
const marker = this.getMarker(id);
|
|
272
|
+
if (marker) {
|
|
273
|
+
this.clearHighlightFeature(marker);
|
|
274
|
+
this.clearHighlightMarker(marker);
|
|
275
|
+
this.stopDisplay();
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
popupLoad(markerId) {
|
|
279
|
+
this.$emit("popupload", markerId);
|
|
280
|
+
},
|
|
281
|
+
changeColor(dataSource) {
|
|
282
|
+
if (!dataSource) return;
|
|
283
|
+
const { Cesium, highlightStyle } = this;
|
|
284
|
+
let entities = dataSource.entities.values;
|
|
285
|
+
const vm = this;
|
|
286
|
+
const { point } = highlightStyle;
|
|
287
|
+
for (let i = 0; i < entities.length; i++) {
|
|
288
|
+
let entity = entities[i];
|
|
289
|
+
if (entity.billboard) {
|
|
290
|
+
entity.billboard.show = false;
|
|
291
|
+
const style = point.toCesiumStyle(Cesium);
|
|
292
|
+
const { material, radius, outline } = style;
|
|
293
|
+
entity.ellipse = new Cesium.EllipseGraphics({
|
|
294
|
+
semiMajorAxis: radius,
|
|
295
|
+
semiMinorAxis: radius,
|
|
296
|
+
outline: outline,
|
|
297
|
+
material: material
|
|
298
|
+
});
|
|
299
|
+
entity.ellipse.show = false;
|
|
300
|
+
} else if (entity.polyline) {
|
|
301
|
+
entity.polyline.show = false;
|
|
302
|
+
} else if (entity.polygon) {
|
|
303
|
+
entity.polygon.show = false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
getViewExtend() {
|
|
308
|
+
let { vueKey, webGlobe } = this;
|
|
309
|
+
const params = {};
|
|
310
|
+
webGlobe = this.CesiumZondy.getWebGlobe(vueKey) || webGlobe;
|
|
311
|
+
const extend = webGlobe.viewer.camera.computeViewRectangle();
|
|
312
|
+
if (typeof extend === "undefined") {
|
|
313
|
+
// 2D下会可能拾取不到坐标,extend返回undefined,所以做以下转换
|
|
314
|
+
const canvas = webGlobe.viewer.scene.canvas;
|
|
315
|
+
// canvas左上角坐标转2d坐标
|
|
316
|
+
const upperLeft = new this.Cesium.Cartesian2(0, 0);
|
|
317
|
+
// canvas右下角坐标转2d坐标
|
|
318
|
+
const lowerRight = new this.Cesium.Cartesian2(
|
|
319
|
+
canvas.clientWidth,
|
|
320
|
+
canvas.clientHeight
|
|
321
|
+
);
|
|
322
|
+
|
|
323
|
+
const ellipsoid = webGlobe.viewer.scene.globe.ellipsoid;
|
|
324
|
+
// 2D转3D世界坐标
|
|
325
|
+
const upperLeft3 = webGlobe.viewer.camera.pickEllipsoid(
|
|
326
|
+
upperLeft,
|
|
327
|
+
ellipsoid
|
|
328
|
+
);
|
|
329
|
+
|
|
330
|
+
// 2D转3D世界坐标
|
|
331
|
+
const lowerRight3 = webGlobe.viewer.camera.pickEllipsoid(
|
|
332
|
+
lowerRight,
|
|
333
|
+
ellipsoid
|
|
334
|
+
);
|
|
335
|
+
|
|
336
|
+
// 3D世界坐标转弧度
|
|
337
|
+
const upperLeftCartographic = ellipsoid.cartesianToCartographic(
|
|
338
|
+
upperLeft3
|
|
339
|
+
);
|
|
340
|
+
// 3D世界坐标转弧度
|
|
341
|
+
const lowerRightCartographic = ellipsoid.cartesianToCartographic(
|
|
342
|
+
lowerRight3
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
// 弧度转经纬度
|
|
346
|
+
const xmin = this.Cesium.Math.toDegrees(
|
|
347
|
+
upperLeftCartographic.longitude
|
|
348
|
+
);
|
|
349
|
+
// 弧度转经纬度
|
|
350
|
+
const xmax = this.Cesium.Math.toDegrees(
|
|
351
|
+
lowerRightCartographic.longitude
|
|
352
|
+
);
|
|
353
|
+
|
|
354
|
+
// 弧度转经纬度
|
|
355
|
+
const ymin = this.Cesium.Math.toDegrees(
|
|
356
|
+
lowerRightCartographic.latitude
|
|
357
|
+
);
|
|
358
|
+
// 弧度转经纬度
|
|
359
|
+
const ymax = this.Cesium.Math.toDegrees(upperLeftCartographic.latitude);
|
|
360
|
+
|
|
361
|
+
params.xmin = xmin;
|
|
362
|
+
params.xmax = xmax;
|
|
363
|
+
params.ymin = ymin;
|
|
364
|
+
params.ymax = ymax;
|
|
365
|
+
} else {
|
|
366
|
+
// 3D获取方式
|
|
367
|
+
params.xmax = this.Cesium.Math.toDegrees(extend.east);
|
|
368
|
+
params.ymax = this.Cesium.Math.toDegrees(extend.north);
|
|
369
|
+
|
|
370
|
+
params.xmin = this.Cesium.Math.toDegrees(extend.west);
|
|
371
|
+
params.ymin = this.Cesium.Math.toDegrees(extend.south);
|
|
372
|
+
}
|
|
373
|
+
// 返回屏幕所在经纬度范围
|
|
374
|
+
return params;
|
|
375
|
+
},
|
|
376
|
+
highlightFeature(marker) {
|
|
377
|
+
const vm = this;
|
|
378
|
+
const { vueKey, vueIndex } = this;
|
|
379
|
+
const { webGlobe, Cesium, CesiumZondy } = this;
|
|
380
|
+
const { layerStyle, highlightStyle, idField } = this;
|
|
381
|
+
const { point, line, polygon } = layerStyle;
|
|
382
|
+
const hpolygon = highlightStyle.polygon;
|
|
383
|
+
const hline = highlightStyle.line;
|
|
384
|
+
const hpoint = highlightStyle.point;
|
|
385
|
+
|
|
386
|
+
let find = CesiumZondy.GeojsonManager.findSource(vueKey, vueIndex);
|
|
387
|
+
if (!find) return;
|
|
388
|
+
for (let i = 0; i < find.source.entities.values.length; i++) {
|
|
389
|
+
let entity = find.source.entities.values[i];
|
|
390
|
+
if (entity.properties[idField] == marker.feature.properties.fid) {
|
|
391
|
+
if (entity.ellipse) {
|
|
392
|
+
const style = hpoint.toCesiumStyle(Cesium);
|
|
393
|
+
const { material, radius, outline } = style;
|
|
394
|
+
entity.ellipse.show = true;
|
|
395
|
+
entity.ellipse = new Cesium.EllipseGraphics({
|
|
396
|
+
semiMajorAxis: radius,
|
|
397
|
+
semiMinorAxis: radius,
|
|
398
|
+
outline: outline,
|
|
399
|
+
material: material
|
|
400
|
+
});
|
|
401
|
+
} else if (entity.polyline) {
|
|
402
|
+
const style = hline.toCesiumStyle(Cesium);
|
|
403
|
+
const { material, width } = style;
|
|
404
|
+
entity.polyline.show = true;
|
|
405
|
+
entity.polyline.material = material;
|
|
406
|
+
entity.polyline.width = width;
|
|
407
|
+
} else if (entity.polygon) {
|
|
408
|
+
const style = hpolygon.toCesiumStyle(Cesium);
|
|
409
|
+
const { material, outlineColor } = style;
|
|
410
|
+
entity.polygon.show = true;
|
|
411
|
+
entity.polygon.material = material;
|
|
412
|
+
entity.polygon.outlineColor = outlineColor;
|
|
413
|
+
}
|
|
414
|
+
} else {
|
|
415
|
+
if (entity.ellipse) {
|
|
416
|
+
entity.ellipse.show = false;
|
|
417
|
+
} else if (entity.polyline) {
|
|
418
|
+
entity.polyline.show = false;
|
|
419
|
+
} else if (entity.polygon) {
|
|
420
|
+
entity.polygon.show = false;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
/* if (featureGeoJSON.features[0].geometry.type === "3DPolygon") {
|
|
425
|
+
const { source } = this.sceneController.findSource(
|
|
426
|
+
featureGeoJSON.features[0].properties.specialLayerId
|
|
427
|
+
);
|
|
428
|
+
if (source && source.length > 0) {
|
|
429
|
+
this.stopDisplay();
|
|
430
|
+
this.currentLayer = [source[0]];
|
|
431
|
+
const idList = [featureGeoJSON.features[0].properties.FID];
|
|
432
|
+
const options = {
|
|
433
|
+
// 高亮颜色
|
|
434
|
+
color: new this.Cesium.Color.fromCssColorString(
|
|
435
|
+
this.highlightStyle.feature.reg.color
|
|
436
|
+
),
|
|
437
|
+
// 高亮模式:REPLACE为替换
|
|
438
|
+
colorBlendMode: this.Cesium.Cesium3DTileColorBlendMode.REPLACE
|
|
439
|
+
};
|
|
440
|
+
// 开始闪烁查找到的模型
|
|
441
|
+
this.analysisManager.startCustomDisplay(
|
|
442
|
+
this.currentLayer,
|
|
443
|
+
idList,
|
|
444
|
+
options
|
|
445
|
+
);
|
|
446
|
+
}
|
|
447
|
+
} */
|
|
448
|
+
},
|
|
449
|
+
stopDisplay() {
|
|
450
|
+
if (this.currentLayer) {
|
|
451
|
+
this.analysisManager.stopCustomDisplay(this.currentLayer);
|
|
452
|
+
this.currentLayer = null;
|
|
453
|
+
}
|
|
454
|
+
},
|
|
455
|
+
clearHighlightFeature(marker) {
|
|
456
|
+
const { CesiumZondy, vueKey, vueIndex, layerStyle } = this;
|
|
457
|
+
let dataSource = CesiumZondy.GeojsonManager.findSource(vueKey, vueIndex);
|
|
458
|
+
this.changeColor(dataSource.source);
|
|
459
|
+
},
|
|
460
|
+
highlightMarker(marker) {
|
|
461
|
+
marker.img = this.highlightStyle.marker.symbol;
|
|
462
|
+
},
|
|
463
|
+
clearHighlightMarker(marker) {
|
|
464
|
+
if (!this.isSelectedMarker(marker.fid)) {
|
|
465
|
+
marker.img = this.layerStyle.symbol;
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
onClearHighlightFeature(fid) {
|
|
469
|
+
const marker = this.getMarker(fid);
|
|
470
|
+
this.clearHighlightMarker(marker);
|
|
471
|
+
// this.stopDisplay();
|
|
472
|
+
},
|
|
473
|
+
onHighlightFeature(fid) {
|
|
474
|
+
const marker = this.getMarker(fid);
|
|
475
|
+
let bbox = turfjs.bbox(marker.feature);
|
|
476
|
+
let bound = {
|
|
477
|
+
xmin: bbox[0],
|
|
478
|
+
ymin: bbox[1],
|
|
479
|
+
xmax: bbox[2],
|
|
480
|
+
ymax: bbox[3]
|
|
481
|
+
};
|
|
482
|
+
this.zoomOrPanTo(bound);
|
|
483
|
+
this.highlightMarker(marker);
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
};
|
|
487
|
+
</script>
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<mapgis-3d-marker
|
|
3
|
+
:longitude="popupPosition.longitude"
|
|
4
|
+
:latitude="popupPosition.latitude"
|
|
5
|
+
:height="popupPosition.height"
|
|
6
|
+
:iconUrl="img"
|
|
7
|
+
:fid="marker.fid"
|
|
8
|
+
:changeEvent="changeEvent"
|
|
9
|
+
:farDist="200000000"
|
|
10
|
+
@mouseEnter="mouseOver"
|
|
11
|
+
@mouseLeave="mouseOut"
|
|
12
|
+
>
|
|
13
|
+
<mapgis-3d-popup
|
|
14
|
+
:vue-key="vueKey"
|
|
15
|
+
:position="{
|
|
16
|
+
longitude: popupPosition.longitude,
|
|
17
|
+
latitude: popupPosition.latitude,
|
|
18
|
+
height: popupPosition.height
|
|
19
|
+
}"
|
|
20
|
+
:visible="showPopup"
|
|
21
|
+
@change="changePopup"
|
|
22
|
+
v-on:load="bindEvent"
|
|
23
|
+
:forceRender="true"
|
|
24
|
+
>
|
|
25
|
+
<div slot="default">
|
|
26
|
+
<slot
|
|
27
|
+
name="popup"
|
|
28
|
+
:marker="marker"
|
|
29
|
+
:field-configs="fieldConfigs"
|
|
30
|
+
:property-keys="propertyKeys"
|
|
31
|
+
>
|
|
32
|
+
<mapgis-ui-list
|
|
33
|
+
item-layout="horizontal"
|
|
34
|
+
:data-source="propertyKeys"
|
|
35
|
+
size="small"
|
|
36
|
+
class="table-marker"
|
|
37
|
+
>
|
|
38
|
+
<mapgis-ui-list-item
|
|
39
|
+
slot="renderItem"
|
|
40
|
+
slot-scope="item"
|
|
41
|
+
class="table-marker-item"
|
|
42
|
+
>
|
|
43
|
+
<div style="width: 130px" :title="propertyName(item)">
|
|
44
|
+
{{ propertyName(item) }}
|
|
45
|
+
</div>
|
|
46
|
+
<div style="width: 170px" :title="marker.properties[item]">
|
|
47
|
+
{{ marker.properties[item] }}
|
|
48
|
+
</div>
|
|
49
|
+
</mapgis-ui-list-item>
|
|
50
|
+
</mapgis-ui-list>
|
|
51
|
+
</slot>
|
|
52
|
+
</div>
|
|
53
|
+
</mapgis-3d-popup>
|
|
54
|
+
</mapgis-3d-marker>
|
|
55
|
+
</template>
|
|
56
|
+
|
|
57
|
+
<script>
|
|
58
|
+
/**
|
|
59
|
+
* cesium标注,弹出框使用@mapgis/webclient-vue-cesium里的popup
|
|
60
|
+
*/
|
|
61
|
+
export default {
|
|
62
|
+
name: "mapgis-3d-marker-pro",
|
|
63
|
+
inject: ["Cesium", "CesiumZondy", "webGlobe"],
|
|
64
|
+
props: {
|
|
65
|
+
vueKey: String,
|
|
66
|
+
marker: {
|
|
67
|
+
type: Object,
|
|
68
|
+
required: true
|
|
69
|
+
},
|
|
70
|
+
fieldConfigs: {
|
|
71
|
+
type: Array,
|
|
72
|
+
required: false,
|
|
73
|
+
default: () => []
|
|
74
|
+
},
|
|
75
|
+
// 当前显示弹出框的标注id
|
|
76
|
+
currentMarkerId: {
|
|
77
|
+
type: String,
|
|
78
|
+
required: false
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
data() {
|
|
82
|
+
return {
|
|
83
|
+
showPopup: false,
|
|
84
|
+
entityNames: []
|
|
85
|
+
};
|
|
86
|
+
},
|
|
87
|
+
computed: {
|
|
88
|
+
img() {
|
|
89
|
+
return this.marker.img;
|
|
90
|
+
},
|
|
91
|
+
popupPosition() {
|
|
92
|
+
if (!this.marker) {
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
const { coordinates } = this.marker;
|
|
96
|
+
const height = coordinates.length > 2 ? Number(coordinates[2]) : 0;
|
|
97
|
+
const position = {
|
|
98
|
+
longitude: Number(coordinates[0]),
|
|
99
|
+
latitude: Number(coordinates[1]),
|
|
100
|
+
height: height
|
|
101
|
+
};
|
|
102
|
+
return position;
|
|
103
|
+
},
|
|
104
|
+
// 根据filedConfigs做一个过滤,去除不可见的
|
|
105
|
+
propertyKeys() {
|
|
106
|
+
const keys = Object.keys(this.marker.properties);
|
|
107
|
+
return keys.filter(key => {
|
|
108
|
+
const config = this.fieldConfigs.find(config => config.name === key);
|
|
109
|
+
|
|
110
|
+
if (
|
|
111
|
+
config &&
|
|
112
|
+
Object.hasOwnProperty.call(config, "visible") &&
|
|
113
|
+
!config.visible
|
|
114
|
+
) {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return true;
|
|
119
|
+
});
|
|
120
|
+
},
|
|
121
|
+
propertyName() {
|
|
122
|
+
return function(key) {
|
|
123
|
+
const config = this.fieldConfigs.find(config => config.name === key);
|
|
124
|
+
|
|
125
|
+
if (config && Object.hasOwnProperty.call(config, "title")) {
|
|
126
|
+
return config.title;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return key;
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
watch: {
|
|
134
|
+
// 更换图片,更换地图上的标注
|
|
135
|
+
img: {
|
|
136
|
+
deep: true,
|
|
137
|
+
handler() {
|
|
138
|
+
this.updateMarker();
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
currentMarkerId: {
|
|
142
|
+
deep: true,
|
|
143
|
+
immediate: true,
|
|
144
|
+
handler() {
|
|
145
|
+
// 当前显示弹出框的标注与组件内的id不一致时,隐藏弹出框
|
|
146
|
+
if (this.currentMarkerId !== this.marker.fid) {
|
|
147
|
+
this.showPopup = false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
mounted() {
|
|
153
|
+
const webGlobe = this.CesiumZondy.getWebGlobe(this.vueKey) || this.webGlobe;
|
|
154
|
+
this.updateMarker();
|
|
155
|
+
},
|
|
156
|
+
beforeDestroy() {},
|
|
157
|
+
methods: {
|
|
158
|
+
changePopup(val) {
|
|
159
|
+
this.showPopup = val;
|
|
160
|
+
if (!val) {
|
|
161
|
+
this.$emit("change", "");
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
bindEvent() {
|
|
165
|
+
this.$emit("popupload", this.marker.fid);
|
|
166
|
+
},
|
|
167
|
+
updateMarker() {
|
|
168
|
+
/* let marker = { ...this.marker };
|
|
169
|
+
marker.name = marker.fid;
|
|
170
|
+
marker.center = marker.coordinates; */
|
|
171
|
+
},
|
|
172
|
+
changeEvent(enable) {
|
|
173
|
+
this.showPopup = enable;
|
|
174
|
+
},
|
|
175
|
+
mouseOver(event) {
|
|
176
|
+
const { changeEvent, fid } = event;
|
|
177
|
+
if (changeEvent) {
|
|
178
|
+
changeEvent(true);
|
|
179
|
+
} else {
|
|
180
|
+
this.showPopup = true;
|
|
181
|
+
}
|
|
182
|
+
this.$emit("marker-id", fid);
|
|
183
|
+
this.$emit("mouseenter", event, fid);
|
|
184
|
+
},
|
|
185
|
+
mouseOut(event) {
|
|
186
|
+
const { changeEvent, fid } = event;
|
|
187
|
+
if (changeEvent) {
|
|
188
|
+
changeEvent(false);
|
|
189
|
+
} else {
|
|
190
|
+
this.showPopup = false;
|
|
191
|
+
}
|
|
192
|
+
this.$emit("mouseleave", event, fid);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
};
|
|
196
|
+
</script>
|