mapbox-gl开发教程(十四):画圆技巧

news/2024/11/24 1:36:09/

mapbox-gl提供了一个画圆的图层方式,图层的类型设置成circle,通过设置circle-radius,实现圆的大小变化,不过这个参数的单位是像素(pixels),在地图缩放的时候,圆一直是像素尺寸,在地图上覆盖的空间面积也不同,不能满足按照地理距离单位的变化。
mapbox-gl圆的属性设置:
https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#circle
第一种方式:要实现地图上按照一定距离(米)画圆,需要使用mapbox-gl的表达式功能(expressions),首先找到墨卡托坐标距离和屏幕上的像素换算公式,如下:
根据函数,传入圆的地理距离和圆中心点所在的纬度坐标,计算地图缩放到20级时,圆在屏幕上的像素尺寸:

function metersToPixelsAtMaxZoom(meters, latitude) {
return meters / 0.075 / Math.cos(latitude * Math.PI / 180)
}

在地图上添加圆的时候,根据计算的像素尺寸,通过mapbox-gl的表达式设置,实现随着地图缩放,圆的尺寸变化:

//添加数据源
map.addSource("circle_source", {
"type": "geojson",
"data": {
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [110.132, 21.768]
} 
}]
}
});
//添加圆的图层
map.addLayer({
"id": "circle_layer",
//类型设置
"type": "circle",
//数据源id设置
"source": "circle_source",
"paint": {//关键处,设置圆的半径随地图缩放而变化
"circle-radius": {
stops: [[0, 0],
[20, _pixelRadius]],
base: 2
},//设置圆的其他属性
"circle-opacity": 0.5,
"circle-stroke-width": 1,
"circle-color": "#00f",
"circle-pitch-alignment": "map"
}
});

第二种方式:使用turf.js库,根据中心点坐标,按照距离,设定圆周上点的个数,根据地理距离,计算成串坐标,组合成polygon的形式进行加载,具体的参见turf.js类库api:
http://turfjs.org/
在这里插入图片描述
mapbox-gl开发是讲述如何从基础到实际应用进行地图开发的教程,不定时进行持续进行更新,如有疑问,公众号留言进行讨论。
https://mp.weixin.qq.com/s?__biz=MzU2ODYzNzc4OQ==&mid=2247486202&idx=1&sn=b9952e5d6125b21464d6d27dff80a169&chksm=fc8baac8cbfc23def27f958d2f63d84106e98232eea5b13334dfb79007b6dc80a7c7e0bfb5c5&token=7980397&lang=zh_CN#rd


http://www.ppmy.cn/news/168626.html

相关文章

mapboxGL轨迹展示与播放

概述 历史轨迹回放是GIS很常见的一个功能,本文结合turf.js实现轨迹的展示与播放动画。 效果 实现功能 轨迹的展示;轨迹的方向的箭头展示;随着轨迹播放的小车,并调整方向与轨迹方向一致;已播放路径的展示&#xff1b…

app闪退之-- GL error: Out of memory!

客户应用运行一段时间后闪退: 日志 2021-09-16 10:35:16.194 2328-2328/? I/Choreographer: Skipped 55 frames! The application may be doing too much work on its main thread. 2021-09-16 10:35:16.207 223-394/? E/BufferQueueProducer: [Toast] dequeueBuffer: Buf…

OpenGL 太阳系行星拾取例子(GL_SELECT) VS2008 + glut实现

太阳系:Solar System 以太阳(Sun)为中心,由内到外分别是: 水星(Mercury) 金星(Venus) 地球(Earth) 火星(Mars) 木星&#…

android 内存泄露-抓出重要函数-GL_OUT_OF_MEMORY-GL error: Out of memory!OpenGLRenderer

一般log有错误的内存泄露提示“GL error: Out of memory!”"GL_OUT_OF_MEMORY",我们就需要使用工具去一步一步的获取哪些模块类里面的方法出了问题,然后一个一个去尝试找出问题,以下是个人经历: 问题点:蓝牙传输多个文件,引发蓝牙报停,log打印crash: OpenGL…

echarts+echarts-gl vue2制作3D地图+下钻功能+标记点功能,解决dblclick事件失效问题,解决地图下钻后边框不更新保留问题

目录 先看实现效果:​编辑 步骤一 安装echarts和echarts-gl 步骤二 设置地图容器 在methods中设置初始化地图方法并在mounted中调用 在methods中设置初始化地图方法 在mounted中调用 打开页面效果:​编辑 步骤三 1、给地图添加双击事件dblcli…

华硕FX63VD/FX503VD键盘按键失灵

键盘失灵,开机键能用,有背光,大小写等指示灯切换正常且按键失灵 点击运行,等两分钟重刷程序给键盘芯片就好了 https://www.52pojie.cn/thread-1753087-1-1.html https://download.csdn.net/download/weixin_39444707/87525497

调试STM32+EMMC+GL3227E(固件1857,1858,1859)遇到的问题

声明: 记录下我自己的调试过程,一是给自己看,记录点滴;二也是分享给大家,在碰到类似的问题时,提供些许的思路。 问题描述: 使用如题的结构,STM32将数据存储在EMMC上,电脑…

光照的个人推导过程与GL实现

目录 1、前提知识 1.1、GL的绘图过程: 1.2、点积的规则和作用: 1.3、normalize在方向处理上的作用 2、光照控制的理论基础 2.1、自由的实现: 2.2、带有方向性的光——基于dot product的实现 最终效果演示如下: 3、关键代…