日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

通过view实现实时监测数据的实时更新展示

發布時間:2024/3/12 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过view实现实时监测数据的实时更新展示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

在做項目的時候,經常會有實時監測數據的地圖展示,本文通過view實現實時監測數據的實時更新展示。

分析

對于實時監測數據,有以下兩個特點:1、監測設備的空間信息不發生變化;2、監測數據會實時發生變化。基于以上兩特點,在實際的服務發布中我們可以:1、將監測設備存儲為一張表;2、實時監測數據存儲為另外一張表;3、創建view,將設備和實時監測數據關聯起來;4、通過geoserver將view以圖層的方式發布出來。

實現

china_province(監測設備)

province_people(監測值)


通過上面兩張表模擬監測設備和實時監測數據,創建viewsql如下:

CREATE VIEW china_prov_people AS SELECTA .dzm,A . NAME,CAST (B.popu AS INTEGER),A .geom FROMchina_province A,province_people B WHEREA .dzm = B.dzm;

china_prov_people


在geoserver添加數據源,并將china_prov_people發布成圖層。

此處,為了能夠在mapboxGL中調用,同時勾選發布了矢量切片服務。

注意:在發布切片服務的時候需要設置一下緩存級別都為0,不然會有緩存,導致切片調用的時候無法實時更新。

最后,頁面調用,代碼如下:

<!DOCTYPE html> <html> <head><meta charset='utf-8' /><title>geoserver tile</title><meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /><link href="lib/mapbox-gl.css" rel="stylesheet" /><style>body { margin:0; padding:0; }#map { position:absolute; top:0; bottom:0; width:100%; }.tools {position: absolute;top: 20px;right: 20px;z-index: 9;background: white;padding: 10px;}</style> </head> <body> <div id='map'></div> <script src="lib/mapbox-gl.js"></script> <script src="../js/lib/jquery/1.11.2/jquery.min.js"></script> <script>var rootPath = 'http://localhost:63342/learn-demo/mapbox/lib/';var mapStyle = {"version": 8,"name": "Dark","sources": {"XYZTile": {"type": "raster","tiles": ['http://mt0.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}','http://mt1.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}','http://mt2.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}',],"tileSize": 256},'china_prov_people': {'type':'vector','scheme':'tms','tiles':['http://localhost:8081/geoserver/gwc/service/tms/1.0.0/lzugis%3Achina_prov_people@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf']}},"sprite": rootPath + "sprite","glyphs": rootPath + "fonts/{fontstack}/{range}.pbf","layers": [{"id": "XYZTile","type": "raster","source": "XYZTile","minzoom": 0,"maxzoom": 22},{'id': 'china_prov_people-fill','source': 'china_prov_people','source-layer': 'china_prov_people','type': 'fill','paint': {'fill-color': ['interpolate',['linear'],['get', 'popu'],100, '#9BFF69',1000, '#68E0E8',3000, '#A880FF',6000, '#FFD273',10000, '#E86D68'],'fill-opacity': 0.8}},{'id': 'china_prov_people-boundry','source': 'china_prov_people','source-layer': 'china_prov_people','type': 'line','paint': {'line-color': '#f6f6f6','line-width': 1.5}}]};map = new mapboxgl.Map({container: 'map',maxZoom: 18,minZoom: 0,zoom: 3.6,center: [104.578, 36.903],style: mapStyle,attributionControl: false});map.on('click', function (e) {const coords = e.lngLat;const r = [[e.point.x - 5, e.point.y - 5],[e.point.x + 5, e.point.y + 5],];const features = map.queryRenderedFeatures(r, {});console.log(features);}) </script></body> </html>

實現后如下:

我們將內蒙古(150000)的數據改一下(改之前2376,改之后10000),再看效果:

總結

以上是生活随笔為你收集整理的通过view实现实时监测数据的实时更新展示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。