ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

人工智能77

智慧城市数字孪生简介

随着 5G、物联网、大数据、人工智能等技术的发展与广泛应用,城市的管理模式正在由传统的二维向三维可视化的模式过渡,智慧城市的内涵在不断丰富,建设 3D 可视化、智能化的智慧城市是大势所趋。作为专业的三维地图可视化、数字孪生解决方案的服务商,ESMap 致力于构建一站式的数字孪生平台,基于自主研发的地图 SDK,打造智慧城市生态链。
智慧城市数字孪生地图效果展示:

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生
本文将为读者介绍 ESMap 城市三维地图在智慧城市的实际应用,对深圳市的气温、降水等气象数据进行实时监测,通过三维地图的依托,动态展示深圳市的气象数据。

地图初始化

var map = new esmap.ESWorldMap({
  container: document.getElementById('map-container'),
  themeID: 'W2002', //主题ID
  cids: 'esmapcitydemo',
  tileType: 'autonavi',
  token: 'escope',
  center: [12683203.6, 2574401.4],
  maximumTiles: 64,
  loadRoads: true
})

// 初始化场景特效
esmap.ESEffectTool.init({
  onlineEffectThemeId: 'E2001',
  loadRoads: true, // 是否加载特效主题的路网特效
  isSetRoomEffect: true, // 是否设置瓦片建筑特效
  isShowSkybox: true, // 是否展示天空盒
  isSetModelEffect: false, // 是否设置模型特效
  isOpenScreenEffect: true, // 是否开启全屏特效
})

// 初始化地图瓦片
esmap.ESTileMap.init({
  scaleLevel: 16, // 地图默认初始化缩放等级
  scaleLevelAnimate: false, // 地图初始化后层级变化动画, { targetLevel(目标缩放层级), duration(过渡时间) }
  openTileClick: true, // 是否开瓦片地图点击
  isShowWater: false // 是否应用瓦片水域特效
})

