2011-04-03 55 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