美文网首页gis
arcgis js :加载 featureserver 为何只显

arcgis js :加载 featureserver 为何只显

作者: gis杭州 | 来源:发表于2018-06-21 11:18 被阅读1次

简单的一个加载featureserver的地图代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title>FeatureLayer</title>
<link rel="stylesheet" type="text/css"
      href="http://10.10.1.122:8080/arcgis_js_api_3.20/library/3.20/3.20/esri/css/esri.css"/>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script type="text/javascript" src="http://10.10.1.122:8080/arcgis_js_api_3.20/library/3.20/3.20/init.js"></script>
<style>
html, body, #map {
  padding: 0;
  margin: 0;
  height: 100%;
  width: 100%;
}
</style>

<script>
  require(["esri/map","esri/layers/FeatureLayer","esri/layers/ArcGISTiledMapServiceLayer",
  "esri/layers/ArcGISDynamicMapServiceLayer", "esri/symbols/SimpleFillSymbol", "esri/symbols/SimpleLineSymbol",
        "esri/renderers/SimpleRenderer","esri/Color","dojo/domReady!"],
    function (Map,FeatureLayer,ArcGISTiledMapServiceLayer,ArcGISDynamicMapServiceLayer,SimpleFillSymbol, SimpleLineSymbol,
        SimpleRenderer,Color
) {
      var map = new Map("map", {
        zoom: 14,
        maxZoom: 18,
        center: [120.243, 30.256],
        logo: false
      });

      var geoqtiledUrl = "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStreetPurplishBlue/MapServer";
      var geoqTiledLayer = new esri.layers.ArcGISTiledMapServiceLayer(geoqtiledUrl);
      map.addLayer(geoqTiledLayer);

    var featureLayer = new FeatureLayer("http://10.10.1.122:6080/arcgis/rest/services/jingfang/jingfangGrid3/MapServer/0",{mode: FeatureLayer.MODE_SNAPSHOT,
                outFields: ["*"]  });
                var symbol = new SimpleFillSymbol(
          SimpleFillSymbol.STYLE_SOLID,
          new SimpleLineSymbol(
            SimpleLineSymbol.STYLE_SOLID,
            new Color([0,0,0,0]),
            3
          ),
          new Color([125,255,125,1])
        );
      var symbol2 = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
        new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,
          new Color([98,194,204]), 2), new Color([98,194,204,0.5])
      );
      featureLayer.setRenderer(new SimpleRenderer(symbol));

      map.addLayer(featureLayer);


      featureLayer.on("update-end", function(){
        for (var i=0;i<featureLayer.graphics.length;i++){

          var viewlabelStr = featureLayer.graphics[i].attributes.viewlabel;
          var viewlabelCode = $.trim(viewlabelStr).split("(")[0];
          if(viewlabelCode === "571CZI00875"){
            featureLayer.graphics[i].setSymbol(symbol2);
          }
        }
        console.log("number of graphics in featureLayer:"+featureLayer.graphics.length);
      });
    });
</script>
</head>

<body>
  <div id="map"></div>
</body>

</html>

服务预览:


image.png

发布的服务,包含了5000多条浙江省房屋数据,然而地图上始终只能显示一小部分数据。
在代码最后 我打印了加载的要素数量,只有1000条。截图如下


image.png

上述问题的原因是featureserver的加载方式设置问题,将代码中的mode修改为FeatureLayer.MODE_ONDEMAND即可实现按需加载。而原有代码中FeatureLayer.MODE_SNAPSHOT意思为全部返回,但是这里的全部只显示1000条是因为arcgis设置了默认最多只返回1000条。

var featureLayer = new FeatureLayer("http://10.10.1.122:6080/arcgis/rest/services/jingfang/jingfangGrid3/MapServer/0",{mode: FeatureLayer.MODE_ONDEMAND,
                outFields: ["*"]  });

设置按需加载(FeatureLayer.MODE_ONDEMAND)后如下图:


image.png

参考文章: ArcGIS服务器的feature图层限制

相关文章

网友评论

    本文标题:arcgis js :加载 featureserver 为何只显

    本文链接:https://www.haomeiwen.com/subject/bmdqyftx.html