iServer RestApi实现连通性判断

iServer RestApi实现连通性判断

作者:yangjl

曾经有个客户小伙伴问过我,如何实现连通性分析了?为什么没有提供封装好的接口呢。其实restapi中是提供了connectedEdges这个连通性的方法的,它可查找与给定结点或者弧段相连通的弧段,但是这个返回的结果往往不满足于实际的需要,一般情况下客户是希望能直接的得到连通结果,并且同时还能将分析出来的路线显示在地图上,这时候其实连通性分析的需求就可转为最佳路径分析的方式了。下面我将介绍如何提供restapi的方式利用最佳路径分析接口path来实现连通性的判断。

总体步骤:

  1. 利用iDesktop桌面软件制作路网。
  2. iServer发布网络分析服务。
  3. 通过restapi+iClient foropenlayer工具实现。

数据及服务准备:

  1. 数据制作
    (1)制作网络数据集并制作地图,具体方式可参考iDesktop .net帮助文档
    http://support.supermap.com.cn/DataWarehouse/WebDocHelp/SuperMap-iDesktop-Net3/index.html.
  2. 发布服务:
    (1)发布网络分析服务以及地图服务具体方式可参考前文博客,以及帮助文档
    http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iServer/index.htm.
    (2)发布网络分析服务以及地图服务具体方式可参考前文博客,以及帮助文档
    http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iServer/index.htm.

开发准备:

连通性分析呈现与实现,需要rest-api以及SuperMap iClient for Openlayer

  1. rest-api具体可参考iServer在线帮助文档地址:
    http://support.supermap.com.cn/DataWarehouse/WebDocHelp/iServer/index.htm.
  2. SuperMap iClient for Openlayer产品开发指南 地址:
    http://iclient.supermap.io/web/introduction/openlayersDevelop.html.

基于iClient for Openlayer实现连通性判断:

为代码简洁实现利用CDN在线引入Openlayer文件,进行单网页的开发。这里不在赘述引入方式,开发指南中有

  1. 加载地图
   map = new ol.Map({
        target: 'map',
        controls: ol.control.defaults({attributionOptions: {collapsed: false}})
            .extend([new ol.supermap.control.Logo()]),
        view: new ol.View({
            center: [90.42 , 38.36],
            zoom: 2,
            projection: 'EPSG:4326'
        })
    });
    var layer = new ol.layer.Tile({
        source: new ol.source.TileSuperMapRest({
            url: url,
            wrapX: true
        }),
        projection: 'EPSG:4326'
    });
    map.addLayer(layer);

  1. 添加draw控件,在地图上进行交互点击点,允许点两次一次起点,一次终点
draw=new ol.interaction.Draw({
                source: source_one,
                type: 'Point',
                snapTolerance: 20
            });
         map.addInteraction(draw);
         map.addLayer(vector_one);

        draw.on("drawend",function(e){
            cout++;
            console.log()
             points.push(e.feature.N.geometry.A)})


  1. 将draw控件点选出来的点坐标提取出来,并利用rest-api -path 资源执行 GET 请求,来判断两点之间是否连通。
                var entry={
                    nodes:JSON.stringify([nodes[0] ,nodes[1]]) ,
                   hasLeastEdgeCount: false,
                }
                $.ajax({
       url:'http://localhost:8090/iserver/services/transportationAnalyst-conne/rest/networkanalyst/conn_Network@conn/path.json',
                type:"get",
                data:entry,
                contentType:"application/x-www-form-urlencoded",
                success:function(e){
                    alert("两点连通")

                    console.log(e,"sucess");

                },
                error:function(e){
                    alert("两点不连通")
                     var res=JSON.parse(e.responseText)
                     console.log( res.error.errorMsg,'erro')
                }
             })


效果展示

在这里插入图片描述
全部代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/openlayers/4.6.5/ol.css" rel="stylesheet" />
    <link href='http://iclient.supermap.io/dist/openlayers/iclient-openlayers.min.css' rel='stylesheet' />
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/openlayers/4.6.5/ol.js"></script>
    <script type="text/javascript" src="http://iclient.supermap.io/dist/openlayers/iclient-openlayers.min.js"></script>
    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
</head>
<body  id="map" style=" margin: 0;overflow: hidden;background: #fff;width: 100%;height:100%;background-color: aqua">
    <script>
        var map,url = 'http://localhost:8090/iserver/services/map-conne/rest/maps/New_Line@conn';
          var cout=0,draw,points=[]
        
    map = new ol.Map({
        target: 'map',
        controls: ol.control.defaults({attributionOptions: {collapsed: false}})
            .extend([new ol.supermap.control.Logo()]),
        view: new ol.View({
            center: [90.42 , 38.36],
            zoom: 2,
            projection: 'EPSG:4326'
        })
    });
    var layer = new ol.layer.Tile({
        source: new ol.source.TileSuperMapRest({
            url: url,
            wrapX: true
        }),
        projection: 'EPSG:4326'
    });
    map.addLayer(layer);

    darw();

   function darw(){
     var nodes=[];
    var source_one = new ol.source.Vector({wrapX: false});
    var vector_one = new ol.layer.Vector({
        source: source_one
    });
    
    draw=new ol.interaction.Draw({
                source: source_one,
                type: 'Point',
                snapTolerance: 20
            });
         map.addInteraction(draw);
         map.addLayer(vector_one);

        draw.on("drawend",function(e){
            cout++;
            console.log()
             points.push(e.feature.N.geometry.A)
            if(cout>1)
            {
                clearInteraction();
              points.map(function(value){
                  //console.log(value)
                  nodes.push({
                      "x":value[0],
                      "y":value[1]
                  })
              })
              console.log(nodes)
                
                var entry={
                    nodes:JSON.stringify([nodes[0] ,nodes[1]]) ,
                    hasLeastEdgeCount: false,
                    
                }
                $.ajax({
                url:'http://localhost:8090/iserver/services/transportationAnalyst-conne/rest/networkanalyst/conn_Network@conn/path.json',
                type:"get",
                data:entry,
                contentType:"application/x-www-form-urlencoded",
                success:function(e){
                    alert("两点连通")

                    console.log(e,"sucess");

                },
                error:function(e){
                    alert("两点不连通")
                     var res=JSON.parse(e.responseText)
                     console.log( res.error.errorMsg,'erro')
                }
              })
                
            }
            
              
        }) 
   } 
   function clearInteraction() {
        if (draw) {
            map.removeInteraction(draw);
        }
    }
    
    </script>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值