我有一个图像,从数据我已经在我的数据库中呈现。 我需要将此图像与Mercator Projection方法转换为扭曲的图像,当我用它包装3d球体时,它会看起来逼真。PHP的GD - 扭曲图像墨卡托投影视图
有谁知道我需要用什么公式来制作失真的图像?
我使用PHP与GD。
谢谢。
我有一个图像,从数据我已经在我的数据库中呈现。 我需要将此图像与Mercator Projection方法转换为扭曲的图像,当我用它包装3d球体时,它会看起来逼真。PHP的GD - 扭曲图像墨卡托投影视图
有谁知道我需要用什么公式来制作失真的图像?
我使用PHP与GD。
谢谢。
如果您的图像是地理坐标,那么可能应该将其移至https://gis.stackexchange.com/。
你可以看看GDAL,这是一种免费的+开源地理空间数据抽象库,用于这种重投影。有一个PHP绑定可用,称为PHP mapscript。尽管如此,我认为几乎没有文档可用。
为了使用PHP mapscript,您还必须设置一个UMN mapserver(作为web服务器的CGI脚本运行)并让它执行reprojection。你需要做很多工作来设置和配置它,然后将它推到极限以适应你的需求。
如果你打算使用普通的图形技术来围绕一个球体来包裹它,我不认为你完全想要使用墨卡托投影,因为这在极点上不起作用。
球体的正常3D纹理映射只是一个2:1宽高比的位图,其中X轴直接映射到[0, 360)
度经度和Y轴到[-90, +90]
纬度。因此,只需从您的数据库中取出纬度/经度值,并将它们线性调整为,即可。 (假设[0,0]在左上角和[W,H]是位图的大小):
x = (longitude + 180) * w
y = (90 - latitude) * h
编辑 - 我误解了问题,不知道你已经有一个图像。如果AIUI原始图像是墨卡托投影中的图像,那么您的问题仅仅是撤消该图像垂直轴的非线性缩放。水平轴可以保持不变,因为墨卡托使用线性比例来表示经度。
这将是艰难的,使用PHP和GD非常缓慢。您可能希望将搜索扩展到PHP之外。你可以在你的服务器上使用并安装第三方工具吗? – 2011-04-03 08:53:20
其实我也有Imagick在我的服务器上,但我讨厌使用PHP,因为PHP的API对GD来说非常糟糕。 – Shlomi 2011-04-03 09:54:48