|
|
@ -2,64 +2,64 @@ |
|
|
|
const createXyzLayer = (data) => |
|
|
|
new sycim.XyzLayer(data.id, { |
|
|
|
...data, |
|
|
|
maximumLevel: data.maximumLevel || 22 |
|
|
|
maximumLevel: data.maximumLevel || 22, |
|
|
|
}); |
|
|
|
|
|
|
|
const layerTypeEnum = { |
|
|
|
'011100': 'BAIDU', |
|
|
|
'012000': 'PRIMITIVE', |
|
|
|
'013000': 'TILESET', |
|
|
|
'014000': 'XYZ', |
|
|
|
'021102': 'ARCGIS_DYNAMIC', |
|
|
|
'030100': 'WMTS', |
|
|
|
'030200': 'WMS', |
|
|
|
'030300': 'WFS', |
|
|
|
'030400': 'GEOJSON', |
|
|
|
'040003': 'WFS', |
|
|
|
'050100': 'TDTWMTS', |
|
|
|
'060100': 'XYZ', |
|
|
|
'070100': 'BINGMAP', |
|
|
|
'080100': 'S3M', |
|
|
|
'081100': 'SUPERMAP_REST' |
|
|
|
"011100": "BAIDU", |
|
|
|
"012000": "PRIMITIVE", |
|
|
|
"013000": "TILESET", |
|
|
|
"014000": "XYZ", |
|
|
|
"021102": "ARCGIS_DYNAMIC", |
|
|
|
"030100": "WMTS", |
|
|
|
"030200": "WMS", |
|
|
|
"030300": "WFS", |
|
|
|
"030400": "GEOJSON", |
|
|
|
"040003": "WFS", |
|
|
|
"050100": "TDTWMTS", |
|
|
|
"060100": "XYZ", |
|
|
|
"070100": "BINGMAP", |
|
|
|
"080100": "S3M", |
|
|
|
"081100": "SUPERMAP_REST", |
|
|
|
}; |
|
|
|
|
|
|
|
// 图层响应动作
|
|
|
|
const layerActions = { |
|
|
|
'011100': (data) => |
|
|
|
"011100": (data) => |
|
|
|
new sycim.BaiduLayer(data.id, { |
|
|
|
...data, |
|
|
|
style: data.layerTable, |
|
|
|
crs: 'WGS84' |
|
|
|
crs: "WGS84", |
|
|
|
}), |
|
|
|
'012000': (data) => new sycim.PrimitiveLayer(data.id), |
|
|
|
'013000': (data) => new sycim.TilesetLayer(data.id), |
|
|
|
'014000': createXyzLayer, |
|
|
|
'021102': (data) => |
|
|
|
"012000": (data) => new sycim.PrimitiveLayer(data.id), |
|
|
|
"013000": (data) => new sycim.TilesetLayer(data.id), |
|
|
|
"014000": createXyzLayer, |
|
|
|
"021102": (data) => |
|
|
|
new sycim.ArcgisDynamicLayer(data.id, { |
|
|
|
url: data.url |
|
|
|
url: data.url, |
|
|
|
}), |
|
|
|
'030100': (data) => |
|
|
|
"030100": (data) => |
|
|
|
new sycim.WmtsLayer(data.id, { |
|
|
|
...data, |
|
|
|
url: data.url, |
|
|
|
layer: data.layerTable, |
|
|
|
tileMatrixSetID: data.tileMatrixSet, |
|
|
|
style: data.style || '' |
|
|
|
style: data.style || "", |
|
|
|
}), |
|
|
|
'030200': (data) => |
|
|
|
"030200": (data) => |
|
|
|
new sycim.WmsLayer(data.id, { |
|
|
|
...data, |
|
|
|
url: data.url, |
|
|
|
layer: data.layerTable, |
|
|
|
parameters: { |
|
|
|
version: '1.3.0' |
|
|
|
} |
|
|
|
version: "1.3.0", |
|
|
|
}, |
|
|
|
}), |
|
|
|
'030300': async (data) => { |
|
|
|
"030300": async (data) => { |
|
|
|
const options = { |
|
|
|
version: '2.0.0', |
|
|
|
version: "2.0.0", |
|
|
|
TYPENAMES: data.layerTable, |
|
|
|
outputFormat: 'json' |
|
|
|
outputFormat: "json", |
|
|
|
}; |
|
|
|
// if (data.relationStyleId) {
|
|
|
|
// const res = await getLayerStyle(data.relationStyleId);
|
|
|
@ -67,7 +67,7 @@ const layerActions = { |
|
|
|
// }
|
|
|
|
return new sycim.WfsLayer(data.id, data.url, data.layerTable, options); |
|
|
|
}, |
|
|
|
'030400': async (data) => { |
|
|
|
"030400": async (data) => { |
|
|
|
const options = {}; |
|
|
|
// if (data.relationStyleId) {
|
|
|
|
// const res = await getLayerStyle(data.relationStyleId);
|
|
|
@ -75,14 +75,14 @@ const layerActions = { |
|
|
|
// }
|
|
|
|
return new sycim.GeoJsonLayer(data.id, data.url, options); |
|
|
|
}, |
|
|
|
'040003': (data) => |
|
|
|
"040003": (data) => |
|
|
|
new sycim.WfsLayer(data.id, data.url, data.layerTable, { |
|
|
|
cql_filter: data.filter, |
|
|
|
propertyName: '*' |
|
|
|
propertyName: "*", |
|
|
|
}), |
|
|
|
'050100': (data) => { |
|
|
|
"050100": (data) => { |
|
|
|
let url = `${data.proxyUrl}${data.url}`; |
|
|
|
if (!url.includes('?tk=') && data.serviceToken) { |
|
|
|
if (!url.includes("?tk=") && data.serviceToken) { |
|
|
|
url = `${url}?tk=${data.serviceToken}`; |
|
|
|
} |
|
|
|
return new sycim.TdtWmtsLayer(data.id, { |
|
|
@ -91,27 +91,30 @@ const layerActions = { |
|
|
|
layer: data.layerTable, |
|
|
|
tileMatrixSetID: data.tileMatrixSet, |
|
|
|
spatialReference: { |
|
|
|
wkid: data.epsg |
|
|
|
} |
|
|
|
wkid: data.epsg, |
|
|
|
}, |
|
|
|
}); |
|
|
|
}, |
|
|
|
'060100': createXyzLayer, |
|
|
|
'070100': (data) => |
|
|
|
"060100": createXyzLayer, |
|
|
|
"070100": (data) => |
|
|
|
new sycim.BingMapLayer(data.id, { |
|
|
|
...data |
|
|
|
...data, |
|
|
|
}), |
|
|
|
'081100': (data) => |
|
|
|
"081100": (data) => |
|
|
|
// new sycim.SuperMapRestLayer(data.id, {
|
|
|
|
// ...data
|
|
|
|
// })
|
|
|
|
new sycim.SuperMapRestLayer(data.id, { url: data.url, k: data.serviceToken }) |
|
|
|
new sycim.SuperMapRestLayer(data.id, { |
|
|
|
url: data.url, |
|
|
|
k: data.serviceToken, |
|
|
|
}), |
|
|
|
}; |
|
|
|
|
|
|
|
//图层缩放
|
|
|
|
function defaultZoomToLayer(data) { |
|
|
|
const { mapParam } = data; |
|
|
|
if (!mapParam?.tileCenter) return; |
|
|
|
const p = mapParam.tileCenter.split(','); |
|
|
|
const p = mapParam.tileCenter.split(","); |
|
|
|
window.viewer.flyToPosition(new sycim.Position(+p[0], +p[1], 500, 0, -90, 0)); |
|
|
|
} |
|
|
|
|
|
|
@ -131,9 +134,18 @@ const supermapLayer = {}; |
|
|
|
// 超图s3m图层定位
|
|
|
|
function zoomToS3MLayer(data) { |
|
|
|
if (supermapLayer[data.id]) { |
|
|
|
Cesium.Resource.fetchJson(data.url + '/scenes.json').then(function (scenes) { |
|
|
|
let requestScenesUrl = data.url + "/scenes.json"; |
|
|
|
if (data.serviceToken) { |
|
|
|
requestScenesUrl = data.url + "/scenes.json?k=" + data.serviceToken; |
|
|
|
} |
|
|
|
Cesium.Resource.fetchJson(requestScenesUrl).then(function (scenes) { |
|
|
|
let sname = scenes && scenes[0].name; |
|
|
|
Cesium.Resource.fetchJson(data.url + '/scenes/' + sname + '.json').then(function (jsonData) { |
|
|
|
let requestSceneUrl = data.url + "/scenes/" + sname + ".json"; |
|
|
|
if (data.serviceToken) { |
|
|
|
requestSceneUrl = |
|
|
|
data.url + "/scenes/" + sname + ".json?k=" + data.serviceToken; |
|
|
|
} |
|
|
|
Cesium.Resource.fetchJson(requestSceneUrl).then(function (jsonData) { |
|
|
|
var cameraPosition = jsonData.camera; |
|
|
|
var tilt = Cesium.Math.toRadians(cameraPosition.tilt - 90); |
|
|
|
//设置相机位置、视角,便于观察场景
|
|
|
@ -146,53 +158,59 @@ function zoomToS3MLayer(data) { |
|
|
|
orientation: { |
|
|
|
heading: cameraPosition.heading, |
|
|
|
pitch: tilt, |
|
|
|
roll: 0 |
|
|
|
} |
|
|
|
roll: 0, |
|
|
|
}, |
|
|
|
}); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} else { |
|
|
|
alert('请先加载s3m图层'); |
|
|
|
alert("请先加载s3m图层"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 图层缩放响应动作
|
|
|
|
const zoomToLayerActions = { |
|
|
|
'011100': zoomToLayerByType, |
|
|
|
'012000': (data) => { |
|
|
|
"011100": zoomToLayerByType, |
|
|
|
"012000": (data) => { |
|
|
|
// modal
|
|
|
|
const { modelInitPosition } = data; |
|
|
|
if (!modelInitPosition) return; |
|
|
|
const p = JSON.parse(modelInitPosition); |
|
|
|
window.viewer.flyToPosition(new sycim.Position(p.lng, p.lat, p.alt + 500, 0, -90, 0)); |
|
|
|
window.viewer.flyToPosition( |
|
|
|
new sycim.Position(p.lng, p.lat, p.alt + 500, 0, -90, 0) |
|
|
|
); |
|
|
|
}, |
|
|
|
'013000': zoomToLayerByType, |
|
|
|
'014000': zoomToLayerByType, |
|
|
|
'021102': zoomToLayerByType, |
|
|
|
'030200': zoomToLayerByType, |
|
|
|
'030300': zoomToLayerByType, |
|
|
|
'030100': zoomToLayerByType, |
|
|
|
'030400': zoomToLayerByType, |
|
|
|
'040003': zoomToLayerByType, |
|
|
|
'050100': zoomToLayerByType, |
|
|
|
'060100': zoomToLayerByType, |
|
|
|
'070100': zoomToLayerByType, |
|
|
|
'080100': zoomToS3MLayer, |
|
|
|
'081100': zoomToLayerByType |
|
|
|
"013000": zoomToLayerByType, |
|
|
|
"014000": zoomToLayerByType, |
|
|
|
"021102": zoomToLayerByType, |
|
|
|
"030200": zoomToLayerByType, |
|
|
|
"030300": zoomToLayerByType, |
|
|
|
"030100": zoomToLayerByType, |
|
|
|
"030400": zoomToLayerByType, |
|
|
|
"040003": zoomToLayerByType, |
|
|
|
"050100": zoomToLayerByType, |
|
|
|
"060100": zoomToLayerByType, |
|
|
|
"070100": zoomToLayerByType, |
|
|
|
"080100": zoomToS3MLayer, |
|
|
|
"081100": zoomToLayerByType, |
|
|
|
}; |
|
|
|
|
|
|
|
// 添加图层
|
|
|
|
export async function addLayer(layerData) { |
|
|
|
console.log('addLayer-layerData >>>>> ', layerData) |
|
|
|
console.log("addLayer-layerData >>>>> ", layerData); |
|
|
|
const { layerType, url, id } = layerData; |
|
|
|
let action = null; |
|
|
|
// 超图 S3M图层
|
|
|
|
if (layerType === '080100') { |
|
|
|
if (layerType === "080100") { |
|
|
|
if (supermapLayer[id]) { |
|
|
|
supermapLayer[id].show = true; |
|
|
|
} else { |
|
|
|
const layerPromise = window.viewer.scene.open(url, { |
|
|
|
autoSetView: false //不自动定位
|
|
|
|
let requestUrl = url; |
|
|
|
if (layerData.serviceToken) { |
|
|
|
requestUrl = url + "?k=" + layerData.serviceToken; |
|
|
|
} |
|
|
|
const layerPromise = window.viewer.scene.open(requestUrl, { |
|
|
|
autoSetView: false, //不自动定位
|
|
|
|
}); |
|
|
|
layerPromise.then((layer) => { |
|
|
|
supermapLayer[id] = layer?.[0]; |
|
|
@ -203,16 +221,19 @@ export async function addLayer(layerData) { |
|
|
|
if (!layerType || !(action = layerActions[layerType])) return; |
|
|
|
const layer = await action(layerData); |
|
|
|
layer && window.viewer.addLayer(layer); |
|
|
|
if (['013000'].includes(layerType)) { |
|
|
|
if (["013000"].includes(layerType)) { |
|
|
|
// 3d tiles
|
|
|
|
const tileset = new sycim.Tileset(url); |
|
|
|
tileset.id = layerData.id; |
|
|
|
layer.addGraphic(tileset); |
|
|
|
} else if (['012000'].includes(layerType)) { |
|
|
|
} else if (["012000"].includes(layerType)) { |
|
|
|
// modal
|
|
|
|
if (!layerData.modelInitPosition) return; |
|
|
|
const p = JSON.parse(layerData.modelInitPosition); |
|
|
|
const model = new sycim.ModelPrimitive(new sycim.Position(p.lng, p.lat, p.alt, p.heading, p.pitch, p.roll), url); |
|
|
|
const model = new sycim.ModelPrimitive( |
|
|
|
new sycim.Position(p.lng, p.lat, p.alt, p.heading, p.pitch, p.roll), |
|
|
|
url |
|
|
|
); |
|
|
|
model.id = layerData.id; |
|
|
|
layer.addGraphic(model); |
|
|
|
} |
|
|
@ -222,14 +243,14 @@ export function removeLayer(layerData) { |
|
|
|
const { id, layerType } = layerData; |
|
|
|
if (!layerType) return; |
|
|
|
const type = layerTypeEnum[layerType]; |
|
|
|
if (layerType === '080100') { |
|
|
|
if (layerType === "080100") { |
|
|
|
if (supermapLayer[id]) { |
|
|
|
supermapLayer[id].show = false; |
|
|
|
} |
|
|
|
} else { |
|
|
|
window.viewer.removeLayer({ |
|
|
|
id, |
|
|
|
type: sycim.LayerType[type] |
|
|
|
type: sycim.LayerType[type], |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|