1. 程式人生 > 其它 >防汛視覺化指揮平臺“一張圖”技術研究

防汛視覺化指揮平臺“一張圖”技術研究

系統主要功能包括基礎地圖操作,如圖形控制、物件選取、地圖縮放、空間量算、動態圖例、態勢標會等功能;資訊資源視覺化應用,包括水系,水庫,山洪災害村,山洪易澇點,地質災害點,汛期臨時避險場所和安置點,重點企業等,每張圖整合了一種本地業務資料進行地圖空間表達,資料以專題圖形式準確標繪在相應座標點上,每個重點部位掛載了相關防汛資料,資料高度整合並結合空間資料的應用,為輔助指揮提供直觀表達,可靠依據,責任人資訊直達,充分體現了防汛指揮的“一張圖”思想,使“一股繩”宗旨得意有效落實,構建了上下聯動,統一行動,快速反應的防汛救災體系;實時險情檢測,物聯網系統與GIS系統整合,實時調取點位視訊影象,監測資訊,設定閥值,關聯告警,建立健全一套完整的快速反應防汛救災體系。

圖:危險河流

圖:動態標會

圖:危險地標


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title data-i18n="resources.title_buffersAnalystJobService"></title>
<script type="text/javascript" include="jquery,bootstrap,widgets" src="../js/include-web.js"></script>
<style>
        .control {
            position: absolute;
            top: 50px;
            right: 10px;
        }

        #map {
            position: absolute;
        }
    </style>
</head>
<body style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;position: absolute;top: 0;">
<div id="map" style="width: 100%;height:100%"></div>
<div id="control" class="control" style='width:350px'>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title" data-i18n="resources.text_buffersAnalystJobService"></h3>
</div>
<div class="panel-body">
<div class="input-group">
<span class="input-group-addon"><span data-i18n="resources.text_inputData"></span><span data-i18n="[title]resources.text_requiredField" style="color: red;"> * </span> </span>
<input id="datasetName" type="text" class="form-control" value="samples_processing_newyorkPoint_P" />
</div>
<p></p>
<div class='input-group'>
<span class='input-group-addon' data-i18n="resources.text_analysisRange"></span>
<input id='bounds' type='text' class='form-control' value='-74.150, 40.550, -73.750, 40.950' />
</div>
<p></p>
<div class='input-group'>
<span class='input-group-addon' data-i18n="resources.text_bufferDistance"></span>
<input id='distace' type='text' class='form-control' value='15' />
</div>
<p></p>
<div class='input-group'>
<span class='input-group-addon' data-i18n="resources.text_bufferDistanceField"></span>
<input id='distanceField' type='text' class='form-control' value='pickup_latitude' />
</div>
<p></p>
<div class='input-group'>
<span class='input-group-addon' data-i18n="resources.text_bufferDistanceUnit"></span>
<select class='form-control' id='distanceUnit' name='distanceUnit'>
<option value='Meter' selected='selected'>Meter</option>
<option value='Kilometer'>Kilometer</option>
<option value='Yard'>Yard</option>
<option value='Foot'>Foot</option>
<option value='Mile'>Mile</option>
</select></div>
<p></p>
<div class='input-group'>
<span class='input-group-addon' data-i18n="resources.text_fusionField"></span>
<input id='dissoveField' type='text' class='form-control' value='pickup_longitude' />
</div>
<p></p>
<div align="right">
<input type="button" id='btn' class="btn btn-primary" data-i18n="[value]resources.text_analyst" />
</div>
</div>
</div>
</div>
<script type="text/javascript" src="../../dist/classic/include-classic.js"></script>
<script type="text/javascript">
        var host = window.isLocal ? window.server : "https://iserver.supermap.io";
        var resultLayer,
            processingsUrl = host + "/iserver/services/distributedanalyst/rest/v1/jobs",
            mapURL = host + "/iserver/services/map-world/rest/maps/World",
            map = new SuperMap.Map("map", {
                controls: [
                    new SuperMap.Control.Navigation(),
                    new SuperMap.Control.Zoom(),
                    new SuperMap.Control.LayerSwitcher()

                ],
                allOverlays: true
            });
        map.addControl(new SuperMap.Control.MousePosition());
        var layer = new SuperMap.Layer.TiledDynamicRESTLayer("World", mapURL, null, {
            maxResolution: "auto"
        });
        layer.events.on({
            "layerInitialized": addLayer
        });

        function addLayer() {
            map.addLayers([layer]);
            map.setCenter(new SuperMap.LonLat(-73.95, 40.75), 12);
        }

        var processingService = new SuperMap.REST.ProcessingService(processingsUrl, {
            withCredentials: window.isLocal
        });
        SuperMap.SecurityManager.registerToken(processingsUrl, window.exampleToken);

        function getBounds() {
            if ($('#bounds').val() === "") {
                return "";
            }
            var bounds = [];
            $('#bounds').val().split(',').map(function (el) {
                bounds.push(parseFloat(el));
            });
            return new SuperMap.Bounds(
                bounds[0],
                bounds[1],
                bounds[2],
                bounds[3]
            );
        }

        $('#btn').on('click', function () {
            if ($('#msg_container')[0]) {
                $('#msg_container').remove();
            }
            widgets.loader.showLoader();
            if (map && resultLayer) {
                map.removeLayer(resultLayer);
            }
            var buffersAnalystJobsParameter = new SuperMap.BuffersAnalystJobsParameter({
                datasetName: $('#datasetName').val(),
                bounds: getBounds(),
                distance: $('#distace').val(),
                distanceField: $('#distanceField').val(),
                distanceUnit: $('#distanceUnit option:selected').attr('value'),
                dissolveField: $('#dissoveField').val()
            });
            processingService.addBuffersJob(buffersAnalystJobsParameter, function (serviceResult) {
                if (serviceResult.error) {
                    widgets.loader.removeLoader();
                    var errorMsg = serviceResult.error.errorMsg || "code: " + serviceResult.error.code;
                    widgets.alert.showAlert(resources.msg_createFailed + "<br>" + errorMsg, false);
                    return;
                }
                serviceResult.result.setting.serviceInfo.targetServiceInfos.map(function (info) {
                    if (info.serviceType === 'RESTMAP') {
                        SuperMap.FetchRequest.get(info.serviceAddress + '/maps').then(function (
                            response) {
                            return response.json();
                        }).then(function (result) {
                            var mapUrl = result[0].path;
                            resultLayer = new SuperMap.Layer.TiledDynamicRESTLayer(
                                "resultLayer", mapUrl, {
                                    transparent: true
                                });
                            resultLayer.events.on({
                                "layerInitialized": addLayer
                            });

                            function addLayer() {
                                map.addLayer(resultLayer);
                                widgets.loader.removeLoader();
                            }
                        });
                    }
                });
            });
        });
    </script>
</body>
</html>