基于物联网技术智慧园林绿化养护管理信息平台

        近几年来,随着经济不断的发展,城市面积不断的扩大,城市管理中的园林绿化工作也在这种趋势下不断的发生着深刻改变。管养企业是否按制定的管养计划严格执行?绿化事件整改是否及时到位?绿地面积是否在稳步增长?管养的效果如何?如何客观评价管养企业的管养工作?这些都是我们各级管理者需要面对的问题。

  智慧园林绿化养护管理信息平台的开发思路以“考核”为核心,整个信息平台体现出“新、快、高、全、享”五个特点。

  智慧园林绿化养护管理信息平台的整个开发理念为:依托五大技术手段(全球卫星定位系统技术、地理信息系统技术、互联网、数据库技术、物联网技术),打造一个“智能化、可视化、流程化”的智慧园林绿化养护管理信息平台。本平台基于超图SuperMap GIS 9D平台开发而成。

  智慧园林绿化养护管理信息平台是集硬件、网络、通信、物联网、互联网、GPS、GIS、大数据、云计算等多种信息技术应用为一体的综合性信息平台。

  平台功能包括:

  一、 绿地信息系统

  采用无人机测绘,获得了绿地高清二维影像;采用倾斜摄影技术,快速生成三维模型,获得高清三维影像;将绿地网格的信息标注到高清二维影像中,所有绿地信息直观展现在平台中,实现了绿色资产可视化。

  

 

  二、 巡查事件管理系统

  开发了手机APP,在手机上完成日常监督管理工作,提供养护事件上报、处理、审核全流程可视,处理时限可控,通过文字与图片的结合,形成一个完整的管理闭环。

  

 

  三、 考评考核系统

  按照“双随机”的考核要求,系统提供考核地点和考核专家在平台中可随机抽取;提供周检查信息表,月度考核信息表、季度考评信息表和历次考核信息统计;按照考评考核的权重,直接在系统中生成养护公司的打分结果,以此作为对各养护公司管养能力客观评价的重要依据,杜绝了人为因素的干扰。

  四、 物联网系统

  在绿化带中部署温湿度传感器、电导率、土壤盐度传感器,平台可实时显示土壤的温湿度以及肥力等信息;预先设置好上下限阈值,当传感器数值低于或高于设定的阈值时,平台自动发出告警信息,提示相关人员及时进行处理;平台还提供了联结视频监控探头的接口,提供绿化设施和绿地情况的实时监控图像,丰富了平台的监管内容。

  未来扩展应用还可远程控制喷灌系统开闭、病虫害监控等。

  五、绿色图章系统

  平台提供绿色图章申请资料上传,绿色图章审批,绿色图章验收,移植树木审批,绿地占用审批,树木修剪、砍伐审批等业务流程,彻底改变了以往人工报送的低效率工作方式,真正体现了让数据多跑路,让群众少跑腿的服务理念。

  六、其他扩展功能

  作为智慧园林绿化养护管理信息平台的有益补充,还开发了微信公众号用于发布园林绿化工作动态、普及园林知识、收集公众反馈意见和建议,与市民形成良性互动、共建共管机制。

  由于本平台目前在国内城管领域处于行业领先水平,当地政府主流媒体均作了报道。

  

 


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title data-i18n="resources.title_popDensityRange"></title>
<style type="text/css">
        body {
            margin: 0;
            overflow: hidden;
            background: #fff;
            width: 100%;
            height: 100%
        }

        #map {
            position: absolute;
            width: 100%;
            height: 100%;
        }
        /*图例 style*/
        .legend {
            position: absolute;
            right: 10px;
            top: 350px;
            width: 250px;
            text-align: center;
            border: 2px solid #D6E3F1;
            background: #FFF;
            z-index: 999999;
            display: none;
        }

        .legendTitle {
            background: #1E90FF;
        }

        .legendContent {
            padding-left: 15px;
            padding-right: 15px;
            height: 160px;
            display: block;
            overflow-y: auto;
        }

        .legendItemHeader {
            top: 5px;
            width: 100px;
            height: 18px;
            text-align: center;
        }

        .legendItemValue {
            top: 5px;
            width: 120px;
            text-align: center;
            height: 18px;
        }

        /*信息框 style*/
        #infoBox {
            border: 2px solid #D6E3F1;
            position: absolute;
            right: 10px;
            top: 250px;
            width: 250px;
            z-index: 999999;
            display: none;
        }

        .editPane {
            position: absolute;
            right: 60px;
            top: 50px;
            text-align: center;
            background: #FFF;
            z-index: 1000;
        }
    </style>
