首页 > 其他分享 >【GeoEvent】实现点要素服务几何信息联合StreamServer流服务数据信息绑定

【GeoEvent】实现点要素服务几何信息联合StreamServer流服务数据信息绑定

时间:2024-09-09 10:24:20浏览次数:8  
标签:StreamServer 服务 socket color buffer new esri data GeoEvent

数据情况

通过sid字段挂接,35个一组

数据流结构 CSV

image-20240905135654-isgnkg1

IOT点位数据

image-20240905135851-5ok72jh

点位数据提前发布为FeatureServer要素服务

注意关联字段类型与GeoEvent定义一致

image-20240905141736-myvges8

image-20240905141718-m8u9rox

创建GeoEvent定义(数据结构)

根据数据流结构决定,注意关联字段与GeoEvent定义一致

image-20240905140107-7bn7pau

创建TCP接收器

image-20240905140251-3iuy15z

image-20240905140457-e5j8rvi

推送csv数据

import socket
import time

# 指定服务器的IP地址和端口号
server_ip = '192.168.1.142'
server_port = 5565

# 创建一个socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
client_socket.connect((server_ip, server_port))

while True:
    # 打开CSV文件
    with open('stationRealTime.csv', 'r') as file:
        # 跳过标题行
        next(file)
        # 初始化行计数器
        line_count = 0
        # 初始化数据缓存
        data_buffer = ''
    
        for line in file:
            # 将当前行添加到数据缓存
            data_buffer += "STA," + line
            line_count += 1
                
            # 每35行或文件末尾,发送数据
            if line_count == 35:
                # 发送数据
                client_socket.sendall(data_buffer.encode('utf-8'))
                print(data_buffer)
                # 清空数据缓存和行计数器
                data_buffer = ''
                line_count = 0
                # 等待1秒``
                time.sleep(1)
    
        # 发送剩余的数据(如果有)
        if data_buffer:
            client_socket.sendall(data_buffer.encode('utf-8'))
            print(data_buffer)
            time.sleep(1)


client_socket.close()

image-20240905140556-zjrvi7d

创建StreamService输出器

image-20240905140840-41yo099

image-20240905141002-b9hqz3p

选择关联要素

image-20240905141642-joocl9y

创建GeoEvent定义

image-20240909095132-9njbeb8

前端页面构建

主要实现:

  1. class-breaks 根据data分级渲染
  2. popupTemplate 点击弹窗显示 sid 、data
  3. boatLabelClass 标注 data 值
<html lang="zh-cn">

<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="initial-scale=1,
      maximum-scale=1,user-scalable=no" />
  <title>StreamLayer | Sample </title>
  <style>
    html,
    body,
    #viewDiv {
      height: 100%;
      width: 100%;
      margin: 0;
      padding: 0;
    }

    #streamLayerDiv {
      padding: 10px;
      background-color: #f5f5f5;
    }
  </style>
  <link rel="stylesheet" href="https://js.arcgis.com/4.30/esri/themes/light/main.css" />
  <script src="https://js.arcgis.com/4.30/"></script>
  <script>
    require([
      "esri/Map",
      "esri/views/MapView",
      "esri/layers/StreamLayer",
      "esri/geometry/Polygon",
      "esri/Graphic",
      "esri/widgets/LayerList",
      "esri/core/reactiveUtils",
      "esri/layers/support/LabelClass",
       "esri/widgets/Legend"
    ], (Map, MapView, StreamLayer, Polygon, Graphic, LayerList, reactiveUtils, LabelClass, Legend) => {
      let streamLayer, streamLayerView;

      const svcUrl = "https://ip142.gsgz.com:6443/geoscene/rest/services/station-stream-out/StreamServer";

      const map = new Map({
        basemap: "gray-vector"
      });

      const view = new MapView({
        container: "viewDiv",
        map: map,
        center: [113, 23],
        zoom: 9
      });
      view.ui.add(new LayerList({ view }), "bottom-left");
  
      let renderer2 = {
        type: "class-breaks",
        field: "data",
        classBreakInfos: [
          {
            minValue: 100,
            maxValue: 300,
            symbol: {
              type: "simple-marker",
              size: 10,
              color: "red",
              outline: {
                color: [0, 255, 0],
                width: 1
              }
            }
          },
          {
            minValue: 300,
            maxValue: 600,
            symbol: {
              type: "simple-marker",
              size: 10,
              color: "yellow",
              outline: {
                color: [0, 255, 0],
                width: 1
              }
            }
          },
          {
            minValue: 600,
            maxValue: 1000,
            symbol: {
              type: "simple-marker",
              size: 10,
              color: "green",
              outline: {
                color: [0, 255, 0],
                width: 1
              }
            }
          }
        ],
        defaultSymbol :{
          type: "simple-marker",
          size: 10,
          color: "blue",
        }
      }

      const boatLabelClass = new LabelClass({
        labelExpressionInfo: { expression: "$feature.data" },
        symbol: {
          type: "text",  // autocasts as new LabelSymbol3D()
          symbolLayers: [{
            type: "text",  // autocasts as new TextSymbol3DLayer()
            material: { color: [ 49,163,84 ] },
            size: 12  // points
          }]
        }
      });

      // Construct Stream Layer
      const layer = new StreamLayer({
        url: svcUrl,
        purgeOptions: {
          displayCount: 10000
        },
        popupTemplate: {
          title: "{status}",
          content: "{sid}, {data}"
        },
        renderer: renderer2,
        labelingInfo : [boatLabelClass],
        timeInfo: {
          trackIdField: "sid"
        }
      });

      map.add(layer);


      const legend = new Legend({
          view: view
        });

      view.ui.add(legend, "top-left");


    });
  </script>
