更新时间:2025-08-12 GMT+08:00
构建函数程序
编辑函数程序
打开创建的函数iotdemo,复制以下坐标转换代码,仅供测试不建议用于生产用途,用户也可以根据自己的需要修改。
# -*- coding:utf-8 -*-
import json
import math
from math import pi
def handler(event, context):
data = event["notify_data"]["body"]
lat = data["lat"]
lng = data["lng"]
print(f" WGS84: ({lng},{lat})")
gcj_lng, gcj_lat = transform(lng, lat)
print(f" GCJ02: ({gcj_lng},{gcj_lat})")
body = {
"gcj_lng": gcj_lng,
"gcj_lat": gcj_lat
}
return {
"statusCode": 200,
"isBase64Encoded": False,
"body": json.dumps(body),
"headers": {
"Content-Type": "application/json"
}
}
def transform(lon, lat):
a = 6378245.0
ee = 0.00669342162296594323
dlat = transform_lat(lon - 105.0, lat - 35.0)
dlon = transform_lon(lon - 105.0, lat - 35.0)
rad_lat = lat / 180.0 * pi
magic = math.sin(rad_lat)
magic = 1 - ee * magic * magic
sqrt_magic = math.sqrt(magic)
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrt_magic) * pi)
dlon = (dlon * 180.0) / (a / sqrt_magic * math.cos(rad_lat) * pi)
mg_lon = lon + dlon
mg_lat = lat + dlat
return mg_lon, mg_lat
def transform_lon(x, y):
ret = 300.0 + x + 2.0 * y + 0.1 * x * x + \
0.1 * x * y + 0.1 * math.sqrt(math.fabs(x))
ret += (20.0 * math.sin(6.0 * pi * x) +
20.0 * math.sin(2.0 * pi * x)) * 2.0 / 3.0
ret += (20.0 * math.sin(pi * x) +
40.0 * math.sin(pi / 3.0 * x)) * 2.0 / 3.0
ret += (150.0 * math.sin(pi / 12.0 * x) +
300.0 * math.sin(pi / 30.0 * x)) * 2.0 / 3.0
return ret
def transform_lat(x, y):
ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + \
0.1 * x * y + 0.2 * math.sqrt(math.fabs(x))
ret += (20.0 * math.sin(6.0 * pi * x) +
20.0 * math.sin(2.0 * pi * x)) * 2.0 / 3.0
ret += (20.0 * math.sin(pi * y) +
40.0 * math.sin(pi / 3.0 * y)) * 2.0 / 3.0
ret += (160.0 * math.sin(pi / 12.0 * y) +
320 * math.sin(pi / 30.0 * y)) * 2.0 / 3.0
return ret
通过IoTDA 进行线上联调测试
- 登录IoTDA控制台,在IoTDA实例列表中单击实例名称进入“总览”页面,左侧导航栏选择“规则 > 数据转发”后,并在“规则列表”中单击目标规则名称所在行右侧的“详情” ,进入数据转发规则详情页面。
- 选择“设置转发目标”,并单击转发目标所在行右侧的“测试”,开始编辑测试数据。
图1 转发规则测试
- 输入测试数据单击 “连通性测试” 。
{ "resource": "device.message", "event": "report", "event_time": "string", "notify_data": { "header": { "app_id": "d4922d8a-6c8e-4396-852c-164aefa6638f", "device_id": "d4922d8a-6c8e-4396-852c-164aefa6638f", "node_id": "ABC123456789", "product_id": "ABC123456789", "gateway_id": "d4922d8a-6c8e-4396-852c-164aefa6638f", "tags": [ { "tag_key": "testTagName", "tag_value": "testTagValue" } ] }, "body": { "lat": 92.64763932844794, "lng": 35.25202546134364 } } }图2 连通性测试结果
- 到FunctionGraph 页面 , 单击 “监控” “日志” 随后单击蓝色的请求id查看日志。
图3 查看日志
图4 查看请求id详情
可以对程序进行修改,使数据可以用于调用其他系统或进行持久化存储,如存储到obs等。