我有一张从我的数据库中的数据渲染的图像。我需要使用墨卡托投影方法将此图像转换为扭曲的图像,当我用它包裹一个 3d 球体时,它看起来会很逼真。
有谁知道我需要使用什么公式来制作扭曲的图像?
我正在使用带有 GD 的 PHP。
谢谢。
如果您打算使用普通图形技术将其包裹在球体周围,我认为您不会严格使用墨卡托投影,因为这在两极不起作用。
球体的正常 3D 纹理映射只是一个纵横比为 2:1 的位图,其中 X 轴直接映射到[0, 360)
经度,Y 轴直接映射到[-90, +90]
纬度。
因此,只需从数据库中获取纬度/经度值并将它们线性缩放到像素坐标,例如(假设 [0, 0] 位于左上角, [w, h] 是位图的大小):
x = (longitude + 180) * w
y = (90 - latitude) * h
编辑- 我误读了这个问题,没有意识到你已经有了一张图片。如果 AIUI 原始图像是墨卡托投影中的图像,那么您的问题只是撤消该图像垂直轴的非线性缩放。水平轴可以保持不变,因为墨卡托对经度使用线性刻度。
如果您的图像是地理参考的,那么也许应该将其移至https://gis.stackexchange.com/。
对于这种重投影,您可以查看免费+开源地理空间数据抽象库 GDAL。有一个可用的 PHP 绑定,称为 PHP mapscript。不过,我认为可用的文档很少。
为了使用 PHP 地图脚本,您还必须设置一个 UMN 地图服务器(作为网络服务器的 cgi 脚本运行)并让它进行重新投影。您需要做很多工作来设置和配置它,然后将其推向极限以满足您的需求。