嗯,這是我如何覆蓋生成的圖像到Google或Bing地圖。 在我的情況下,我正在創建一個將覆蓋層的多邊形的GD圖像。 GD庫中的多邊形要比地圖提供者API快得多。
首先,設置從標準緯度經度到WGS84投影的比例。度以米爲單位的mercator x-y座標。
http://gisgeography.com/wgs84-world-geodetic-system/
// $ minlat =最小圖像緯度
// $ MINLON =最小圖像經度
// $ maxlat =最大像緯度
// $ maxlon =最大圖像經度
// $ latbounds =圖像高度(以像素爲單位)
// $ lonbounds =圖像寬度(以像素計)
$lonrange = abs($maxlon - $minlon);
$WGS84min = log(tan((90.+$minlat)*M_PI/360.))/(M_PI/180.);
$WGS84min = (int) ($WGS84min * 2037598.34/180);
$WGS84max = log(tan((90.+$maxlat)*M_PI/360.))/(M_PI/180.);
$WGS84max = (int) ($WGS84max * 2037598.34/180);
$WGS84diff = $WGS84max - $WGS84min;
$WGS84factor = $latbounds/$WGS84diff;
然後,對於每個緯度/經度我要計算的圖像上的實際的X-Y座標。
// $ lon1 =點的要被轉換成圖像的經度座標
// $ LAT1 =點的緯度以轉換成圖像coordates
X是容易
$x = (int) ((abs($lon1-$minlon)/$lonrange)*$lonbounds);
Y有點困難,首先計算WGS84,然後映射到圖像。最後一步,反轉Y座標,因爲顯示順序是顛倒的。
$y1 = log(tan((90.+$lat1)*M_PI/360.))/(M_PI/180.);
$y1 = $y1 * 2037598.34/180;
$y1 = (int) (($y1- $WGS84min)*$WGS84factor);
$y = $latbounds - $y1;
當圖像文件完成後,使用GD保存圖像,然後使用API庫中的示例顯示覆蓋圖。
在你的情況下,這可能會很慢,因爲你必須計算每個圖像像素座標的緯度/經度,然後將像素值映射到新座標處的新圖像。但是在這種情況下,在每次計算結束時不必翻轉Y,但是您可能會看到一些奇怪的混疊,其中兩個像素映射到同一個座標,另一個像素從未獲取數據值。
https://developers.google.com/maps/documentation/javascript/examples/overlay-simple