能否使用Mapbox表达式的$类语法访问Point几何的经纬度坐标?
关于Mapbox样式中$语法的疑问解答
你提到的$type是Mapbox GL JS样式规范中的内置保留变量,不属于Mapbox Draw的单独API,所以你在Draw的文档里找不到相关说明是正常的。这类$开头的变量是样式表达式体系的内置字段,不需要存放在要素的properties中就可以直接调用,$type的作用就是返回当前要素的几何类型,可选值包括Point、LineString、Polygon等,和你观察到的效果一致。
目前没有对应的$开头内置变量可以直接获取Point的经纬度坐标。目前Mapbox样式体系公开的$开头保留变量只有固定的几个:
$id:要素的唯一ID$zoom:当前地图的缩放级别$level:矢量瓦片的层级$lineProgress:线要素的渲染进度(仅用于线的渐变、分段样式场景)
没有提供$coordinates或者类似直接读取几何坐标数组的内置变量,你需要的需求可以通过以下方案实现:
- 手动把坐标写入要素属性:在调用Mapbox Draw添加点要素时,直接把经纬度存到要素的properties字段里,比如新增
lng和lat两个自定义属性,后续在样式过滤器或者样式属性中,直接通过['get', 'lng']就可以调用对应值。 - 用现有表达式实现坐标相关判断:如果是需要做范围判断、距离计算类的逻辑,可以直接用
within、distance等内置空间表达式,不需要手动获取坐标值。比如要给距离坐标[116.4, 39.9] 1公里范围内的点设置特殊样式,直接写['<', ['distance', ['literal', [116.4, 39.9]]], 1000]作为过滤器即可。
如果是需要在业务逻辑里拿坐标,直接调用Mapbox Draw的get、getAll等API拿到要素实例,直接读取geometry.coordinates字段就可以,不需要在样式规则里处理。
内容的提问来源于stack exchange,提问作者jayarjo
相关产品推荐
相关产品推荐

