- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有一些基本设置:
const canvas = document.getElementById("mycanvas");
const projection = d3.geoEquirectangular()
.fitSize([canvasWidth, canvasWidth/2], {type: 'Sphere'})
.precision(0.1);
context = canvas.getContext("2d");
const path = d3.geoPath()
.projection(projection)
.context(context);
context.drawImage(someImage, 0, 0, canvasWidth, canvasWidth/2)
然后我们有一个坐标对:
longitude = 34.9213213
latitude = -23.8229938
现在,我想根据这个坐标对绘制一个 arc() :
context.beginPath();
context.arc(longitude, latitude, 30, 0, 2*Math.PI);
context.strokeStyle = "green"
context.stroke();
context.closePath()
在这种情况下,我希望 arc() 被放置在精确的地理坐标中,但似乎 arc 不理解经度和纬度,所以它将 X 和 Y 值作为水平和垂直位置。
我该如何解决这个问题?
最佳答案
投影采用经纬度对,并将其从以度为单位的 3D 坐标空间转换为以像素为单位的 2D 坐标空间。
您有一个投影,我假设您使用它通过 d3.geoPath()
绘制背景特征。通过以这种方式使用路径,您可以获取背景要素的纬度/经度对并将它们转换为像素。但是您在绘制弧线时并未使用它,而是将纬度/经度对视为像素坐标。
context.arc()
将提供的 x 和 y 视为像素值;它与选定的 d3.geoProjection
或 d3.geoPath
没有关联。
如果 context.arc()
确实进行了地理投影,您仍然必须指定投影以便 context.arc()
使用相同的投影投影为 d3.geoPath()
- 否则您的功能将无法正确重叠。
相反,投影您的纬度经度点以获取其位置(以像素为单位),并将其传递给 context.arc()
:
var point = projection([longitude,latitude]); // project a latitude longitude pair to get [x,y] in pixels
context.arc(point[0], point[1], 30, 0, 2*Math.PI);
关于javascript - 在 d3 Canvas map 上绘制弧线的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58771791/
我正在用 Canvas 绘制一个非传统的响钟。时间由秒环、秒针、分钟环和小时环表示。我正在使用 webkit/mozRequestAnimationFrame 在适当的时间绘制。我想修改第二个环以快速
问题:我在 Canvas 上画一艘宇宙飞船。将鼠标悬停在其 x/y 上时,我在 Canvas 上绘制一条弧线,指示星舰武器 Angular 和范围(考虑星舰当前的巴林/朝向)。目前确定的 Angula
我正在使用 css 制作一个“饼形楔形”,方法是制作一个圆圈,将其剪掉一半,然后变换旋转另一个剪裁矩形,以便仅显示 25 度的弧形。这很好用;一个明确定义了六个这样的饼图的例子是 here . 然而,
我正在尝试研究 Page 65 of LDD3 中提到的 __copy_to_user() 和 __copy_from_user() 内联函数. 我可以看到 __copy_to_user() func
我是一名优秀的程序员,十分优秀!