Help Center/
FunctionGraph/
Best Practices/
Data Processing Practices/
Converting Device Coordinate Data in IoTDA/
Building a Program
Updated on 2025-07-10 GMT+08:00
Building a Program
Editing a Function Program
Open function iotdemo, copy the following coordinate conversion code to the function. This code is for testing purposes only and can be modified if needed.
# -*- 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
Online Joint Commissioning with IoTDA
- Log in to the IoTDA console and click an instance name. In the navigation pane, choose Rules & > Data Forwarding. In the Rule List, click View on the right of the target rule name. The Data Forwarding Rule Details page is displayed.
- Select Set Forwarding Target and click Test on the right of the forwarding target to edit the test data.
Figure 1 Testing the forwarding rule
- Enter the test data and click Connectivity Test.
{ "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 } } }Figure 2 Connectivity test result
- Go to the FunctionGraph console, choose Monitoring > Logs, and click the request ID in blue to view logs.
Figure 3 Viewing logs
Figure 4 Viewing request details
To invoke other systems, persist data in OBS, or achieve other purposes, modify the program.
Parent topic: Converting Device Coordinate Data in IoTDA
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
The system is busy. Please try again later.
For any further questions, feel free to contact us through the chatbot.
Chatbot