(由于篇幅原因,这里仅展示了部分初始化代码,想了解更多开发过程请前往 ESMap 在线开发

智慧城市数字孪生地图效果展示:

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

可以看到,初始化的地图非常炫酷。ESMap 城市三维地图目前支持非常多种特效,路网特效、天空盒特效、水域特效等等,示例中的夕阳天空盒子正是其中的一种,如果想要在线体验更多炫酷的地图效果,欢迎前往 ESMap 资源广场

地图中加入气象观测点

为了能够实时监测深圳市的气象数据,在深圳市不同区域铺设气象观测物理设备,实时获取该区域的气象数据,同时在地图中加入对应的气象观测点,通过地图快捷获取在深圳市安置的物理设备的气象数据。

使用 ESMap 的 EffectMarker 向地图中创建气象观测点。

let marker = new esmap.ESEffectTool.EffectMarker(esmap.ESMarkerType.CYLINDER_SPREAD, {
  x: 12682109.602751743,
  y: 2574070.986672658,
  height: 40, // 离地板高度
  radius: 150, // 半径
  scanHeight: 120, // 扫描高度
  isShine: true, // 是否发光(需要开启开启全屏特效)
})

效果如下:

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

通过物理设备获取到的气象数据,然后使用图表展示获取到的数据,就能够实时展示深圳市的气象数据了。

智慧城市数字孪生数据展示

为了展示深圳的气温、降水等气象数据,这里搭配使用 Echarts 的仪表盘、折线图和柱状图,下面是气温、风力仪表盘的代码:

// 仪表盘
let myChart_3 = echarts.init(document.querySelector('.gauge'))
let option_3 = {
  series: [
    {
      type: 'gauge',
      min: 0,
      max: 40,
      startAngle: -30,
      endAngle: -270,
      progress: {
        show: true,
        width: 14,
      },
      radius: '60%',
      center: ['30%', '40%'],
      axisLine: {
        lineStyle: {
          width: 14,
        },
      },
      axisTick: {
        show: false,
      },
      splitLine: {
        distance: -12,
        length: 8,
        lineStyle: {
          width: 2,
          color: '#5F9EA0',
        },
      },
      itemStyle: {
        color: '#43EDFF',
        opacity: 0.6,
        shadowColor: 'rgba(0,138,255,0.45)',
        shadowBlur: 10,
        shadowOffsetX: 2,
        shadowOffsetY: 2,
      },
      pointer: {
        icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
        length: '12%',
        width: 20,
        offsetCenter: [0, '-60%'],
        itemStyle: {
          color: 'rgba(114,198,233,0.8)',
        },
      },
      axisLabel: {
        show: false,
      },
      anchor: {}, // 中心圆点
      title: {
        show: false,
      },
      detail: {
        valueAnimation: true,
        fontSize: 14,
        color: '#99CCFF',
        offsetCenter: [0, -10],
      },
      data: [
        {
          value: 33.5,
        },
      ],
    },
    {
      type: 'gauge',
      min: 0,
      max: 17,
      startAngle: 150,
      endAngle: -90,
      progress: {
        show: true,
        width: 14,
      },
      radius: '60%',
      center: ['70%', '40%'],
      axisLine: {
        lineStyle: {
          width: 14,
        },
      },
      axisTick: {
        show: false,
      },
      splitLine: {
        distance: -12,
        length: 8,
        lineStyle: {
          width: 2,
          color: '#5F9EA0',
        },
      },
      itemStyle: {
        color: '#43EDFF',
        opacity: 0.6,
        shadowColor: 'rgba(0,138,255,0.45)',
        shadowBlur: 10,
        shadowOffsetX: 2,
        shadowOffsetY: 2,
      },
      pointer: {
        icon: 'path://M12.8,0.7l12,40.1H0.7L12.8,0.7z',
        length: '12%',
        width: 20,
        offsetCenter: [0, '-60%'],
        itemStyle: {
          color: 'rgba(114,198,233,0.8)',
        },
      },
      axisLabel: {
        show: false,
      },
      anchor: {}, // 中心圆点
      title: {
        show: false,
      },
      detail: {
        formatter: '{value}',
        valueAnimation: true,
        fontSize: 14,
        color: '#99CCFF',
        offsetCenter: [0, -10],
      },
      data: [
        {
          value: 4,
          name: '风力等级',
        },
      ],
    },
  ],
}

气温、风力仪表盘效果展示:

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

由于温度折线图,湿度柱状图部分代码类似,这里就不贴出代码部分,直接展示实现效果。

温度折线图(展示全年每个月的平均高温和平均低温):

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

湿度柱状图 + 折线图(展示全年每个月的平均湿度和平均降雨量):

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

智慧城市数字孪生实现效果

最终深圳市的气象数据监测效果展示如下所示:

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

智慧城市数字孪生总结

以上就是 ESMap 城市三维地图在气象数据监测的实际应用。当然,除了气象数据监测,城市三维地图在智慧城市中还有更多实用的案例,比如车辆管控、人员管控等等。下篇文章 将介绍城市三维地图在车辆管控的应用。想要了解更多有关 ESMap 城市三维地图的案例,欢迎前往 ESMap 资源广场

Original: https://www.cnblogs.com/esmap/p/15076397.html
Author: 室内三维地图
Title: ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生



相关阅读

Title: 学习 | 聚类分析

一、什么是聚类分析

聚类原本是统计学的概念,现在属于机器学习中非监督学习的范畴,大多应用在数据挖掘、数据分析的领域。
从定义上讲,聚类就是针对大量数据或者样品,根据数据本身的特性研究分类方法,并遵循这个分类方法对数据进行合理的分类,最终将相似数据分为一组,也就是"同类相同、异类相异"。

二、聚类不是分类

分类是指有一个明确的划分标准,根据划分标准对对象集合进行分类;
聚类没有明确标准,需要靠算法判断数据之间的相似性,把相似的数据放在一起。
也就是说,在聚类结论出来之前,我们完全不知道每一类有什么特点,而是根据聚类的结果来判断聚成的这一类有什么特点。

三、聚类的方法

数据分析中常用K-Means聚类法。

1、确定分组数

K-Mcans聚类法中的K就是分组数,也就是我们希望通过聚类后得到多少个组类。比如我有下面六个数据,想要将这些数据分成两类,那么K=2 。
ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

; 2、随机选择K个值作为数据中心

这个数据中心的选择是完全随机的,也就是说怎么选择都无所谓,因为这里K=2,所以我们就以A和B两个为数据中心。

为了方便理解,我们可以制作一个散点图,将A、B作为数据中心。
ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

3、计算其他数值与数据中心的"距离"

既然选择了数据中心,那么它们的周围一定会有很多相似数据,怎么判断这些数据与其是不是相似呢?

这里我们要引入欧氏距离的概念,通俗点说欧氏距离就是多维空间中各个点之间的绝对距离,表明两点之间的距离远近,其公式为:
ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

如果是普通的二维数据,这个公式就直接变成了勾股定理,因此我们算出其他6个点距离A和B的距离,谁离得更近,谁与数据中心就是同一类。

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

所以,我们可以看出,C-H距离B的距离都比距离A更近,所以第一次分组为:

第一组:A
第二组:B、C、D、E、F、G、H

; 4、重新选择新的数据中心

得到了第一次分组的结果,我们再重复前两个步骤,重新选择每一组数据的数据中心。

第一组只有A,所以A仍然是数据中心;
第二组有7个数值,将这个7个数值的平均值作为新的数据中心,我们将其命名为P,计算平均坐标为(5.14 ,5.14)

5、再次计算其他数据与新数据中心的距离

还是直接计算勾股定理,计算出其他数据与A和P的欧氏距离,如下:
ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

我们可以看出这里面有的距离A近,有的距离P近,于是第二次分组为:

第一组:A、B
第二组:C、D、E、F、G、H

; 6、再次重新选择数据中心

这里就是老规矩了,继续重复前面的操作,将每一组数据的平均值作为数据中心:

第一组有两个值,平均坐标为(0.5 ,1),这是第一个新的数据中心,命名为O
第二组有六个值,平均值为(5.8 , 5.6),这是第二个新的数据中心,命名为Q

7、再次计算其他数据与新数据中心的距离

ESMap 城市三维地图在气象数据监测的应用-智慧城市数字孪生

这时候我们发现,只有A与B距离O的距离更近,其他6个数据都距离Q更近,因此第三次分组为:

第一组:A、B
第二组:C、D、E、F、G、H
经过这次计算我们发现分组情况并没有变化,这就说明我们的计算收敛已经结束了,不需要继续进行分组了,最终数据成功按照相似性分成了两组。

; 8、方法总结

重复 选择数据中心-计算距离-分组的流程直至数据分组不再变化

笔记参考

Original: https://blog.csdn.net/qq_45436365/article/details/122521476
Author: cx元
Title: 学习 | 聚类分析