ArcGIS Maps SDK for JavaScript开发漫谈(一)——监听地图中心点坐标及MapView属性监听

123 阅读2分钟

很多时候,在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) })

Capture2024-04-17-173453.jpg

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开发的经验和方法,希望能够对大家有所帮助~