我有一個圖像,從數據我已經在我的數據庫中呈現。 我需要將此圖像與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