PHP地图投影(PHP Map projections)

我用Google搜索自己死..我试图写2个PHP函数将从纬度和长返回X和Y两种墨卡托和平面非投影(网格)的地图。 问题是每次计算我已经跑过假设你的地图(一个或多个)在角落同一纬度和经度,然后将结果以米为单位。 啊

下面是我..大小不同的地图,不同经纬度的,长的在4个角。 我下载了Proj4 PHP的端口,但与零文档和更多的代码,然后我需要的,我是在whelmed ...

救命 !!

Answer 1:

这假设你的经/纬COORDS是十进制数,并没有从北/南或东改变方向/西地图的可视范围内。 如果是这样,这些值应保持在一个单一格式,并且由negativel(例如:1.0秒将成为-1.0 N)

首先你设置以下的变量,无论是与PHP找到他们,或者如果你的脚本已经知道他们:

$width=//width of image
$height=//height of image

$long_at_left=//Longitude of left-hand coordinates
$long_at_right=//Longitude of right-hand coordinates
$lat_at_left=//Latitude of left-hand coordinates
$lat_at_right=//Latitude of right-hand coordinates

$target_long=//Longitude you want to find
$target_lat=//Latitude you want to find

然后使用:

$xtarget=$target_long-$long_at_left;
$ytarget=$target_lat-$lat_at_top;

$xdist=$long_at_left-$long_at_right;
$ydist=$lat_at_top-$lat_at_bottom;

$x=round(($xtarget/$xdist)*$width); //Percentage of distance times width
$y=round(($ytarget/$ydist)*$height); //Percentage of distance times height

或者说,形式的东西应该做的伎俩。



Answer 2:

在以前的答案比例的做法是行不通的。 墨卡托投影是相当非线性的。

下面是如何覆盖生成的图像到谷歌或必应地图。 就我而言,我创建的多边形,这将是覆盖的GD图像。 它的速度更快做多边形的GD库比地图提供的API。

首先,建立了从标准经纬度缩放到WGS84投影。 度墨卡托米xy坐标。

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;

然后,每经/纬度我想计算实际的XY图像上的坐标。

// $ 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库的例子来显示您的覆盖。

https://developers.google.com/maps/documentation/javascript/examples/overlay-simple



文章来源: PHP Map projections
标签