今天遇到了esri.layers.FeatureLayer發布一個宗地圖層,里面有些數據未顯示,導致數據顯示不全,原來是服務中數據返回參數限制。
ArcGIS的feature圖層(在JavaScript API中為esri.layers.FeatureLayer),在瀏覽器中進行顯示時是有一定限制的。比如一個名為traffic的feature圖層,該圖層記錄了該地區所有交通事故的發生地,其feature數量可想而知非常巨大。在瀏覽器中創建該圖層的時候就要為其選定“模式”。如
var traffic = new esri.layers.FeatureLayer(trafficServiceURL, {displayOnPan : true,mode : esri.layers.FeatureLayer.MODE_ONDEMAND,opacity : 0.8,infoTemplate : infoTemplate,outFields : [*]});
第二個參數mode就是模式。ArcGIS JavaScript API提供了三種模式,分別是
- MODE_ONDEMAND:按需加載feature
- MODE_SELECTION:初始不加載,只有當客戶端選擇的時候才加載feature
- MODE_SNAPSHOT:一開始就將“全部”feature從服務器端取回並加載
值得注意的是,MODE_SNAPSHOT中的“全部”是有限制的,根據
官方文檔,在ArcGIS Server 9.3.1中默認是500個,在版本10的時候默認為1000。這個限制是可以在ArcCatalog中進行修改的。在GIS Servers中連到服務器,並停止該feature圖層的服務,右鍵選擇Service Properties,在Parameters選項卡下可以設置“Maximum Number of Records Returned by Server”。然后重啟圖層服務,並且在REST服務的管理界面清理一下緩存就可以了。

需要注意的是,該參數並非設置得越大越好,它會對地圖在瀏覽器端的加載產生比較大的影響,如果設置的過大,不僅僅會導致加載緩慢,更有可能出現瀏覽器掛掉等不良體驗。對於feature圖層模式的選擇,如果feature數量較小(比如小於Server默認的限制數量),那么選擇MODE_SNAPSHOT一次性加載最好,並且要在初始化的時候為圖層添加適當的過濾條件,如setDefinitionExpression和setTimeDefinition對feature屬性、時間進行相應過濾,不至於初始加載階段有過多的feature造成瀏覽器崩潰。