【可视化大屏开发】18. 加餐-ECharts+百度地图API实现热力图

ECharts结合百度地图API能获得更好的使用体验。

效果展示

放大后的效果

切换卫星地图模式

实现步骤

1. 通过Python实现GPS数据模拟

2. 通过IDEA开发地图

通过Python实现GPS数据模拟

import random
from math import cos, sin, radians, sqrt
import json

  

def generate_random_coordinates(center_lat, center_lon, radius, num_points):

    """

    该方法生成的结果是,以中心点为中心,半径为 radius 的圆形区域内,num_points 个随机点的经纬度坐标。

    其中,中心点的经纬度坐标为 center_lat, center_lon,半径为 radius 米。

    该方法使用了球面坐标系,将经纬度转换为球面坐标,然后在球面坐标系中生成随机点。

    """

    points = []

    # 将经纬度转换为弧度

    center_lat_rad = radians(center_lat)

    center_lon_rad = radians(center_lon)

  

    # 循环生成 num_points 个随机点

    for _ in range(num_points):

        # 生成随机的极径和方位角

        r = radius * sqrt(random.random())

        theta = random.uniform(0, 2 * 3.141592653589793)  # 方位角范围在 [0, 2π) 内

  

        # 计算偏移的直角坐标

        delta_x = r * cos(theta)

        delta_y = r * sin(theta)

  

        # 将直角坐标转换为经纬度

        new_lat = center_lat + (delta_y / 111111)

        new_lon = center_lon + (delta_x / (111111 * cos(center_lat_rad)))

  

        # 添加新的经纬度坐标到列表中

        points.append((new_lat, new_lon))

  

    return points

  
  
  

# 给定的经纬度坐标和半径,

center_latitude = 26.389193
center_longitude = 106.642337
radius_meters = 10000   # 10000 米

  

# 生成 50 个随机经纬度坐标点

random_coordinates = generate_random_coordinates(center_latitude, center_longitude, radius_meters, 30000)

  
  
  

# # 打印生成的坐标点

# for idx, coord in enumerate(random_coordinates, start=1):

#     print(f"Point {idx}: Latitude={coord[0]}, Longitude={coord[1]}")

    # print(f"{coord[1]},{coord[0]}")

  

f = []

for idx, coord in enumerate(random_coordinates, start=1):

    adir = {}

    adir["elevation"] = 3000 * random.random()  # 随机给定海拔高度

    adir["coord"] = [coord[1], coord[0]]  # 坐标点

    f.append(adir)

  

resoult = [f]

  

# 将随机生成的数据保存到json文件中

with open('Guiyangrandom_coordinates.json', 'w') as f:

    json.dump(resoult, f)

样例数据展示

通过IDEA开发地图

<!DOCTYPE html>  
<html>  
<head>  
  <meta charset="utf-8">  
	<title>贵阳市热力图-与百度地图API结合</title>
  <!-- 引入 ECharts -->  <script src="https://cdn.staticfile.net/jquery/3.7.1/jquery.min.js"></script>  
  <script src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/echarts.min.js"></script>  
  <script src="https://api.map.baidu.com/api?v=3.0&ak=这里换成你的百度地图key"></script>  
  <script src="https://registry.npmmirror.com/echarts/5.5.0/files/dist/extension/bmap.min.js"></script>  
