很多时候,在WebGIS应用的开发过程中,会遇到需要基于当前用户正在浏览的位置范围,动态修改地图组件或要素图层属性的情况。这时,我们就需要对地图显示的中心点坐标进行监听,判断中心点坐标的条件范围,执行相应的逻辑。
这里,我们以一个实际需求举例,来了解ArcGIS Maps SDK for JavaScript中MapView对象的center属性,以及如何对地图中心点坐标进行监听和对要素图层进行下一步处理。
在我们的业务代码中,添加了三个在线托管的要素图层,通过设置要素图层的maxScale和minScale属性,使得地图可以在不同的比例尺下,显示不同的要素图层。但是,因为一些需求,如在市中心POI点会更密集,而在郊区POI点会相对稀疏,所以我们需要在同一比例尺的情况下,使用不同的符号来显示城市和郊区的POI。我们可以选择修改同一个要素图层的符号,再或者使用两个不同符号的要素图层,基于比例尺控制显隐。在这里,我们使用两个不同的要素图层,根据地图中心点坐标来设置maxScale和minScale。
ArcGIS Maps SDK for JavaScript为MapView对象(下文中由view指代MapView的对象实例)提供了watch函数来进行属性监听,使用view.watch(path, callback)就可以监听view的属性,path是属性名称,callback即为回调函数。
我们先将center属性的值输出到控制台来观察。
view.watch('center', (newCenter) => { console.log(newCenter) })
center属性的值是一个点要素类型,其包含了很多属性,如accessor即为其内部的对象管理器,spatialReference为其空间参考对象。在其中,我们需要关注的就是其latitude和longitude属性,使用center.latitude及center.longitude即可访问其值。
接下来,来实现通过中心点经纬度来修改要素图层比例尺的功能。
view.watch('center', (newCenter) => {
if (newCenter.latitude >= 39.030 && newCenter.latitude <= 39.260 && newCenter.longitude >= 117.093 && newCenter.longitude <= 117.340){
let scalePoint1 = 25000
let scalePoint2 = 50000
updateLayerDisplayScale(scalePoint1, scalePoint2)
}else {
let scalePoint1 = 50000
let scalePoint2 = 100000
updateLayerDisplayScale(scalePoint1, scalePoint2)
}
})
const updateLayerDisplayScale = (smallScalePoint, largeScalePoint) => {
standardPointLayer.minScale = smallScalePoint
smallPointLayer.maxScale = smallScalePoint
smallPointLayer.minScale = largeScalePoint
divisionPolygonLayer.maxScale = largeScalePoint
}
这一篇分享的内容就到这里,今后我还会分享更多关于ArcGIS Maps SDK for JavaScript开发的经验和方法,希望能够对大家有所帮助~