ArcGis 新版本中,可以使用SimpleRenderer的layer,有如下五种,可以 使用自定义源的目前发现有feartureLayer何MapImageLayer(可能是我没发现其它的怎么用,反正我知道的就这俩能用……)

MapImageLayer中主要依赖于sublayers来实现,我理解的就是需要提供两部分,一个是你发布的地图url,另一部分就是你自己的数据,但这部分数据貌似需要放置在arcgis的什么工作空间中,我的理解就是它也不是绝对可以自定义动态来实现的。

所以,最终就是选用了featureLayer,为其设置source属性,来实现数据的动态加载。

官方给出了一个示例,具体可以查看layers-featurelayer-collection这个例子,下面是该例子的截图:

官方给出的例子中source是point类型的graphics。所以依次为源添加到featureLayer上,点击后的popup弹框,包括view的hitTest()方法,都可以捕获到该点是否存在图片,弹框也可以正常显示。
但是实际情况的使用中,我的source源是 Polygon类型的graphic,这就造成了一种很尴尬的现象,在hitTest()中,告诉你说 当elevation mode 是
on-the-ground
时,该方法不起作用了。
但是在你添加polygon到source中时,默认的类型就是on-the-ground
,如果你的polygon面积不大时,你可以添加高度,或者改变elevation mode 即可触发popup的弹出和view的hitTest(),这时候,问题就不是问题了,但是如果polygon面积很大,就是类似于你绘制的世界上各个国家的轮廓,这时,添加高度就变成一个很鸡肋的现象了,因为加的低了,会只有外圈轮廓出现,不过,这时的弹框可以正常出现了,同理,hitTest()也可以使用。


加的高了,足矣让整个多边形填充后,和球面的高度就会很明显了,不符合我的需求,整个球面看起来也很古怪,这里就重现了,感兴趣的自己试一下吧!


这时,你以去使用featureLayer的queryFeatures()
来检测该处是否有图片。

但是queryFeatures()
起效的前提是,它不是由graphics构成的。而是传入的url或者id构建的featureLayer ,这时,queryFeatures()
可以正常使用返回。
虽然官网说如果是由source来构建的featurelayer,则只能传入geometry
objectIds
spatialRelationship
参数,传入其它参数会出现错误。但是最终,就算你query什么都不传,通过source来构建的featureLayer并没有任何反应。

总结一下,其实就是:
1.在为featureLayer添加geometrie为Polygon的graphics后,在arcgis for JavaScript 4.5版本中,hitTest()和popupTemplate都无法正常使用,queryFeatures()也无法使用,目前找到可替代方式就是用queryTask来查询, 但这时查询的返回结果中,肯定,没有你自己的动态数据,你需要根据返回结果中的数据,去你的动态数据中进行查询,自定义弹框,来实现popupTemplate的效果。
2.如果你的多边形面积不是很大,就是在地球上的展示几乎趋于平面,此时,不必使用queryTask来查询,只需要改变elevation mode,为该图层添加少许高度即可使用popupTemplate。
3.queryFeatures()在featureLayer由url或id构造时可正常使用,在由source构造的layer中,若queryFeatures()既不报错,也无反应,基本上就宣告该方法无效了……
网友评论