</head>  
<body>  
<!-- 为ECharts准备一个具备大小(宽高)的DOM -->  
<div id="main" style="width: 100%;height:600px;"></div>  
<script type="text/javascript">  
  // 获取图表容器元素,并初始化ECharts实例  
  var chartDom = document.getElementById('main');  
  var myChart = echarts.init(chartDom);  
  var option;  
  
  // 从JSON文件中异步加载数据  
  $.get('jsons/Guiyangrandom_coordinates.json', function (data) {  
    // 处理数据,转换为ECharts要求的格式  
    var points = [].concat.apply(  
            [],  
            data.map(function (track) {  
              // 对每条轨迹进行处理,将坐标点转换为ECharts可识别的格式  
              return track.map(function (seg) {  
                // 每个坐标点加上一个维度值1  
                return seg.coord.concat([1]);  
              });  
            })  
    );  
  
  
    // 定制配置项  
    // 配置项对象,用于设置地图可视化效果  
    option = {  
      animation: true, // 是否开启动画效果  
      bmap: { // 地图配置项  
        center: [106.642337,26.389193],  // 设置地图中心点坐标为贵州师范大学的位置  
        zoom: 14, // 地图缩放级别  
        roam: true // 是否开启地图漫游功能  
      },  
      visualMap: { // 可视化映射配置项  
        show: true, // 是否显示可视化控件  
        top: 'top', // 控件位置,置顶  
        min: 0, // 映射范围最小值  
        max: 5, // 映射范围最大值  
        seriesIndex: 0, // 关联的系列索引  
        calculable: true, // 是否支持计算  
        inRange: { // 映射范围内颜色设置  
          color: ['blue', 'blue', 'green', 'yellow', 'red'] // 设置不同范围的颜色  
        }  
      },  
      series: [ // 系列配置,用于设置热力图  
        {  
          type: 'heatmap', // 热力图类型  
          coordinateSystem: 'bmap', // 使用bmap坐标系  
          data: points, // 热力图数据点  
          pointSize: 5, // 点大小  
          blurSize: 6 // 模糊半径  
        }  
      ]  
    };  
  
    myChart.setOption(option);  
    // 添加百度地图插件  
    var bmap = myChart.getModel().getComponent('bmap').getBMap();  
    bmap.addControl(new BMap.MapTypeControl());  
  });  
  
  // 如果option存在,则再次设置图表选项  
  option && myChart.setOption(option);  
  
</script>  
</body>  
</html>

每个具体位置的经纬度,可以通过百度地图API接口的拾取坐标系统 (baidu.com),实现GPS获取

效果

### RT-DETRv3 网络结构分析 RT-DETRv3 是一种基于 Transformer 的实时端到端目标检测算法,其核心在于通过引入分层密集正监督方法以及一系列创新性的训练策略,解决了传统 DETR 模型收敛慢和解码器训练不足的问题。以下是 RT-DETRv3 的主要网络结构特点: #### 1. **基于 CNN 的辅助分支** 为了增强编码器的特征表示能力,RT-DETRv3 引入了一个基于卷积神经网络 (CNN) 的辅助分支[^3]。这一分支提供了密集的监督信号,能够与原始解码器协同工作,从而提升整体性能。 ```python class AuxiliaryBranch(nn.Module): def __init__(self, in_channels, out_channels): super(AuxiliaryBranch, self).__init__() self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1) self.bn = nn.BatchNorm2d(out_channels) def forward(self, x): return F.relu(self.bn(self.conv(x))) ``` 此部分的设计灵感来源于传统的 CNN 架构,例如 YOLO 系列中的 CSPNet 和 PAN 结构[^2],这些技术被用来优化特征提取效率并减少计算开销。 --- #### 2. **自注意力扰动学习策略** 为解决解码器训练不足的问题,RT-DETRv3 提出了一种名为 *self-att 扰动* 的新学习策略。这种策略通过对多个查询组中阳性样本的标签分配进行多样化处理,有效增加了阳例的数量,进而提高了模型的学习能力和泛化性能。 具体实现方式是在训练过程中动态调整注意力权重分布,确保更多的高质量查询可以与真实标注 (Ground Truth) 进行匹配。 --- #### 3. **共享权重解编码器分支** 除了上述改进外,RT-DETRv3 还引入了一个共享权重的解编码器分支,专门用于提供密集的正向监督信号。这一设计不仅简化了模型架构,还显著降低了参数量和推理时间,使其更适合实时应用需求。 ```python class SharedDecoderEncoder(nn.Module): def __init__(self, d_model, nhead, num_layers): super(SharedDecoderEncoder, self).__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead) self.decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_layers) def forward(self, tgt, memory): return self.decoder(tgt=tgt, memory=memory) ``` 通过这种方式,RT-DETRv3 实现了高效的目标检测流程,在保持高精度的同时大幅缩短了推理延迟。 --- #### 4. **与其他模型的关系** 值得一提的是,RT-DETRv3 并未完全抛弃经典的 CNN 技术,而是将其与 Transformer 结合起来形成混合架构[^4]。例如,它采用了 YOLO 系列中的 RepNCSP 模块替代冗余的多尺度自注意力层,从而减少了不必要的计算负担。 此外,RT-DETRv3 还借鉴了 DETR 的一对一匹配策略,并在此基础上进行了优化,进一步提升了小目标检测的能力。 --- ### 总结 综上所述,RT-DETRv3 的网络结构主要包括以下几个关键组件:基于 CNN 的辅助分支、自注意力扰动学习策略、共享权重解编码器分支以及混合编码器设计。这些技术创新共同推动了实时目标检测领域的发展,使其在复杂场景下的表现更加出色。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值