[PHP+SQL+OpenGeoDB] Ort auf einer Deutschlandkarte abbilden

Quidoff

Lieutenant
Registriert
Feb. 2005
Beiträge
897
Hallo,
ich versuche im Moment einen Ort auf einer Deutschlandkarte abzubilden. Dazu benutze ich die OpenGeoDB Datenbank.

Die Längen und Breitenangaben der Orte wird in Bogenminuten angegeben.
Ich muss jetzt also die Bogenminuten in Pixel umrechnen.
Dazu habe ich jeweils die nördlichste, westlichste, südlichste und östlichste Stelle in Deutschland gesucht.
Dabei bin ich auf folgende Werte gekommen:
Westlichste Stelle: 5.91667
Östlichste Stelle: 14.9314445596608
Nördlichste Stelle: 54.56
Südlichste Stelle: 47.17

Ich bin jetzt davon ausgegangen, dass ich die Abbildung der Bogenminuten auf die Pixel als eine lineare Funktion betrachten kann. (Die Karte ist 326 x 417 Pixel groß)
Also hab ich für die Berechnung der x-Koordinate in Pixeln folgende zwei Punkte für den Graphen:
P1 (5.91667; 0)
P2(14.9314445596608; 326)

Und für die y-Koordinate:
P1(54.56; 0)
P2(47.17; 417)

Daraus habe ich dann zwei lineare Gleichungen gemacht, die mir die Koordinaten des Punktes auf der Karte geben sollen.
Leider sind die Punkte sehr ungenau, was sich wohl daraus erklären lässt, dass es keine lineare Funktionen sind, sondern andere. Nur welche?
Hat jemand Rat?

//edit
Das ist die Karte, die ich benutze.
Das ist mein Code:
PHP:
<?php
	error_reporting(E_ALL);

	include("inc/mysql.php");
	include("inc/functions.php");
	include("inc/konstanten.php");
	connectGeoDB();
	
	/* ... */
	/* Längen- und Breitenangaben der übermittelten PLZ finden */
	$row = mysql_fetch_assoc($result);
	

	$minX = 5.91667;
	$maxX = 14.9314445596608;

	$minY = 54.56;
	$maxY = 47.17;
	
	$xCoord = $row['lon'];
	$yCoord = $row['lat'];
	
	$file = "images/deutschlandkarte.png";
	
	
	
	list($ImageWidth,$ImageHeight,$TypeCode)=GetImageSize($file);
	$ImageType=($TypeCode==1?"gif":($TypeCode==2?"jpeg":($TypeCode==3?"png":false)));
	$CreateFunction="ImageCreateFrom".$ImageType;
	$OutputFunction="Image".$ImageType;

	if(!function_exists($OutputFunction)) {
		echo "Bildtyp wird nicht unterstützt";
		return false;
	}

	if($ImageType) {
		$img = @$CreateFunction($file);

		if($img) {
			$m = (float) $ImageWidth/($maxX - $minX);
			$xPx = ceil($m*$xCoord - $m*$minX);
			
			$m = (float) $ImageHeight/($maxY - $minY);
			$yPx = floor($m*$yCoord - $m*$minY);
		
			$red = ImageColorAllocate($img, 255, 0, 0);
			ImageFilledRectangle($img, $xPx, $yPx, $xPx+4, $yPx+4, $red);
			
			header("Content-Type: image/".$ImageType);
			if($ImageType=="png") $OutputFunction($img);
			else	$OutputFunction($img,null, 90);
		}
		@ImageDestroy($img);
	}
?>
 
Zuletzt bearbeitet:
Zurück
Oben