Portal加载大数据量的FeatureLayer分析
1.测试环境说明
Portal 10.4.1
CSV格式数据,含坐标信息,共78447条,大小13M
2.要素服务准备
(1)在我的内容中,使用上传功能上传CSV数据并发布成要素服务。
(2)上传与发布服务时间共耗费2分钟左右。
(3)要素服务默认设置的图层返回数限制MaxRecordCount: 2000。
3.Portal中加载要素服务过程分析
在我的地图中加载要素服务时,会提示:“[图层名]未完全绘制,因为地图中要在该区域显示的要素过多。请尝试放大或设置图层的可见范围。”
跟踪Portal中加载要素服务的过程,其流程如下:
(1)读取要素服务在ArcGIS Server中的实际服务地址信息,请求地址:
http://[portalbaseurl]/sharing/rest/content/items/[itemid]?f=json&token=[token]
(2)读取Server中该要素服务的元数据信息,请求地址:
http://[serverbaseurl]/rest/services/Hosted/[servicename]/FeatureServer?f=json&token=[token]
(3)读取Server中该要素服务具体图层的元数据信息,请求地址:
http://[serverbaseurl]/rest/services/Hosted/[servicename]/FeatureServer/0?f=json&token=[token]
(4)获取要素服务的总记录数,请求地址:
http://[serverbaseurl]/rest/services/Hosted/[servicename]/FeatureServer/0/query?f=json&returnIdsOnly=true&returnCountOnly=true&where=1%3D1&returnGeometry=false&spatialRel=esriSpatialRelIntersects&token=[token]
(5)开始读取要素服务数据,并绘制在前端。读取过程分6次,每次按不同的范围条件读取。请求地址:
http://[serverbaseurl]/rest/services/Hosted/[servicename]/FeatureServer/0/query?f=json&returnGeometry=true&spatialRel=esriSpatialRelIntersects&geometry=[geometry]&geometryType=[geotype]&inSR=[wkid]&outFields=*&outSR=[wkid]&token=[token]
第一次读取了2000条要素数据,且返回值中exceededTransferLimit: true。
第二次读取了950条要素数据,且返回值中exceededTransferLimit: false。
第三次读取了2000条要素数据,且范围条件与第一次的一样。
第四次读取了1条要素数据。
第五次读取了36条要素数据。
第六次读取了1条要素数据,且范围条件与第四次的一样。
4.Portal中加载要素服务小结
- Portal不会加载要素服务中的所有数据。
- 加载时会将当前范围分割成6块,分别读取6块范围内的数据。
- 只要读取的某个小块范围的数据超过图层返回数限制,就会给出图层未完全绘制的提示信息。
- 由于是分多次请求数据,所以显示在前端的总要素条数会超出图层设置的限制数。
5.JS中使用FeatureLayer加载大数据量分析
使用JS中的FeatureLayer加载上述发布的要素服务,加载流程与Portal一样,也是分成6块范围(范围各不相同)加载。但需要注意的是:并不是所有情况下都会分成6块范围。更换要素服务测试时发现,当前范围分成了9块。