Add SARscape SBAS prepared stack workflow
This commit is contained in:
@@ -17,6 +17,7 @@ from .orm import (
|
||||
PairingNetworkEdgeORM,
|
||||
TimeseriesStackPlanORM,
|
||||
TimeseriesStackPlanItemORM,
|
||||
TimeseriesStackPlanEdgeORM,
|
||||
HazardPointORM,
|
||||
SystemTaskORM,
|
||||
TaskLogORM,
|
||||
@@ -63,6 +64,7 @@ from .schemas import (
|
||||
PsRequest,
|
||||
TimeseriesStackPlan,
|
||||
TimeseriesStackPlanItem,
|
||||
TimeseriesStackPlanEdge,
|
||||
TimeseriesStackPlanDetail,
|
||||
TaskInfo,
|
||||
AuthUserInfo,
|
||||
@@ -89,7 +91,7 @@ __all__ = [
|
||||
"ResultIssueORM", "ResultCatalogStateORM",
|
||||
"PairingCacheStateORM", "PairingDirtySceneORM", "PairingMetricCacheORM",
|
||||
"PairingNetworkRunORM", "PairingNetworkEdgeORM",
|
||||
"TimeseriesStackPlanORM", "TimeseriesStackPlanItemORM",
|
||||
"TimeseriesStackPlanORM", "TimeseriesStackPlanItemORM", "TimeseriesStackPlanEdgeORM",
|
||||
"SystemTaskORM", "TaskLogORM", "SystemJobORM", "ScanStateORM",
|
||||
"ManagedRootORM", "ScanCursorORM", "PathInventoryORM",
|
||||
"WorkflowDefORM", "WorkflowRunORM", "WorkflowStepORM", "WorkflowArtifactORM",
|
||||
@@ -105,7 +107,7 @@ __all__ = [
|
||||
"HazardPoint", "DinsarResult", "ScanRequest", "ManagedRootInfo", "ScanCursorInfo",
|
||||
"RadarData", "RadarDataPage", "DinsarResultPage",
|
||||
"PairingRequest", "RadarPair", "PairingResponse",
|
||||
"PsRequest", "TimeseriesStackPlan", "TimeseriesStackPlanItem", "TimeseriesStackPlanDetail", "TaskInfo",
|
||||
"PsRequest", "TimeseriesStackPlan", "TimeseriesStackPlanItem", "TimeseriesStackPlanEdge", "TimeseriesStackPlanDetail", "TaskInfo",
|
||||
"AuthUserInfo", "AuthAuditLogInfo", "RadarPreviewStatusInfo",
|
||||
"DinsarTaskBatch", "DinsarTaskItem", "PsTaskBatch", "PsTaskItem", "PsTimeseriesRun",
|
||||
"WaterDetectRequest", "WaterDetectResponse",
|
||||
|
||||
@@ -467,6 +467,11 @@ class TimeseriesStackPlanORM(Base):
|
||||
back_populates="plan",
|
||||
cascade="all, delete-orphan",
|
||||
)
|
||||
edges = relationship(
|
||||
"TimeseriesStackPlanEdgeORM",
|
||||
back_populates="plan",
|
||||
cascade="all, delete-orphan",
|
||||
)
|
||||
|
||||
__table_args__ = (
|
||||
Index("idx_timeseries_stack_plans_direction_created", "direction", "created_at"),
|
||||
@@ -508,6 +513,83 @@ class TimeseriesStackPlanItemORM(Base):
|
||||
)
|
||||
|
||||
|
||||
class TimeseriesStackPlanEdgeORM(Base):
|
||||
__tablename__ = "timeseries_stack_plan_edges"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
plan_ref_id = Column(
|
||||
Integer,
|
||||
ForeignKey("timeseries_stack_plans.id", ondelete="CASCADE"),
|
||||
index=True,
|
||||
nullable=False,
|
||||
)
|
||||
master_plan_item_ref_id = Column(
|
||||
Integer,
|
||||
ForeignKey("timeseries_stack_plan_items.id", ondelete="SET NULL"),
|
||||
index=True,
|
||||
nullable=True,
|
||||
)
|
||||
slave_plan_item_ref_id = Column(
|
||||
Integer,
|
||||
ForeignKey("timeseries_stack_plan_items.id", ondelete="SET NULL"),
|
||||
index=True,
|
||||
nullable=True,
|
||||
)
|
||||
metric_cache_ref_id = Column(
|
||||
Integer,
|
||||
ForeignKey("pairing_metric_cache.id", ondelete="SET NULL"),
|
||||
index=True,
|
||||
nullable=True,
|
||||
)
|
||||
master_scene_ref_id = Column(
|
||||
Integer,
|
||||
ForeignKey("radar_data.id", ondelete="SET NULL"),
|
||||
index=True,
|
||||
nullable=True,
|
||||
)
|
||||
slave_scene_ref_id = Column(
|
||||
Integer,
|
||||
ForeignKey("radar_data.id", ondelete="SET NULL"),
|
||||
index=True,
|
||||
nullable=True,
|
||||
)
|
||||
edge_rank = Column(Integer, nullable=False, default=0)
|
||||
master_imaging_date = Column(String(8), index=True, nullable=True)
|
||||
slave_imaging_date = Column(String(8), index=True, nullable=True)
|
||||
temporal_baseline_days = Column(Integer, nullable=True)
|
||||
spatial_baseline_meters = Column(Float, nullable=True)
|
||||
perpendicular_baseline_meters = Column(Float, nullable=True)
|
||||
scene_overlap_ratio = Column(Float, nullable=True)
|
||||
pair_aoi_overlap_ratio = Column(Float, nullable=True)
|
||||
selection_reason = Column(String(64), nullable=True)
|
||||
selection_score = Column(Float, nullable=True)
|
||||
selection_meta_json = Column(JSON, nullable=True)
|
||||
enabled = Column(Boolean, nullable=False, default=True)
|
||||
created_at = Column(DateTime, server_default=func.now(), nullable=False)
|
||||
|
||||
plan = relationship("TimeseriesStackPlanORM", back_populates="edges")
|
||||
master_plan_item = relationship("TimeseriesStackPlanItemORM", foreign_keys=[master_plan_item_ref_id])
|
||||
slave_plan_item = relationship("TimeseriesStackPlanItemORM", foreign_keys=[slave_plan_item_ref_id])
|
||||
metric_cache = relationship("PairingMetricCacheORM")
|
||||
master_scene = relationship("RadarDataORM", foreign_keys=[master_scene_ref_id])
|
||||
slave_scene = relationship("RadarDataORM", foreign_keys=[slave_scene_ref_id])
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint(
|
||||
"plan_ref_id",
|
||||
"edge_rank",
|
||||
name="uq_timeseries_plan_edges_plan_rank",
|
||||
),
|
||||
Index("idx_timeseries_plan_edges_plan_enabled", "plan_ref_id", "enabled"),
|
||||
Index(
|
||||
"idx_timeseries_plan_edges_plan_scenes",
|
||||
"plan_ref_id",
|
||||
"master_scene_ref_id",
|
||||
"slave_scene_ref_id",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class HazardPointORM(Base):
|
||||
__tablename__ = 'hazard_points'
|
||||
|
||||
|
||||
@@ -203,6 +203,8 @@ class RadarData(BaseModel):
|
||||
stack_coverage_consistency_ratio: Optional[float] = None
|
||||
stack_threshold_satisfied: Optional[bool] = None
|
||||
stack_selection_mode: Optional[str] = None
|
||||
stack_network_edge_count: Optional[int] = None
|
||||
stack_network_warnings: Optional[List[str]] = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
@@ -353,6 +355,11 @@ class PsRequest(BaseModel):
|
||||
"""PS-InSAR 时序分析数据准备的请求模型。"""
|
||||
initial_overlap_threshold: float = Field(default=0.3, ge=0.0, le=1.0)
|
||||
final_overlap_threshold: float = Field(default=0.95, ge=0.0, le=1.0)
|
||||
time_baseline_min: int = Field(default=1, ge=0, le=3650)
|
||||
time_baseline_max: int = Field(default=90, ge=1, le=3650)
|
||||
spatial_baseline_max_meters: int = Field(default=3000, ge=0, le=100000)
|
||||
network_overlap_threshold: float = Field(default=0.5, ge=0.0, le=1.0)
|
||||
num_connections: int = Field(default=1, ge=1, le=10)
|
||||
|
||||
|
||||
class TimeseriesStackPlanItem(BaseModel):
|
||||
@@ -393,8 +400,34 @@ class TimeseriesStackPlan(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class TimeseriesStackPlanEdge(BaseModel):
|
||||
id: int
|
||||
plan_ref_id: int
|
||||
master_plan_item_ref_id: Optional[int] = None
|
||||
slave_plan_item_ref_id: Optional[int] = None
|
||||
metric_cache_ref_id: Optional[int] = None
|
||||
master_scene_ref_id: Optional[int] = None
|
||||
slave_scene_ref_id: Optional[int] = None
|
||||
edge_rank: int
|
||||
master_imaging_date: Optional[str] = None
|
||||
slave_imaging_date: Optional[str] = None
|
||||
temporal_baseline_days: Optional[int] = None
|
||||
spatial_baseline_meters: Optional[float] = None
|
||||
perpendicular_baseline_meters: Optional[float] = None
|
||||
scene_overlap_ratio: Optional[float] = None
|
||||
pair_aoi_overlap_ratio: Optional[float] = None
|
||||
selection_reason: Optional[str] = None
|
||||
selection_score: Optional[float] = None
|
||||
selection_meta_json: Optional[Dict[str, Any]] = None
|
||||
enabled: bool = True
|
||||
created_at: datetime
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class TimeseriesStackPlanDetail(TimeseriesStackPlan):
|
||||
items: List[TimeseriesStackPlanItem] = Field(default_factory=list)
|
||||
edges: List[TimeseriesStackPlanEdge] = Field(default_factory=list)
|
||||
|
||||
|
||||
class TaskInfo(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user