<?php
header("Content-type:image/png");
$image1 = imagecreatefrompng('cylindrical_map.png');
$image2 = imagecreatefrompng('pin.png');
$long = 18.96;
$lat = 72.82;
$scale_x = imagesx($image1);
$scale_y = imagesy($image1);
$pt = getlocationcoords($lat, $long, $scale_x, $scale_y);
imagecopymerge($image1, $image2, $pt["x"],$pt["y"], 0, 0, 80, 80, 98); //// place a second image on top of image 1
imagepng($image1);
function getlocationcoords($lat, $lon, $width, $height)
{
$x = (($lon + 180) * ($width / 360));
$y = ((-1 * $lat)+90) * ($height / 180);
return array("x"=>round($x),"y"=>round($y));
}
?>
我有这个代码将lat和long转换为坐标,但是例如我把纽约市的put和lat以及它不会指向正确的位置,将转换lat和long转换为坐标时出现问题。
请帮我解决这个问题。
感谢任何帮助。
答案 0 :(得分:0)
您可以使用PEAR package或this SO answer来计算坐标。
SO线程包含满足您需求的代码。
最后,我为你找到了一个有效的例子。 (花了几分钟)。 我想你拿了this篇并改了一下。
首先,您需要计算引脚的偏移量。我从jQuery插件中获取this one(我将其缩小到50px宽度)。这意味着您从尖端获取x和y坐标。请注意,您必须将左上角作为原点!
$pinOffsetX = 19;
$pinOffsetY = 42;
现在你写下你的坐标了。我拿了纽约的坐标。
$long = -74.0059700;
$lat = 40.7142700;
加载图片。我拿this map得到一张大地图并检查其准确性。
$pin = imagecreatefrompng("pin.png");
$im = imagecreatefromjpeg("map.jpg");
获取图像的大小并计算坐标
$scale_x = imagesx($im);
$scale_y = imagesy($im);
$pinWidth = imagesx($pin);
$pinHeight = imagesy($pin);
$pt = getlocationcoords($lat, $long, $scale_x, $scale_y);
功能没有改变。 现在将引脚复制到地图上。注意:我使用imagecopy而不是imagecopymerge。
imagecopy($im, $pin, $pt["x"] - $pinOffsetX, $pt["y"] - $pinOffsetY, 0, 0, $pinWidth, $pinHeight);
必须减去引脚偏移量才能将尖端移动到该位置。 输出图像(并销毁它!)
header ("Content-type: image/png");
imagepng($im);
imagedestroy($im);