</head>
<body>
<div class='panel panel-primary editPane' id='editPane' style="z-index: 99999">
<div class='panel-heading'>
<h5 class='panel-title text-center' data-i18n="resources.text_graduatedSymbol"></h5>
</div>
<div class='panel-body' id='params'>
<p></p>
<div align='right' class='button-group'>
<input type='button' id='btn1' class='btn btn-primary' data-i18n="[value]resources.btn_addThemeLayer" onclick="addThemeLayer()"/>
<input type='button' id='btn2' class='btn btn-primary' data-i18n="[value]resources.btn_updateData" onclick="updateData()"/>
<input type='button' id='btn3' class='btn btn-primary' data-i18n="[value]resources.text_input_value_clear" onclick="clearLayer()"/>
</div>
</div>
</div>
<div>
<div id="map"></div>
<div id="mapLegend" class="legend">
<div class="legendTitle">
<span data-i18n="resources.text_legend"></span>
</div>
<div class="legendContent">
<table>
<tr>
<td class="legendItemHeader" data-i18n="resources.text_populationDensity"></td>
<td class="legendItemValue" data-i18n="resources.text_color"></td>
</tr>
<tr>
<td class="legendItemHeader">0 - 0.02</td>
<td class="legendItemValue" style="background: #FDE2CA"></td>
</tr>
<tr>
<td class="legendItemHeader">0.02 - 0.04</td>
<td class="legendItemValue" style="background: #FACE9C"></td>
</tr>
<tr>
<td class="legendItemHeader">0.04 - 0.06</td>
<td class="legendItemValue" style="background: #F09C42"></td>
</tr>
<tr>
<td class="legendItemHeader">0.06 - 0.1</td>
<td class="legendItemValue" style="background: #D0770B"></td>
</tr>
<tr>
<td class="legendItemHeader">0.1 - 0.2</td>
<td class="legendItemValue" style="background: #945305"></td>
</tr>
</table>
</div>
</div>
<div id="infoBox">
<div data-i18n="resources.text_attributeTable" style="text-align: center;background: #1E90FF"> </div>
<div id="infoContent" style="overflow-y: auto; padding: 5px; background-color: #FFFFFF">
</div>
</div>
</div>
<script type="text/javascript" include="bootstrap,widgets.alert" src="../js/include-web.js"></script>
<script type="text/javascript" exclude="iclient-classic" src="../../dist/classic/include-classic.js"></script>
<script type="text/javascript">
    var host = window.isLocal ? window.server : "https://iserver.supermap.io",
        url1 = host + "/iserver/services/map-jingjin/rest/maps/京津地区地图",
        url2 = host + "/iserver/services/data-jingjin/rest/data";
    var map, layer, themeLayer;
    // 检测是否支持 Canvas
    if (!document.createElement('canvas').getContext) {
        widgets.alert.showAlert(resources.msg_supportCanvas, false);
    }

    map = new SuperMap.Map("map", {
        controls: [
            new SuperMap.Control.LayerSwitcher(),
            new SuperMap.Control.ScaleLine(),
            new SuperMap.Control.Zoom(),
            new SuperMap.Control.Navigation({
                dragPanOptions: {
                    enableKinetic: true
                }
            })]
    });
    layer = new SuperMap.Layer.TiledDynamicRESTLayer("Jingjin", url1, {
        transparent: true,
        cacheEnabled: true
    }, {maxResolution: "auto"});
    layer.events.on({"layerInitialized": addLayer});

    // 定义 Range 分段专题图层
    themeLayer = new SuperMap.Layer.Range("ThemeLayer");
    themeLayer.setOpacity(0.8);

    // 图层基础样式
    themeLayer.style = {
        shadowBlur: 16,
        shadowColor: "#000000",
        fillColor: "#FFFFFF"
    };

    // 开启 hover 高亮效果
    themeLayer.isHoverAble = true;
    // hover高亮样式
    themeLayer.highlightStyle = {
        stroke: true,
        strokeWidth: 4,
        strokeColor: 'blue',
        fillColor: "#00EEEE",
        //shadowBlur: 6,
        //shadowColor: "#000000",
        //shadowOffsetX: 6,
        //shadowOffsetY: 6,
        fillOpacity: 0.8
    };

    // 用于范围分段的属性字段名称
    themeLayer.themeField = "POP_DENSITY99";
    // 风格数组,设定分段范围对应的样式
    themeLayer.styleGroups = [
        {
            start: 0,
            end: 0.02,
            style: {
                color: '#FDE2CA'
            }
        },
        {
            start: 0.02,
            end: 0.04,
            style: {
                color: '#FACE9C'
            }
        },
        {
            start: 0.04,
            end: 0.06,
            style: {
                color: '#F09C42'
            }
        },
        {
            start: 0.06,
            end: 0.1,
            style: {
                color: '#D0770B'
            }
        },
        {
            start: 0.1,
            end: 0.2,
            style: {
                color: '#945305'
            }
        }
    ]

    // 注册 mousemove 事件
    themeLayer.on("mousemove", evn);

    function addLayer() {
        map.addLayers([layer, themeLayer]);
        map.setCenter(new SuperMap.LonLat(117.2, 40.11), 0);
    }

    //获取 feature 数据, 专题图的数据必须是 SuperMap.Feature.Vector
    function addThemeLayer() {
        clearLayer();

        var getFeatureParam, getFeatureBySQLService, getFeatureBySQLParams;

        getFeatureParam = new SuperMap.REST.FilterParameter({
            name: "Jingjin",
            attributeFilter: "SMID > -1"
        });
        getFeatureBySQLParams = new SuperMap.REST.GetFeaturesBySQLParameters({
            queryParameter: getFeatureParam,
            toIndex: 500,
            datasetNames: ["Jingjin:BaseMap_R"]
        });
        getFeatureBySQLService = new SuperMap.REST.GetFeaturesBySQLService(url2, {
            eventListeners: {"processCompleted": processCompleted, "processFailed": processFailed}
        });

        getFeatureBySQLService.processAsync(getFeatureBySQLParams);
    }

    function processCompleted(getFeaturesEventArgs) {
        var result = getFeaturesEventArgs.result;
        if (result && result.features) {
            themeLayer.addFeatures(result.features);
        }

        //显示图例
        document.getElementById("mapLegend").style.display = "block";
    }

    function processFailed(e) {
        widgets.alert.showAlert(e.error.errorMsg, false);
    }

    function clearLayer() {
        document.getElementById("mapLegend").style.display = "none";
        document.getElementById("infoBox").style.display = "none";
        //先清除上次的显示结果
        themeLayer.clear();
    }

    // 更新显示数据
    function updateData() {
        var feas = themeLayer.features;
        for (var i = 0, len = feas.length; i < len; i++) {
            var fea = feas[i];
            fea.attributes.POP_DENSITY99 = getRandomNumber(0, 0.2, 5);
        }
        themeLayer.redraw();
    }

    // 获取范围内的随机数
    // min - 范围下限
    // max - 范围上限
    // decimalNum - 返回结果的小数位数。如果为 0,返回整数。
    function getRandomNumber(min, max, decimalNum) {
        var rNum = min + Math.random() * (max - min);

        if (decimalNum) {
            if (!isNaN(decimalNum)) {
                return rNum;
            }
            else {
                decimalNum = parseInt(decimalNum);
            }

            if (decimalNum === 0) {
                return Math.round(rNum);
            }
            else {
                return parseFloat(rNum).toFixed(decimalNum);
            }
        }
        else {
            return rNum;
        }
    }

    //事件处理,控制信息框数据显示
    function evn(e) {
        if (e.target && e.target.refDataID) {
            document.getElementById("infoBox").style.display = "block";
            var fid = e.target.refDataID;
            var fea = themeLayer.getFeatureById(fid);
            if (fea) {
                document.getElementById("infoContent").innerHTML = "";
                document.getElementById("infoContent").innerHTML += "ID: " + fea.attributes.SMID + "<br/>";
                document.getElementById("infoContent").innerHTML += resources.text_districtName + fea.attributes.NAME + "<br/>";
                document.getElementById("infoContent").innerHTML += resources.text_populationDensity + ": " + parseFloat(fea.attributes.POP_DENSITY99).toFixed(5) + "<br/>";
            }
        }
        else {
            document.getElementById("infoContent").innerHTML = "";
            document.getElementById("infoBox").style.display = "none";
        }
    }
</script>
</body>
</html>


posted @ 2021-07-05 09:18  GCloud_Blog  阅读(320)  评论(0编辑  收藏  举报