86 lines
3.5 KiB
Python
86 lines
3.5 KiB
Python
import numpy as np
|
|
from flask import Flask, request, jsonify
|
|
from flasgger import Swagger
|
|
import json
|
|
from algorithms import bilinear_interpolation
|
|
|
|
app = Flask(__name__)
|
|
|
|
# 配置 Swagger
|
|
app.config['SWAGGER'] = {
|
|
'title': '插值计算API',
|
|
'description': '提供基于双线性插值的计算服务',
|
|
'version': '1.0.0',
|
|
'uiversion': 3
|
|
}
|
|
swagger = Swagger(app)
|
|
|
|
@app.route('/PythonCalculate', methods=['POST'])
|
|
def calculate():
|
|
"""
|
|
插值计算接口
|
|
---
|
|
tags:
|
|
- 计算
|
|
parameters:
|
|
- in: body
|
|
name: body
|
|
required: true
|
|
schema:
|
|
type: object
|
|
properties:
|
|
text:
|
|
type: string
|
|
description: 包含计算参数的JSON字符串
|
|
example: '{"FuncName":"calculate_main","ClassName":"","Par":[{"name":"X_NUM","dataType":"0","arrayType":"0","isOut":"2","data":5},{"name":"Y_NUM","dataType":"0","arrayType":"0","isOut":"2","data":5},{"name":"X","dataType":"1","arrayType":"0","isOut":"2","data":2.5},{"name":"Y","dataType":"1","arrayType":"0","isOut":"2","data":3.5},{"name":"X0","dataType":"1","arrayType":"1","isOut":"2","data":[1,2,3,4,5]},{"name":"Y0","dataType":"1","arrayType":"1","isOut":"2","data":[1,2,3,4,5]},{"name":"Z0","dataType":"1","arrayType":"1","isOut":"2","data":[1,2,3,4,5,2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9]},{"name":"Z","dataType":"1","arrayType":"0","isOut":"1","data":0},{"name":"ZX","dataType":"1","arrayType":"0","isOut":"1","data":0},{"name":"ZY","dataType":"1","arrayType":"0","isOut":"1","data":0},{"name":"Z_OUT","dataType":"1","arrayType":"1","isOut":"1","data":0}]}'
|
|
responses:
|
|
200:
|
|
description: 计算结果
|
|
schema:
|
|
type: object
|
|
properties:
|
|
text:
|
|
type: string
|
|
description: 包含计算结果的JSON字符串
|
|
"""
|
|
# 解析输入JSON
|
|
request_data = request.json
|
|
input_data = json.loads(request_data["text"])
|
|
|
|
# 提取输入参数
|
|
X_NUM = input_data["Par"][0]["Data"]
|
|
Y_NUM = input_data["Par"][1]["Data"]
|
|
X = input_data["Par"][2]["Data"]
|
|
Y = input_data["Par"][3]["Data"]
|
|
X0 = input_data["Par"][4]["Data"]
|
|
Y0 = input_data["Par"][5]["Data"]
|
|
Z0 = input_data["Par"][6]["Data"]
|
|
|
|
# 调用算法函数
|
|
Z, ZX, ZY, Z_OUT = bilinear_interpolation(
|
|
X_NUM, Y_NUM, X, Y, X0, Y0, np.array(Z0).reshape(Y_NUM, X_NUM)
|
|
)
|
|
|
|
# 构建输出JSON
|
|
output_data = {
|
|
"funcName": "calculate_main",
|
|
"className": "",
|
|
"par": [
|
|
{"name": "X_NUM", "dataType": 0, "arrayType": 0, "isOut": 2, "data": X_NUM},
|
|
{"name": "Y_NUM", "dataType": 0, "arrayType": 0, "isOut": 2, "data": Y_NUM},
|
|
{"name": "X", "dataType": 1, "arrayType": 0, "isOut": 2, "data": X},
|
|
{"name": "Y", "dataType": 2, "arrayType": 0, "isOut": 2, "data": Y},
|
|
{"name": "X0", "dataType": 1, "arrayType": 1, "isOut": 2, "data": X0},
|
|
{"name": "Y0", "dataType": 1, "arrayType": 1, "isOut": 2, "data": Y0},
|
|
{"name": "Z0", "dataType": 1, "arrayType": 1, "isOut": 2, "data": Z0},
|
|
{"name": "Z", "dataType": 1, "arrayType": 0, "isOut": 1, "data": float(Z)},
|
|
{"name": "ZX", "dataType": 1, "arrayType": 0, "isOut": 1, "data": float(ZX)},
|
|
{"name": "ZY", "dataType": 1, "arrayType": 0, "isOut": 1, "data": float(ZY)},
|
|
{"name": "Z_OUT", "dataType": 1, "arrayType": 1, "isOut": 1, "data": Z_OUT}
|
|
]
|
|
}
|
|
|
|
return jsonify(output_data)
|
|
|
|
if __name__ == '__main__':
|
|
app.run(debug=True) |