修改为只有小于50km的实体才会跳动
This commit is contained in:
parent
4e328cf658
commit
d05077e9ed
@ -796,7 +796,7 @@ export function useMapMarkers() {
|
||||
* @param {number} [options.heightOffset=10] - 相对地面的高度偏移(米)
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
const addReserveCenterMarkers = async (viewer, reserveData, options = {}) => {
|
||||
const addReserveCenterMarkers = async (viewer, reserveData, options = {}, disasterCenter = {}) => {
|
||||
if (!viewer) {
|
||||
console.warn('[useMapMarkers] addReserveCenterMarkers: viewer 为空')
|
||||
return
|
||||
@ -812,6 +812,7 @@ export function useMapMarkers() {
|
||||
}
|
||||
|
||||
console.log('[useMapMarkers] 开始添加储备中心和预置点标记...', reserveData.length)
|
||||
console.log('reserverData@@@@@', reserveData)
|
||||
|
||||
const entities = []
|
||||
|
||||
@ -852,8 +853,29 @@ export function useMapMarkers() {
|
||||
// return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
console.log(`[useMapMarkers] 添加标记: ${item.gl1Yjllmc}, 级别: ${levelString} (${levelName})`)
|
||||
|
||||
|
||||
|
||||
// 3. 计算距离(如果接口未提供)
|
||||
|
||||
let distance = null
|
||||
if (
|
||||
item.gl1Lng !== null &&
|
||||
item.gl1Lat !== null &&
|
||||
typeof disasterCenter?.longitude === 'number' &&
|
||||
typeof disasterCenter?.latitude === 'number'
|
||||
) {
|
||||
distance = Number(
|
||||
calculateDistance(
|
||||
{ longitude: item.gl1Lng, latitude: item.gl1Lat },
|
||||
{ longitude: disasterCenter.longitude, latitude: disasterCenter.latitude }
|
||||
).toFixed(2)
|
||||
)
|
||||
}
|
||||
|
||||
const entity = viewer.entities.add({
|
||||
position: result.position,
|
||||
billboard: {
|
||||
@ -871,7 +893,8 @@ export function useMapMarkers() {
|
||||
name: item.gl1Yjllmc || `${levelName}应急点`,
|
||||
district: item.gl1Qxmc || '-',
|
||||
personnelCount: item.gl1Rysl || '0',
|
||||
area: item.gl1Zdmj || '-'
|
||||
area: item.gl1Zdmj || '-',
|
||||
distance: distance || 0,
|
||||
}
|
||||
})
|
||||
entities.push(entity)
|
||||
@ -886,6 +909,46 @@ export function useMapMarkers() {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 角度转弧度
|
||||
* @param {number} degrees - 角度值
|
||||
* @returns {number} 弧度值
|
||||
*/
|
||||
const toRadians = (degrees) => (degrees * Math.PI) / 180
|
||||
|
||||
/**
|
||||
* 计算两个经纬度点之间的距离(公里)
|
||||
* 使用 Haversine 公式
|
||||
* @param {Object} pointA - { longitude, latitude }
|
||||
* @param {Object} pointB - { longitude, latitude }
|
||||
* @returns {number} 距离(km)
|
||||
*/
|
||||
const EARTH_RADIUS_KM = 6371
|
||||
const calculateDistance = (pointA, pointB) => {
|
||||
if (
|
||||
typeof pointA?.longitude !== 'number' ||
|
||||
typeof pointA?.latitude !== 'number' ||
|
||||
typeof pointB?.longitude !== 'number' ||
|
||||
typeof pointB?.latitude !== 'number'
|
||||
) {
|
||||
console.warn('[useDisasterData] calculateDistance: 坐标参数无效')
|
||||
return 0
|
||||
}
|
||||
|
||||
const lat1 = toRadians(pointA.latitude)
|
||||
const lat2 = toRadians(pointB.latitude)
|
||||
const deltaLat = toRadians(pointB.latitude - pointA.latitude)
|
||||
const deltaLon = toRadians(pointB.longitude - pointA.longitude)
|
||||
|
||||
const a =
|
||||
Math.sin(deltaLat / 2) ** 2 +
|
||||
Math.cos(lat1) * Math.cos(lat2) * Math.sin(deltaLon / 2) ** 2
|
||||
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
|
||||
|
||||
return EARTH_RADIUS_KM * c
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据API数据添加应急资源标记(养护站)
|
||||
* @param {Cesium.Viewer} viewer
|
||||
@ -987,12 +1050,11 @@ export function useMapMarkers() {
|
||||
return
|
||||
}
|
||||
|
||||
// 收集所有需要动画的实体(包含所有类型)
|
||||
const allEntities = [
|
||||
...markerEntities.value,
|
||||
...emergencyResourceEntities.value,
|
||||
...reserveCenterEntities.value
|
||||
].filter(e => e.billboard) // 只需要有billboard的实体
|
||||
].filter(e => e.billboard && e.properties?.distance?.getValue() <= 50)
|
||||
|
||||
console.log('allEntities', allEntities)
|
||||
|
||||
|
||||
@ -1267,9 +1267,14 @@ const loadReserveCentersAndPresets = async (
|
||||
if (mapStore.viewer) {
|
||||
console.log("[index.vue] 添加储备中心和预置点地图标记...");
|
||||
clearReserveCenterMarkers(mapStore.viewer);
|
||||
await addReserveCenterMarkers(mapStore.viewer, response.data, {
|
||||
await addReserveCenterMarkers(
|
||||
mapStore.viewer,
|
||||
response.data,
|
||||
{
|
||||
heightOffset: 10,
|
||||
});
|
||||
},
|
||||
{ longitude, latitude }
|
||||
);
|
||||
} else {
|
||||
console.warn("[index.vue] 地图viewer未就绪,跳过标记更新");
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user