我正在尝试计算变形,以便可以使叠加的文本和表格变形以精确匹配等角投影的图像。

如何在给定的纬度下计算等角投影的变形:1:45,000,000(例如,宽2000像素x高1000像素)?

我一直试图弄清楚这篇文章及其链接无济于事:
如何创建准确的天梭Indicatrix?

我不是专业人士,只是一个非常感兴趣的业余爱好者。


这是长话了。

我正在使用Processing编程语言来可视化/映射数据,并希望具有2D映射的数据(不同大小的字体和圆圈)包裹在3D地球上时不会变形。数据是使用等角x,y映射的,而我想用作背景的地图都是这种投影,因此我假设我想“匹配”这种失真(例如,通过使用Tissot方程通过纬度计算失真)。使用编程语言,我可以精确地扭曲文本和圆圈。我认为我只需要方程式即可正确进行操作。

这里是原始的2D数据图:



包装后看起来像这样扭曲:



包裹到3D球体后如何使2D图像看起来不失真?

作为参考,这里在“处理”论坛上,相同的问题提出了不同的问题。


我不确定是否要重新投影为正交投影。我希望将2D数据图包装到可以与之交互(即旋转)的3D球体模型。

我正在使用3D建模程序(Cinema 4D)将2MB的球体包装为“美国国家航空航天局(NASA)的“蓝色大理石”图像(矩形投影)。

包裹起来后,它看起来与所有半球都没有变形(正射投影不只是一个半球?),请参见:仍来自上面的3D模型。 (我猜想,建模程序会在旋转对象时为我做正射投影。)因此,我认为,如果我以类似的方式扭曲2D数据贴图,它在3D球体上也不会失真。这是我用近似等矩形变形的方程式拍摄的照片。您会注意到,当包裹在3D球体上时,2D图像中的卵形椭圆看起来像一个圆形。类似地,天梭椭圆形在3D球体上也显示为圆形。



这就是为什么我看着天梭方程式...以便更精确地找出等角投影在不同纬度的变形,因此我可以相应地使叠加层变形。

也许我应该使用GIS程序。我刚刚下载了Cartographica,然后看看是否可以解决。

任何Mac软件对新从事此任务的人的建议?

评论

您是真的要计算失真,还是真的想知道如何计算投影本身?也许您可以使图像在Web上可用以说明您要完成的工作。使用“匹配”表示您希望确定如何将一个图像转换为另一图像,这表明您需要指定开始的对象以及最终的对象。

我们知道在不知道专业术语的情况下很难描述您想做什么,但是听起来您正在尝试描述过程而不是结果。尝试从您要解决的问题入手,然后从中获得所需的结果,我们将尽力填补空白:)

用技术术语来说:您要从等角投影重新投影为正投影(“空间世界”)投影。您可以使用什么软件?如果您具有GIS软件或愿意根据投影库进行编码,则工作基本上已经为您完成。否则,您需要实现等式来解投影等角投影(容易)并投影正投影(不太难,但是需要一些数字例程编码技巧)。

我看到了这篇文章,并且我试图基本上做同样的事情。我想绘制在投影到3D球体上时会正确变形的2D圆。我想知道您是否愿意分享用于2D圆失真的算法?本来应该是评论而不是答案,但我写错了地方。对不起。

您应该在3D空间中绘制数据,然后将其投影回球体。

#1 楼


当包裹到3D球体时,如何使2D图像看起来不失真?


图像坐标是经度和纬度,所以您要么

(a)取消投影,然后使用正投影或垂直的近侧投影(即从太空看起来像世界的投影)或

(b)将其纹理映射到3D上使用lat-lon作为纹理坐标的球体模型,并使用3D图形渲染设备显示该球体。

大多数GIS常规(a)。为了说明(b),下面是从问题中的“平面”贴图得出的一组图像,这些图像是从围绕纹理贴图球体旋转的视点拍摄的:
(如果仔细观察最右边的图像,您会在太平洋上看到一个显着的子午线:这是通过将地图的左右两侧包裹在一起而形成的“接缝”。)

