简单的一个加载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>
服务预览:

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

上述问题的原因是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)后如下图:

参考文章: ArcGIS服务器的feature图层限制
网友评论