《深圳市宝安区GIS》项目研发阶段性总结

一、功能实现
说明:主要是对该地区的医院分布进行查询,利用图标显示在地图上,可查看医院的详细信息,点击“周边分析”可以进行周边查询。
1、 首先要加载地图,再创建图层标记类,然后添加图层到地图上
在这里插入图片描述
图1
2、 勾选医院分布图层管理,在地图上显示医院图标,在你查询的范围内显示,也就是根据你查询的条件查询出相应的地理位置,并加以显示。注意在查询的过程中,难免会出现一些小错误,比如图层名称的格式:数据集名称@数据源别名,这里还有一点就是它是否为你设置专题图的那个别名(如P15医疗服务_point@BaoAnQu#1),我们有时就会忽略“#1”,因此就不会显示在地图上;SQL查询服务类,说的是在一个或多个指定的图层上查询符合SQL查询条件的空间地物信息,所以在你的指定的查询范围内给出合理的条件,通过监听事件来触发它查询成功的方法,或是失败时的方法,再通过异步加载出来(如图2)
在这里插入图片描述
图2
3、 点击图标,查看医院详细信息。在SQL查询成功的方法中注册一个点击事件,弹出它的详细信息,在弹出框里写你需要显示的内容,以及想要的样式(如图3)
在这里插入图片描述
图3
4、 点击周边分析,中心点数据回填,可进行周边查询。我们在弹窗的详细信息中,设置所在位置的坐标轴,在弹窗中显示,当点击周边分析按钮时,坐标回填到中心点文本框,再选择你要查询的目标,点击查询,就可以进行周边查询了。 (如图4)
在这里插入图片描述
图4
二、相关代码
UIL层代码:

  var map, layer, heatMapLayer, markerHospital
  url = "http://localhost:8090/iserver/services/map-ShenZhenBaoAnQu/rest/maps/深圳宝安区@BaoAnQu";
  
    function init() {
        map = new SuperMap.Map("map", {
            controls: [
            new SuperMap.Control.LayerSwitcher(),
            new SuperMap.Control.ScaleLine(),
            new SuperMap.Control.PanZoomBar(),//平移缩放类。 用于平移缩放地图,默认情况下垂直显示在地图左上角。
            new SuperMap.Control.Navigation({
                dragPanOptions: {
                    enableKinetic: true
                }
            })]
        });
        map.addControl(new SuperMap.Control.MousePosition());
        layer = new SuperMap.Layer.TiledDynamicRESTLayer("BaoAnQu", url, { transparent: true, cacheEnabled: true }, { maxResolution: "auto" });
        //初始化标记图层类(创建图层)
        markerHospital = new SuperMap.Layer.Markers("医院分布图层管理", { visibility: false });//SuperMap.Layer图层类。SuperMap.Layer.Markers标记图层类
        layer.events.on({ "layerInitialized": addLayer });
    }
    
    //添加图层  异步加载
    function addLayer() {
        map.addLayers([layer,markerHospital]);
        map.setCenter(new SuperMap.LonLat(0, 0), 0);
        queryBySQL();
    }
    
    //SQL查询
    function queryBySQL() {
        var queryParam, queryBySQLParams, queryBySQLService;
        // 初始化查询参数
        queryParam = new SuperMap.REST.FilterParameter({
            name: "P15医疗服务_point@BaoAnQu#1",
            attributeFilter: "TYPE=7280 and NAME like '%医院%'"//属性过滤条件  相当于 SQL 语句中的 WHERE 子句
        }),
        // 初始化sql查询参数
        queryBySQLParams = new SuperMap.REST.QueryBySQLParameters({
            queryParams: [queryParam]
        }),
        // SQL查询服务
        queryBySQLService = new SuperMap.REST.QueryBySQLService(url, {
            eventListeners: { "processCompleted": processCompletedHospital, "processFailed": processFailedHospital }
        });
        queryBySQLService.processAsync(queryBySQLParams);

    }
    
    //SQL查询(医院)成功时触发此事件
    function processCompletedHospital(obj)//在地图上显示医院站点地标
    {
        var result = obj.result;
        var feature, x, y;//Feature 类同时具有 marker 和 lonlat 属性
        if (result && result.recordsets) {
            for (i = 0, recordsets = result.recordsets, len = recordsets.length; i < len; i++) {
                if (recordsets[i].features) {//存放结果集合
                    for (j = 0; j < recordsets[i].features.length; j++) {
                        feature = recordsets[i].features[j];//SuperMap.Feature 要素类组合了地理和属性,Feature 类同时具有 marker 和 lonlat 属性 
                        x = feature.geometry.x;
                        y = feature.geometry.y;
                        size = new SuperMap.Size(17, 20),
                        offset = new SuperMap.Pixel(-(size.w / 2), -size.h);//SuperMap.Pixel此类用x,y坐标描绘屏幕坐标(像素点)。
                        icon = new SuperMap.Icon("../Content/images/yiyanlogin.png", size, offset);
                        LocalMarker = new SuperMap.Marker(new SuperMap.LonLat(x, y), icon);//SuperMap.Marker标记覆盖物,对地图上的点进行标注,可以自定义选择标注的图标,需添加到 Markers 图层上显示 
                        LocalMarker.name = feature.data.NAME;//医院名称
                        LocalMarker.laction = "广东省深圳宝安区" + feature.data.ADDRESS;//医院地址 
                        //添加到图层上
                        markerHospital.addMarker(LocalMarker);
                        //注册 click 事件,触发 mouseClickHospital()方法
                        LocalMarker.events.on({
                            "click": mouseClickHospital,
                            "touchstart": mouseClickHospital, //假如要在移动端的浏览器也实现点击弹框,则在注册touch类事件
                            "scope": LocalMarker//范围
                        });
                    }
                }
            }
        }
    }
      
    //SQL查询(医院)失败时出发的事件
    function processFailedHospital(e) {
        alert(e.error.errorMsg);
    }
     
    //定义mouseClickHospital函数,触发click事件会调用此函数
    //弹出医院详细信息
    function mouseClickHospital(LocalMarker) {
        closeInfoHospital();//关闭弹出窗
        var marker = this;
        var xAxis;//X轴
        var yAxis;//Y轴
        if (LocalMarker.bool == true) {
            xAxis = LocalMarker.lonlat.lon;
            yAxis = LocalMarker.lonlat.lat;
        } else {
            xAxis = marker.getLonLat().lon;
            yAxis = marker.getLonLat().lat;
        }
        popup = new SuperMap.Popup(//SuperMap.Popup弹窗类
        "chicken",
        new SuperMap.LonLat(xAxis, yAxis),//SuperMap.LonLat 这个类用来表示经度和纬度对
        new SuperMap.Size(300, 235),
         "<div class='popwin_titleDiv' style=''><span class='popwin_title'>医院分布图层管理</span></div>" +
         "<div style=overflow:hidden;overflow:auto;color:#000;height:auto;text-align:center; margin:auto 0px;'>" +
         '[外链图片转存失败(img-D9KdSrir-1562146677925)(https://mp.csdn.net/Content/images/%E7%96%BE%E7%97%85%E9%98%B2%E6%8E%A7%E7%B1%BB.jpg)]<br/><br/>' +
         '<span style="margin-left: 0px;">医院名称:' + LocalMarker.object.name + "</span><br/>" + '<span style="margin-left: 0px">医院地址:' + LocalMarker.object.laction +
         "</span>" + '<span style="margin-left: 0px;display:none;" id="xZB">' + xAxis + "</span><br/>" + '<span style="margin-left: 0px;display:none;" id="yZB">' + yAxis + "</span><button id='fat-btn' class='btn btn-primary' onclick='circumSelect()'>周边分析</button></div>",
        true,
        null
        );
        console.log(LocalMarker.object.name);
        console.log(LocalMarker.object.laction);
        //设置弹窗的边框样式
        popup.setBorder("solid 2px #6CA6CD");
        infowin = popup;
        //添加弹窗到map图层
        map.addPopup(popup);
    }
    
    var infowin;
    //关闭弹窗
    function closeInfoHospital() {
        if (infowin) {
            try {
                infowin.hide();
                infowin.destroy();
            }
            catch (e) { }
        }
    }

   //周边查询
  function circumSelect() {
     $("#Show").click();
      $("#bounds").click();
      //地图弹框的坐标值 数据回填
      var xZB = $("#xZB").text();
      var yZB = $("#yZB").text();
      $("#centralPoint").val(xZB + "-" + yZB);
}

四、开发总结
地理信息系统(GIS),它是以地理空间数据库为基础,对空间相关的数据进行采集、管理、操作、分析、显示,适时提供各种空间的动态的地理信息,为地理研究和决策服务建立起计算机技术系统。简单来说,GIS就是对地理空间数据进行一些系统操作,通过计算机技术对它进行研究和管理。当然,这只是我个人的理解,如果有什么不对的地方还请多指教!相信你们对GIS也有不同的理解。
第一次做GIS项目,有很多地方都不怎么懂,在所学的基础上加以巩固,这既是对我们的锻炼也体现了我们的自学能力,有些东西光是照本宣科的教是没有什么好处的,关键是我们自己,其实老师说的对,他们教的只是方法,最重要的是我们能如何利用,这才是重点。从制作地图到发布地图,再到页面上显示,在对地图进行一系列操作,看似简单好像也没那么简单,还是花了很长的时间,有时候结果似乎也没那么重要,重要的是过程,而在这个过程中又学到了什么,学习过程中会遇到很多bug,我们需要找到它的侧重点,对它进行一步一步的调试,虽然有点繁琐,但是在解决bug的时候我们会学到很多东西,这是值得庆幸的,不要懊恼bug的存在,因为bug才更有乐趣。学的慢与快也不重要,重要的是你是否坚持了,所以坚持才是学下去的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值