基本产生其中之一的Mathematica命令是

 SphericalPlot3D[1, {a, 0, \[Pi]}, {b, 0, 2 \[Pi]}, Mesh -> None, 
 PlotStyle -> {Texture[i]}, TextureCoordinateFunction -> ({#5, -#4} &), 
 Lighting -> {{"Ambient", White}}, 
 Boxed -> False, Axes -> False, Background -> Black]
 



这减少了原始内容问题(在球体上绘制“数据图”)会产生正确显示圆的图。最好的投影是Stereographic,因为它会将球体上的所有圆(无论大小)投影到地图上的圆上。因此,如问题所示,一种在等角投影中正确绘制大圆的方法是在立体投影中创建它们,然后将其取消投影到地理坐标(纬度,经度)。使用(lon,lat)作为(x,y)直角坐标来制作地图等同于等角投影,因此适合在球体上进行纹理贴图或应用正交投影。


请注意,天梭d度不适用于解决方案:它们仅代表无限小圆的局部变形。在大多数投影中,足以在全球范围内看到的大圆圈甚至不再显示圆形:在问题地图中见证其圆滑的外观。这就是为什么玩具有投影功能的游戏(如此处所示)对于一个好的解决方案必不可少的原因。

评论


感谢您提供的信息非常丰富!我采用(b)作为方法,手头有一个正确生成的等矩形贴图,但是在将贴图映射到3D球体时会遇到丑陋的极点畸变。您能帮忙吗? gis.stackexchange.com/questions/245315/…

– Sibbs赌博
17年6月25日在21:36

#2 楼

假设绘制的形状覆盖球体的一小部分,则应该能够通过将宽度缩放1 / cos(lat)并保持高度不变来实现。

越大的形状和您越接近两极,这将越奏效。

评论


您能解释一下为什么行得通吗?在示例图像中,即使在球体的渲染边缘附近的一小部分,它也似乎会严重失效。

– hu
2012年12月17日22:00

谢谢你的编辑;因此,我已经删除了弃权票,因为您的回答对我来说似乎是正确的,并且将来可能对某些人有用。不过,在审查这个问题时,似乎没有人会把这么小的形状包裹在球体上-当我这样做时,他们将需要处理两极以及其他任何地方。

– hu
2014年1月28日20:37

#3 楼

请参阅,您的第一个2D地图没有绘制地理特征。将它们添加到此地图(例如非洲等高线)中,然后将您正在考虑的变形立即应用于所有内容。地理也将被修改,当您将其放到球体上时,那将是错误的。因此,我认为应用某种变形的想法是行不通的。

通过在面积有限且可接受变形的小型2D地图中绘制图形,您可能会在2D中获得成功。您可以将2D地图切成图块,并且每个图块都使用其自己的“最佳”投影。

从另一方面来说,很容易在2D地图上给定半径的测地圆上创建点。为此,您需要找到一个函数,该函数计算给定距离和距另一点的方位角的一点的经度/纬度(搜索“直接问题Vincenty”)。一旦知道了这一点,就可以通过将方位角从0更改为360来在距该点给定距离的位置生成一堆等距点。
当测地线圆包含一个测地线时,在2D中将这些点制成多边形需要更多的工作。极点,或与地图的左边界或右边界相交。在此处查看测地圆在平面地图上的外观。

#4 楼

我不知道如何添加评论,因此将其添加到解决方案中,让主持人争先恐后弄清楚为什么我不能发表评论。

我在读问题时的第一印象是“为什么不像墨卡托那样在保形投影中设计圆”。您可以将此地图投影到Mercator投影中,查看圆和文本变形,将所有内容固定为看起来不错,并且在将其投影到地球上时,形状应保持正确(即共形投影的定义)。

评论


这听起来像是对我的答案,所以我将其保留。但这是基于错误的理解,是不正确的:保形投影不能将所有圆投影到圆上。他们只是无限地这样做。这种区别是巨大的:例如,考虑墨卡托对绕地球轴旋转的任何圆所做的操作。它不可能将其映射为圆-必须在某个位置将其断开。有关此的更多讨论,请在我们的网站上搜索天梭。

– hu
13年6月18日在17:46

“他们只是无限地这样做。” ->“它们只对极小的人这样做。”

–马丁F
13年7月16日在20:14