195 lines
4.7 KiB
JavaScript
195 lines
4.7 KiB
JavaScript
const TILE_BASE = String(import.meta.env.VITE_TILE_SERVER_URL || '')
|
|
.trim()
|
|
.replace(/\/+$/, '');
|
|
const TILE_TOKEN = String(import.meta.env.VITE_TILE_SERVER_TOKEN || '').trim();
|
|
|
|
const buildTileServerUrl = relativePath => {
|
|
const normalizedPath = relativePath.startsWith('/') ? relativePath : `/${relativePath}`;
|
|
const url = `${TILE_BASE}${normalizedPath}`;
|
|
if (!TILE_TOKEN) {
|
|
return url;
|
|
}
|
|
const separator = url.includes('?') ? '&' : '?';
|
|
return `${url}${separator}token=${encodeURIComponent(TILE_TOKEN)}`;
|
|
};
|
|
|
|
export const BASE_LAYERS = {
|
|
google_image: {
|
|
label: 'Google 影像',
|
|
url: buildTileServerUrl('/tiles/google_image/{z}/{x}/{y}.webp'),
|
|
attribution: 'Google Imagery (Offline)',
|
|
},
|
|
gaode_image: {
|
|
label: '高德影像',
|
|
url: buildTileServerUrl('/tiles/gaode_image/{z}/{x}/{y}.webp'),
|
|
attribution: 'Gaode Imagery (Offline)',
|
|
},
|
|
gaode_shp: {
|
|
label: '高德矢量',
|
|
url: buildTileServerUrl('/tiles/gaode_shp/{z}/{x}/{y}.webp'),
|
|
attribution: 'Gaode Vector (Offline)',
|
|
},
|
|
};
|
|
|
|
export const TILE_LAYER_DEFAULT_KEY = 'gaode_shp';
|
|
|
|
export const TILE_LAYER_OPTIONS = {
|
|
minZoom: 0,
|
|
maxZoom: 16,
|
|
maxNativeZoom: 16,
|
|
tms: false,
|
|
updateWhenIdle: true,
|
|
keepBuffer: 4,
|
|
};
|
|
|
|
export const TILE_LAYER_BOUNDS = [
|
|
[43.425877000, 121.182221000],
|
|
[53.563624000, 135.095670000],
|
|
];
|
|
|
|
export const NATIONAL_BOUNDARY_GEOJSON_URL = buildTileServerUrl('/geojson/全国行政区.geojson');
|
|
|
|
export const getBaseLayerConfig = key => BASE_LAYERS[key] || BASE_LAYERS[TILE_LAYER_DEFAULT_KEY];
|
|
|
|
export const LEFT_GROUP_LABELS = {
|
|
data: '数据管理',
|
|
production: '生产规划',
|
|
insar_analysis: 'InSAR形变分析',
|
|
ai_analysis: 'AI分析',
|
|
water: '水体监测',
|
|
ops: '运行维护',
|
|
};
|
|
|
|
export const LEFT_GROUP_SECTIONS = {
|
|
production: [
|
|
{
|
|
key: 'planning',
|
|
label: '规划编组',
|
|
tabs: ['pairing', 'pairs', 'ps_results', 'batches'],
|
|
},
|
|
{
|
|
key: 'dispatch',
|
|
label: '数据分发',
|
|
tabs: ['copier'],
|
|
},
|
|
{
|
|
key: 'dinsar',
|
|
label: 'D-InSAR',
|
|
tabs: ['dinsar_production', 'dinsar_products'],
|
|
},
|
|
{
|
|
key: 'psinsar',
|
|
label: 'PS-InSAR',
|
|
tabs: ['ps_production', 'ps_products'],
|
|
},
|
|
],
|
|
insar_analysis: [
|
|
{
|
|
key: 'dinsar',
|
|
label: 'D-InSAR',
|
|
tabs: ['dinsar_results', 'dinsar_analysis'],
|
|
},
|
|
{
|
|
key: 'psinsar',
|
|
label: 'PS-InSAR',
|
|
tabs: ['psinsar_results', 'psinsar_analysis'],
|
|
},
|
|
],
|
|
ai_analysis: [
|
|
{
|
|
key: 'deformation_ai',
|
|
label: '形变智能分析',
|
|
tabs: ['ai_quality', 'ai_diagnosis'],
|
|
},
|
|
{
|
|
key: 'vision_ai',
|
|
label: '遥感视觉分析',
|
|
tabs: ['landslide_segmentation', 'uav_image_analysis'],
|
|
},
|
|
],
|
|
};
|
|
|
|
export const LEFT_GROUP_TABS = {
|
|
data: ['ingest', 'data', 'hazard'],
|
|
production: LEFT_GROUP_SECTIONS.production.flatMap(section => section.tabs),
|
|
insar_analysis: LEFT_GROUP_SECTIONS.insar_analysis.flatMap(section => section.tabs),
|
|
ai_analysis: LEFT_GROUP_SECTIONS.ai_analysis.flatMap(section => section.tabs),
|
|
water: ['water'],
|
|
ops: ['health', 'users', 'audit'],
|
|
};
|
|
|
|
export const LEFT_TAB_GROUP = Object.entries(LEFT_GROUP_TABS).reduce((acc, [group, tabs]) => {
|
|
tabs.forEach(tab => {
|
|
acc[tab] = group;
|
|
});
|
|
return acc;
|
|
}, {});
|
|
|
|
export const LEFT_TAB_SECTION = Object.entries(LEFT_GROUP_SECTIONS).reduce((acc, [, sections]) => {
|
|
sections.forEach(section => {
|
|
section.tabs.forEach(tab => {
|
|
acc[tab] = section.key;
|
|
});
|
|
});
|
|
return acc;
|
|
}, {});
|
|
|
|
export const ADMIN_ONLY_TABS = new Set([
|
|
'ingest',
|
|
'pairing',
|
|
'pairs',
|
|
'ps_results',
|
|
'batches',
|
|
'copier',
|
|
'dinsar_production',
|
|
'dinsar_products',
|
|
'ps_production',
|
|
'ps_products',
|
|
'water',
|
|
'users',
|
|
'audit',
|
|
]);
|
|
|
|
export const DEFAULT_LIST_PAGE_SIZE = 200;
|
|
export const PAGE_SIZE_OPTIONS = [50, 100, 200, 500];
|
|
export const BATCH_API_PAGE_LIMIT = 500;
|
|
export const BATCH_API_MAX_PAGES = 200;
|
|
|
|
export const SATELLITE_GROUPS = [
|
|
{ key: 'LT-1', label: 'LT-1', prefixes: ['LT1'] },
|
|
{ key: 'GF-3', label: 'GF-3', prefixes: ['GF3'] },
|
|
];
|
|
|
|
export const RADAR_SEARCH_DEFAULTS = {
|
|
satellite: '',
|
|
satellite_mode: '',
|
|
receiving_station: '',
|
|
imaging_mode: '',
|
|
orbit_circle: '',
|
|
acquisition_time_utc: '',
|
|
product_type: '',
|
|
polarization: '',
|
|
product_level: '',
|
|
product_unique_id: '',
|
|
orbit_direction: '',
|
|
has_orbit_data: '',
|
|
is_envi_processed: '',
|
|
imaging_date_from: '',
|
|
imaging_date_to: '',
|
|
};
|
|
|
|
export const RADAR_SEARCH_OPTIONS_DEFAULTS = {
|
|
satellite: [],
|
|
satellite_mode: [],
|
|
receiving_station: [],
|
|
imaging_mode: [],
|
|
orbit_circle: [],
|
|
acquisition_time_utc: [],
|
|
product_type: [],
|
|
polarization: [],
|
|
product_level: [],
|
|
product_unique_id: [],
|
|
orbit_direction: [],
|
|
imaging_dates: [],
|
|
};
|