</head>

<body>
  <div id="viewDiv"></div>
</body>

</html>

验证

StreamServer订阅

StreamServer流服务不带位置信息

image-20240909095253-7y03koi

前端页面

值动态变化,实现数据流绑定点位

PixPin_2024-09-09_10-17-31-20240909101801-pzowrrt

标签:StreamServer,服务,socket,color,buffer,new,esri,data,GeoEvent
From: https://www.cnblogs.com/wongjzzz/p/18404055

相关文章

  • 《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上
    ⭐️基础链接导航⭐️服务器→☁️阿里云活动地址看样例→......
  • 基于SpringBoot的离退休干部综合服务平台的设计与实现
    系统的实现应具备如下功能点:用户:注册与登录:允许离退休干部注册账户并登录,提供用户友好的界面和服务。信息发布:用户可以查看发布与离退休干部相关的各类信息,如政策通知、养生知识、活动通告等。互动交流:提供社交平台,使离退休干部能够分享经验、交流思想、进行讨论。健康资......
  • RocketMQ5部署单节点服务
    关于RocketMQ的单节点部署官方文档已经描述得非常清楚了,这里只是做一个简单的备忘。如下安装步骤均基于最新的ApacheRocketMQ5.3.0实现。下载安装RocketMQ直接下载官方编译后的二进制包到本地并解压。$unziprocketmq-all-5.3.0-bin-release.zip默认情况下,启动RocketMQ至......
  • 在Java服务端实现策略模式:如何灵活应对业务逻辑的多变性
    在Java服务端实现策略模式:如何灵活应对业务逻辑的多变性大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java服务端开发中,业务逻辑的复杂性和多变性常常需要灵活的设计模式来应对。策略模式是一种经典的设计模式,用于定义一系列算法,将每一个算法封装......
  • 如何在Java服务中实现分布式ID生成:雪花算法与UUID的对比
    如何在Java服务中实现分布式ID生成:雪花算法与UUID的对比大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代分布式系统中,唯一标识符(ID)的生成是一个关键问题。常见的ID生成方案包括雪花算法(Snowflake)和UUID(通用唯一识别码)。本文将对这两种方案进行详......
  • 如何在Java服务中实现自动化的健康检查与自愈机制
    如何在Java服务中实现自动化的健康检查与自愈机制大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代Java服务中,实现健康检查与自愈机制是保障系统稳定性和可靠性的重要措施。本文将介绍如何在Java服务中实现自动化的健康检查与自愈机制,并通过实际......
  • Java中的请求幂等性处理:如何确保服务端的操作重复安全
    Java中的请求幂等性处理:如何确保服务端的操作重复安全大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在服务端开发中,请求幂等性是确保系统稳定性和可靠性的关键因素之一。请求幂等性意味着一个操作可以重复执行多次,但其结果不会改变,这对于避免重复提......
  • 通过平台工程提高微服务测试质量
    通过平台工程提高微服务测试质量背景微服务架构的多样性导致了测试过程中的不统一和效率低下。各团队可能使用不同的编程语言和工具链,导致重复工作和成本增加。非标准测试方法会危及系统的可靠性和整体质量。   为了提高工程效率、降低成本并提高系统可靠性,标准化测试流程是......
  • 春意融融:SpringBoot打造在线订餐服务
    1绪论1.1研究背景随着互联网技术的快速发展,网络时代的到来,网络信息也将会改变当今社会。各行各业在日常企业经营管理等方面也在慢慢的向规范化和网络化趋势汇合[13]。电子商务必将成为未来商务的主流,因此对于餐饮行业来说,建立一个网上订餐系统是必不可少的一种销售模式;......
  • Android平台轻量级RTSP服务之GStreamer还是SmartRtspServer
    技术背景Android上启动一个轻量级RTSP服务,让Android终端像网络摄像头一样提供个外部可供RTSP拉流的服务,在内网小并发又不希望部署单独流媒体服务的场景下非常适用,在Android终端实现这样的流媒体服务,决定了,只能是轻量级的服务。可以通过集成第三方库或编写自定义的RTSP服务器代码来......