ArcGIS JS API分页查询小结

如果遇到发布的服务要素非常多,比如点要素,此时如果想要查询相关的属性或几何信息,如果使用featurelayer的query方法,可能会遇到server后台返回数限制,而只能返回获取到返回数上限的要素数目。

一个简单的方法是,可以通过server manager中去修改对应服务的最大查询返回数目。但是如果在查询的数据量非常大的情况下,不建议无限调大返回的要素数量,这样会给服务器带来过大压力;同时不同的终端对返回数量的需求也不同,所以可以不调整后台返回数,而通过分页查询pagination来进行分段分批次查询。

1. 分页查询的要求

首先如果服务的数据源来源于sde,则对数据库有要求,数据库层面需要支持分页查询:

  • Microsoft SQL Server Enterprise/Exss 2012
  • Oracle 12c
  • PostgreSQL 9.1
    数据库应为这些版本以上的数据库。

其次,如果是发布的mapserver,存放在FileGDB也可以,但是Server版本需要为10.3.1以上的版本。

最后,相应的服务需要在rest服务页面显示支持pagination:
在这里插入图片描述

2. 分页查询测试

这里为了简单测试,先调整了后台返回条数控制,设置为20条:
在这里插入图片描述
经测试,对应服务的返回条数在Server调整最大返回为20条,代码中即使设置query得的num参数为查询返回的条数为50条,返回条数依然为20条,所以在查询时,返回条数num可以设置小于等于后台的设置。
在这里插入图片描述经测试,如果满足数据库的支持需求,则无论发布的是mapserver还是featureserver,都可以在代码中用featurelayer去承载,并通过query方法查询获取。

当设置参数start为0时,则对应获取返回前20个要素:
在这里插入图片描述可以通过rest后台对比要素,看查询返回结果是否正确:
在这里插入图片描述
当设置start为20时,则可以获取返回21-40个要素。后续要素也可以依次查询:
在这里插入图片描述参考测试示例代码如下:

<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta
      name="viewport"
      content="initial-scale=1,maximum-scale=1,user-scalable=no"
    />
    <title>
      MapImageLayer - set renderers on sublayers | Sample | ArcGIS Maps SDK for
      JavaScript 4.25
    </title>

    <link
      rel="stylesheet"
      href="https://js.arcgis.com/4.25/esri/themes/light/main.css"
    />
    <script src="https://js.arcgis.com/4.25/"></script>

    <style>
      html,
      body,
      #viewDiv {
        padding: 0;
        margin: 0;
        height: 100%;
        width: 100%;
      }
    </style>

    <script>
      require(["esri/Map", "esri/views/MapView", 
      "esri/layers/MapImageLayer",
      "esri/symbols/PictureMarkerSymbol",
    "esri/layers/FeatureLayer"], (
        Map,
        MapView,
        MapImageLayer,
        PictureMarkerSymbol,
        FeatureLayer
      ) => {
        

        const layer = new FeatureLayer({
          url: "https://localhost:6443/arcgis/rest/services/pointlighttest/MapServer/0",
          
        });

        /*****************************************************************
         * Add the layer to a map
         *****************************************************************/

        layer.renderer = {
          type: "simple", 
          symbol: {
            type: "picture-marker", 
            url: "https://static.arcgis.com/images/Symbols/Shapes/BlackStarLargeB.png",
            width: "64px",
            height: "64px"
            }
        }

        const map = new Map({
          basemap: "dark-gray-vector",
          layers: [layer]
        });

        const view = new MapView({
          container: "viewDiv",
          map: map,
          zoom: 5,
          center: [108.5, 18.5]
        });

        const query = {
              start: 20,
              num: 50,
              outFields: ["*"],
              returnGeometry: true,
            };
            const promise = layer
              .queryFeatures(query)
              .then((featureSet) =>{console.log(featureSet.features)});
          
      });
    </script>
  </head>

  <body>
    <div id="viewDiv"></div>
  </body>
</html>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙同学的一个笔记本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值