|
@@ -22,14 +22,48 @@ def get_vector_data(db: Session, vector_id: int):
|
|
|
vector_data = db.query(VectorData).filter(VectorData.id == vector_id).first()
|
|
|
if not vector_data:
|
|
|
raise HTTPException(status_code=404, detail="矢量数据不存在")
|
|
|
- return vector_data
|
|
|
+
|
|
|
+ # 手动构建返回字典
|
|
|
+ result = {}
|
|
|
+ for column in vector_data.__table__.columns:
|
|
|
+ value = getattr(vector_data, column.name)
|
|
|
+ # 处理特殊类型
|
|
|
+ if isinstance(value, Decimal):
|
|
|
+ value = float(value)
|
|
|
+ elif isinstance(value, datetime):
|
|
|
+ value = value.isoformat()
|
|
|
+ elif str(column.type).startswith('geometry'):
|
|
|
+ # 如果是几何类型,直接使用字符串表示
|
|
|
+ if value is not None:
|
|
|
+ value = str(value)
|
|
|
+ result[column.name] = value
|
|
|
+
|
|
|
+ return result
|
|
|
|
|
|
def get_vector_data_batch(db: Session, vector_ids: List[int]):
|
|
|
"""批量获取矢量数据记录"""
|
|
|
vector_data_list = db.query(VectorData).filter(VectorData.id.in_(vector_ids)).all()
|
|
|
if not vector_data_list:
|
|
|
raise HTTPException(status_code=404, detail="未找到指定的矢量数据")
|
|
|
- return vector_data_list
|
|
|
+
|
|
|
+ result = []
|
|
|
+ for vector_data in vector_data_list:
|
|
|
+ item = {}
|
|
|
+ for column in vector_data.__table__.columns:
|
|
|
+ value = getattr(vector_data, column.name)
|
|
|
+ # 处理特殊类型
|
|
|
+ if isinstance(value, Decimal):
|
|
|
+ value = float(value)
|
|
|
+ elif isinstance(value, datetime):
|
|
|
+ value = value.isoformat()
|
|
|
+ elif str(column.type).startswith('geometry'):
|
|
|
+ # 如果是几何类型,直接使用字符串表示
|
|
|
+ if value is not None:
|
|
|
+ value = str(value)
|
|
|
+ item[column.name] = value
|
|
|
+ result.append(item)
|
|
|
+
|
|
|
+ return result
|
|
|
|
|
|
async def import_vector_data(file: UploadFile, db: Session) -> dict:
|
|
|
"""导入GeoJSON文件到数据库"""
|