年轻程序员 2023-03-28 11:42 采纳率: 90.9%
浏览 13
已结题

Python实现坐标可视化

现在没有方向把从单片机收到的20组两个十六进制数组成的WGS84坐标转化成腾讯地图可视化然后放到网页上(最好能实时转化,因为单片机是不断向服务器发送坐标的)

  • 写回答

2条回答 默认 最新

  • H3T 2023-03-28 12:49
    关注

    使用Python编写一个服务器程序,用于接收单片机发送的坐标数据。可以使用socket进行通信,也可以使用Flask等Web框架搭建Web服务。
     
    将收到的WGS84坐标转换为腾讯地图坐标。可以使用腾讯地图提供的JavaScript API中的坐标转换接口,也可以使用Python中的第三方库进行坐标转换。
     
    使用前端技术(如Vue.js、React等)编写一个网页,用于展示腾讯地图,并将实时收到的坐标数据在地图上进行可视化展示。可以使用腾讯地图提供的JavaScript API来实现地图展示和标注功能。
     
    在服务器程序中将收到的坐标数据发送给前端网页,实现实时更新坐标的效果。可以使用WebSocket或者HTTP长连接等技术实现。
     
    编写Python服务器程序
    使用Python中的socket模块编写一个服务器程序,接收单片机发送的坐标数据。示例代码如下:

    import socket
    HOST = ''  # 监听所有网络接口
    PORT = 8888  # 监听端口号
    # 创建socket对象
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定地址和端口号
    s.bind((HOST, PORT))
    # 开始监听
    s.listen(1)
    while True:
        # 等待客户端连接
        conn, addr = s.accept()
        print('Connected by', addr)
        while True:
            # 接收数据
            data = conn.recv(1024)
            if not data:
                break
            # 处理数据
            # ...
        # 关闭连接
        conn.close()
    

    将WGS84坐标转换为腾讯地图坐标
    可以使用第三方库pyproj进行WGS84坐标与墨卡托投影坐标的转换。示例代码如下:

    import pyproj
    # 定义WGS84坐标系和腾讯地图墨卡托投影坐标系的转换
    wgs84 = pyproj.Proj('EPSG:4326')
    tencent = pyproj.Proj('EPSG:3857')
    # 将WGS84坐标转换为腾讯地图坐标
    lng, lat = 121.48, 31.22  # 示例数据,需要替换为实际坐标数据
    x, y = pyproj.transform(wgs84, tencent, lng, lat)
    

    编写前端网页
    使用前端技术编写一个网页,用于展示腾讯地图,并将实时收到的坐标数据在地图上进行可视化展示。示例代码如下:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>坐标可视化示例</title>
        <style>
            #map {
                width: 100%;
                height: 500px;
            }
        </style>
    </head>
    <body>
        <div id="map"></div>
        <script src="https://map.qq.com/api/gljs?v=1.exp&key=YOURKEY"></script>
        <script>
            // 初始化地图
            var map = new qq.maps.Map(document.getElementById("map"), {
                center: new qq.maps.LatLng(39.916527,116.397128),
                zoom: 13
            });
            // 添加标记
            function addMarker(lng, lat) {
                var marker = new qq.maps.Marker({
                    position: new qq.maps.LatLng(lat, lng),
                    map: map
                });
            }
            // 连接WebSocket服务器
            var ws = new WebSocket("ws://localhost:8889");
            // 接收坐标数据并更新地图
            ws.onmessage = function(event) {
                var data = JSON.parse(event.data);
                addMarker(data.lng, data.lat);
            };
        </script>
    </body>
    </html>
    

    在服务器程序中将坐标数据发送给前端网页
    使用WebSocket将收到的坐标数据发送给前端网页,实现实时更新坐标的效果。示例代码如下:

    import json
    import socket
    import threading
    import time
    import websocket
    

    定义WGS84坐标系和腾讯地图墨卡托投影坐标系的转换:

    wgs84 = pyproj.Proj('EPSG:4326')
    tencent = pyproj.Proj('EPSG:3857')
    

    连接WebSocket服务器:

    
    def on_open(ws):
        print('WebSocket连接成功')
    def on_message(ws, message):
        print('收到坐标数据:', message)
        data = json.loads(message)
        # 将WGS84坐标转换为腾讯地图坐标
        lng, lat = data['lng'], data['lat']
        x, y = pyproj.transform(wgs84, tencent, lng, lat)
        # 发送坐标数据给前端网页
        ws.send(json.dumps({'lng': x, 'lat': y}))
    def on_error(ws, error):
        print('WebSocket连接出错:', error)
    def on_close(ws):
        print('WebSocket连接关闭')
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp('ws://localhost:8888',
                                on_open=on_open,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)
    thread = threading.Thread(target=ws.run_forever)
    thread.daemon = True
    thread.start()
    

    发送坐标数据给单片机:

    def send_coordinate():
        while True:
            # 从单片机接收坐标数据
            data = b'\x12\x34\x56\x78\x9a\xbc\xde
    

     
    如果回答对您有所帮助,望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化