2011-04-03 33 views
2

我有一个图像,从数据我已经在我的数据库中呈现。 我需要将此图像与Mercator Projection方法转换为扭曲的图像,当我用它包装3d球体时,它会看起来逼真。PHP的GD - 扭曲图像墨卡托投影视图

有谁知道我需要用什么公式来制作失真的图像?

我使用PHP与GD。

谢谢。

+1

这将是艰难的,使用PHP和GD非常缓慢。您可能希望将搜索扩展到PHP之外。你可以在你的服务器上使用并安装第三方工具吗? – 2011-04-03 08:53:20

+0

其实我也有Imagick在我的服务器上,但我讨厌使用PHP,因为PHP的API对GD来说非常糟糕。 – Shlomi 2011-04-03 09:54:48

回答

0

如果您的图像是地理坐标,那么可能应该将其移至https://gis.stackexchange.com/

你可以看看GDAL,这是一种免费的+开源地理空间数据抽象库,用于这种重投影。有一个PHP绑定可用,称为PHP mapscript。尽管如此,我认为几乎没有文档可用。

为了使用PHP mapscript,您还必须设置一个UMN mapserver(作为web服务器的CGI脚本运行)并让它执行reprojection。你需要做很多工作来设置和配置它,然后将它推到极限以适应你的需求。

+0

whats“georefrenced”是什么意思? – Shlomi 2011-04-03 10:06:50

+0

“地理参考”意味着它具有 - 或者可能具有一些空间环境(您可以给它空间坐标(如纬度和经度),它是您想要的地图吗? – knb 2011-04-03 16:14:38

1

如果你打算使用普通的图形技术来围绕一个球体来包裹它,我不认为你完全想要使用墨卡托投影,因为这在极点上不起作用。

球体的正常3D纹理映射只是一个2:1宽高比的位图,其中X轴直接映射到[0, 360)度经度和Y轴到[-90, +90]纬度。因此,只需从您的数据库中取出纬度/经度值,并将它们线性调整为,即可。 (假设[0,0]在左上角和[W,H]是位图的大小):

x = (longitude + 180) * w 
y = (90 - latitude) * h 

编辑 - 我误解了问题,不知道你已经一个图像。如果AIUI原始图像是墨卡托投影中的图像,那么您的问题仅仅是撤消该图像垂直轴的非线性缩放。水平轴可以保持不变,因为墨卡托使用线性比例来表示经度。

+0

是的,我的图像已经基于1:2的比例:(-180)到180经度和90到(-90)纬度,但现在我需要拍摄整个图像并按照墨卡托投影方法在正确的位置上进行缩放 – Shlomi 2011-04-03 10:04:16

+0

为什么你需要mercator?你显然已经拥有的线性缩放球形投影是围绕球体包装的最常见的纹理格式。 – Alnitak 2011-04-03 10:11:13