Hej,
Jag håller på och försöker lära mig hur man plottar geografiska koordinater på en världskarta. Nu har jag testat ett färdigt exempel där man utgår från en världskarta (i form av en bild) som man sedan sätter ut en fördefinierad punkt på. Så långt fungerar allting. Nu försöker jag komma underfund med hur jag ska modifiera funktionen när jag enbart har en bildsektion som täcker Sverige.
Hela koden jag använder mig av ser ut så här:
<?php
// These are the coordinates the location we wish to plot.<br> // These are being passed in the URL, but we will set them to a
// default if nothing is passed.
if(empty($long))$long = 17.058678;
if(empty($lat)) $lat = 57.267256;
// First we load the background/base map. We assume it's located in same dir
// as the script.
// This can be any format but we are using JPG in this example // We will also allocate the color for the marker
$im = imagecreatefromjpeg("earth_310.jpg");
$red = imagecolorallocate ($im, 255,0,0);
// Next need to find the base image size.
// We need these variables to be able scale the long/lat coordinates.
$scale_x = imagesx($im);
$scale_y = imagesy($im);
$pt = getlocationcoords($lat, $long, $scale_x, $scale_y);
// Now mark the point on the map using a red 4 pixel rectangle
imagefilledrectangle($im,$pt["x"]-3,$pt["y"]-3,$pt["x"]+3,$pt["y"]+3,$red);
#imagestring($im,2,1,$scale_y-20,"Courtesy of www.staycanada.ca",$red);
// Return the map image. We are using a PNG format as it gives better final image quality than a JPG
header("Content-Type: image/png");
imagepng($im);
imagedestroy($im);
function getlocationcoords($lat, $lon, $width, $height)
{
$x = (($lon + 180) * ($width / 360));
$y = ((($lat * -1) + 90) * ($height / 180));
return array("x"=>round($x),"y"=>round($y));
}
// Now we convert the long/lat coordinates into screen coordinates
?>
Funktionen jag anser mig behöva ända på är följande:
function getlocationcoords($lat, $lon, $width, $height)
{
$x = (($lon + [B]180[/B]) * ($width / [B]360[/B]));
$y = ((($lat * -1) + [B]90[/B]) * ($height / [B]180[/B]));
return array("x"=>round($x),"y"=>round($y));
}
Så här långt har jag lyckats förstå att man anger storleken på kartbilden (denna funktion utgår ifrån att du visar hela världskartan i form av en cylindrisk projektion liknande den bifogade bilden till vänster) samt koordinaten för den punkt man vill ange i decimalform. Dimensionen i X-led delas med 360 som är antal grader runt jordklotet medan dimensionen i Y-led delas med 180 grader (från sydpolen till nordpolen). Vidare tycker jag mig se ett samband att 360 halveras till 180 och att 180 har halverats till 90.
Den andra kartan jag bifogat som jag nu vill använda mig av är 7 grader bred och 15 grader i höjdled. Dessa världen har jag försökt stoppa in i stället för 360 och 180 som $width och $height ska delas med.
Har ännu inte fått det att fungera. Tar gärna emot tips! :)



