You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#1 2009-10-12 10:03:50
- a_kemper
- Member
- Registered: 2009-10-12
- Posts: 1
Eigene Tracks einfach anzeigen -- howto?
Hallo,
ich würde gerne eigene Tracks zwecks Weiterleitung an Freunde möglichst einfach in OSM darstellen können. Bei Google Maps funktioniert dies über eine URL der Form http://maps.google.de/maps?q=http://mei … /track.kml
Gibt es hier eine vergleichbare Funktion in OSM??
Grüße,
Andreas
Offline
#2 2009-10-12 10:22:30
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Ob OSM sowas anbietet weiß ich nicht. Würde mich aber auch interessieren.
Bei GPSies kannst du dir über http://www.gpsies.com/map.do?url=... den Track anziegen lassen, auch als gpx, und als Karte OSM einblenden. Default ist aber leider Google, sodass der Anwender dann selber auf OSM umschalten muss.
Viele Grüße
Henning
Offline
#3 2009-10-12 10:43:09
- Oktober
- Member
- Registered: 2008-11-04
- Posts: 37
Re: Eigene Tracks einfach anzeigen -- howto?
Öffentliche GPS-Tracks von a_kemper
Bitte für jeden einzelnen Pfad (Track) eine eigene *.gpx Datei ![]()
Offline
#4 2009-10-12 15:00:35
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Damit stellt man den Track aber OSM zur Verfügung. Das könnte problematisch sein, wenn man den Track nicht aufgezeichnet hat, sonder er bspw. eine geplante Tour ist, die man aus urheberrechtlich geschützten Karten abgezeichnet hat. Diese Daten haben ja nichts im OSM-Projekt zu suchen. Andernfalls wäre es eine Möglichkeit, wenn gleich doch die Lösung von Google bzw. GPSies deutlich besser ist, da man hier den Track nur einer bestimmten Gruppe veröffentlicht und die Veröffentlichung jederzeit stoppen kann. Muss ja nicht jeder wissen, wo ich so langfahre ;-)
Viele Grüße
Henning
Offline
#5 2009-10-12 15:30:56
- JohannesF
- Member
- Registered: 2009-05-06
- Posts: 99
Re: Eigene Tracks einfach anzeigen -- howto?
Hallo Andreas,
ganz so einfach geht das bei OSM (noch) nicht. Aber es geht.
Auf dieser Seite wird gezeigt, wie man solch eine Seite selbst erstellen kann:
http://wiki.openstreetmap.org/wiki/DE:O … ck_example
Ist recht einfach (angeblich 3 Minuten, kannst dann ja mal berichten), man braucht aber Webspace (braucht man aber sowieso, um die gpx-Datei zu veröffentlichen).
Bis dann
johannes
Offline
#6 2009-10-12 15:35:08
- vofiwg
- Member
- Registered: 2008-10-06
- Posts: 131
Re: Eigene Tracks einfach anzeigen -- howto?
Offline
#7 2009-10-12 18:10:15
- gmhofmann
- Member

- From: Heilbronx (Germany)
- Registered: 2008-12-31
- Posts: 297
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
"Jeder hat das Recht, sich idiotisch zu benehmen!" (Harold und Maude)
Offline
#8 2009-10-12 18:39:49
- vofiwg
- Member
- Registered: 2008-10-06
- Posts: 131
Re: Eigene Tracks einfach anzeigen -- howto?
Das ist richtig gut! ![]()
Offline
#9 2009-10-14 20:54:09
- Akrisios
- Member
- Registered: 2009-01-04
- Posts: 15
Re: Eigene Tracks einfach anzeigen -- howto?
Auf dieser Seite wird gezeigt, wie man solch eine Seite selbst erstellen kann:
http://wiki.openstreetmap.org/wiki/DE:O … ck_example
Danke für den Link!
Ich hab das Ganze mir jetzt ein wenig angepasst und mit PHP dynamisch gemacht.
Ich kann jetzt einfach über ein Webinterface Files hochladen, dann wird der erste Trackpunkt direkt als Mittelpunkt der Anzeige genommen, und der Track dann angezeigt.
Die Tracks werden auf dem Server gespeichert, eine Funktion, einen einmal hochgeladenen Track erneut anzuzeigen ist noch nicht implementiert.
Ich bastel noch ein wenig und kann die nötigen Erweiterungen dann ja hier posten.
Last edited by Akrisios (2009-10-14 20:57:05)
Offline
#10 2009-10-15 06:21:44
- Hobby Navigator
- Member
- From: Aßlar, Germany
- Registered: 2007-11-11
- Posts: 1,616
Re: Eigene Tracks einfach anzeigen -- howto?
Hallo Akrisios,
das wollen wir doch hoffen das du dein Ergebnis hier präsentierst
Ich denke das Interesse daran ist recht groß.
Georg
"Ich denke, dass es einen Weltmarkt für vielleicht fünf Computer gibt."
Thomas Watson, Vorsitzender von IBM, 1943
Offline
#11 2009-10-15 08:41:38
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Kann mich Georg nur anschließen...
Viele Grüße
Henning
Offline
#12 2009-10-15 17:48:03
- Akrisios
- Member
- Registered: 2009-01-04
- Posts: 15
Re: Eigene Tracks einfach anzeigen -- howto?
dann wollen wir mal....ich nenne es GPX-View 0.01
Was ihr braucht:
Webspace mit PHP-Unterstützung
ein wenig HTML/PHP Erfahrung. Ganz wenig.
die folgende Anleitung:
Legt euch auf eurem Webserver am besten ein eigenes Verzeichnis an, in das alle Dateien rein kommen, die wir brauchen.
Legt in diesem Verzeichnis das Verzeichnis "files" an. In dieses Verzeichnis werden die gpx-daten geschrieben.
Erstellt die Datei GPX.js, wie im Wiki-Tutorial (JavaScript-Datei_erstellen).
Erstellt die CSS-Datei map.css, wie im Wiki-Tutorial (CSS-Datei_erstellen). Achso, ich hab folgende Änderung vorgenommen: Ich hab das background-color: von "#000000" in "#c0c0c0" geändert.
Jetzt gehts ans Eingemachte. Wir brauchen eine Datei, die uns das Formular und die Karte anzeigt. Erstellt also ähnlich wie im Wiki-Tutorial eine Datei mit dem Inhalt des ersten Code-Feldes unten.
Speichert diese als index.php. Diese Datei ist ähnlich der HTML-Datei aus dem Tutorial, sie zeigt keine Karte an, wenn sie nicht weiß, welche Position zu verwenden ist, sondern das Uploadformular.
Ist eine Datei hochgeladen, zeigt sie die Karte und den Permalink dazu - und kein Uploadformular mehr. Für den Permalink passt bitte das www.eure-domain.de/Verzeichnis/ an.Jetzt kommt eine Datei, die es im originalen Tutorial so nicht gibt, sie entsteht aus dem zweiten Code-Feld unten.
Diese Datei bitte unter Layercontrol.php speichern. Diese Datei besteht im Wesentlichen aus dem langen JavasScript-Teil des originalen Tutorials (HTML-Datei_erstellen).
Die ersten Zeilen, die die anzuzeigenden Koordinaten beinhalten sind ersetzt durch ein wenig PHP-Spielerei, die aus dem GPX-File die ersten Koordinaten liest und als Kartenmittelpunkt wählt. Der Wert danach zeigt den Start-Zoom-Wert. Er kann geändert werden, wenn gewünscht. Weiter unten wird dem Layer dann noch einmal die anzuzeigende gpx-Datei übergeben.Alle 4 Dateien in euer Verzeichnis auf dem Server laden.
www.eure-domain.de/Verzeichnis/ aufrufen - sich freuen.
Ich übernehme keine Garantie für Funktion, aus der Nutzung entstehende Schäden, insbesondere an der Integrität eures Webservers, usw.!
Für Verbesserungsvorschläge bin ich dankbar.
Optisch ist das Ganze kein Hingucker, wer sich in CSS auskennt, kann ja selbst was dagegen tun ;-)

Ich hab das System testweise laufen, kann es wegen Trafficbeschränkungen aber nicht der Öffentlichkeit zugänglich machen. Für kleine Tests eurerseits bin ich bereit, euch die URL in einer privaten Nachricht zu nennen.
index.php:
<?
$filetype=0;
if($_FILES) {
$tempfile = $_FILES['file']['tmp_name'];
$filename = strtoupper($_FILES['file']['name']);
if(substr($filename, -4)==".GPX") $filetype=1;
}
if($tempfile!="" && $filetype==1)
{
$target = basename($filename);
move_uploaded_file($tempfile, "files/".$target);
chmod("files/".$target, 0604);
}
if ($_REQUEST['track'])
$target = $_REQUEST['track'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"
<head>
<title>OSM GpX Track</title>
<? if ($target!="") echo "
<script src=\"http://www.openlayers.org/api/OpenLayers.js\" type=\"text/javascript\"></script>
<script src=\"http://www.openstreetmap.org/openlayers/OpenStreetMap.js\" type=\"text/javascript\"></script>
<script src=\"http://www.openlayers.org/api/Ajax.js\" type=\"text/javascript\"></script>
<script src=\"GPX.js\" type=\"text/javascript\"></script>
<script src=\"Layercontrol.php?file=$target\" type=\"text/javascript\"></script>
";
?>
<link rel="stylesheet" type="text/css" href="map.css">
</head>
<body <? if ($target!="") echo "onload=\"init();\""; echo ">";
if ($target=="") echo "
<form enctype=\"multipart/form-data\" action=\"\" method=\"post\">
<fieldset>
<legend>Track anzeigen:</legend>
<input name=\"file\" type=\"file\" class=\"text\" /><br />
<input type=\"submit\" value=\"anzeigen\" class=\"submit\" />
</fieldset>
</form>
";
else echo "permalink: <a href=\"www.eure-domain.de/Verzeichnis/?track=$target\">www.eure-domain.de/Verzeichnis/?track=$target</a><br />
<div id=\"map\"></div>
Karte von <a href=\"http://www.openstreetmap.org\" target=\"_blank\">www.openstreetmap.org</a>";
?>
</body>
</html>Layercontrol.php:
<?
header("Content-Type: text/javascript");
if ($_REQUEST['file'])
$file = $_REQUEST['file'];
$fp = fopen("files/".$file, "r");
while (! feof( $fp )) {
$zeile = fgets( $fp , 4096);
//$zeile = chop( $zeile );
if (strpos($zeile,"<trkpt")!==false) break;
}
fclose( $fp );
$zeile=preg_replace("@<trkpt @", "", $zeile);
$zeile=preg_replace("@>@", "", $zeile);
$zeile=trim($zeile);
$zeile=preg_replace("@\"@","",$zeile);
$zeile=preg_replace("@lat@","var lat",$zeile);
$zeile=preg_replace("@lon@","\n var lon",$zeile);
echo $zeile;
?>
var zoom=13
var map; //complex object of type OpenLayers.Map
//Initialise the 'map' object
function init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layerMapnik);
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
layerMarkers = new OpenLayers.Layer.Markers("Markers");
map.addLayer(layerMarkers);
var lgpx = new OpenLayers.Layer.GPX("Track", "<?php echo "files/".$file; ?>", "#0000FF");
map.addLayer(lgpx);
var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
map.setCenter (lonLat, zoom);
var size = new OpenLayers.Size(21,25);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon('http://www.openstreetmap.org/openlayers/img/marker.png',size,offset);
layerMarkers.addMarker(new OpenLayers.Marker(lonLat,icon));
}Offline
#13 2010-01-04 19:20:09
- KlausD
- Member
- Registered: 2009-01-21
- Posts: 5
Re: Eigene Tracks einfach anzeigen -- howto?
eine Funktion, einen einmal hochgeladenen Track erneut anzuzeigen ist noch nicht implementiert.
Ich bastel noch ein wenig und kann die nötigen Erweiterungen dann ja hier posten.
Super Sache wie weit bist du mit dieser Funktion?
Grüße KlausD
Offline
#14 2010-01-27 19:38:53
- AlterSachse
- Member

- From: D-02763
- Registered: 2010-01-27
- Posts: 125
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Hallo
Also da ich diesen Lösungsvorschlag von „Akrisios“ super fand habe ich ein wenig was dazu gebastelt denn mir ging es hauptsächlich um das anzeigen der Tracks und nicht um das hochladen.
Also mein Track liegt im selben Ordner wie die php Seite und wird mittels URL an die Ausgabe Seite übergeben. Habe das so gelöst da ich eine Webseite mit vielen MTB Touren betreibe und jede Tour in einem Ordner liegt und dort auch immer die Tracks dort sind.
Natürlich kann man das noch viel eleganter über eine Datenbank lösen aber für meine Zwecke reicht das hier aus.
Da ich hier nicht den ganzen PHP schreiben möchte habe ich zum Download eine kleine zip gemacht.
Alles dazu unter http://www.mtb.kilu.de dort gibt es eine kleine Demo.
Wichtig "Musste die Variable 'gpx' durch 'track' ersetzen da die Variable schon vergeben war auf meiner Seite. Die GPX.js ist unverändert weiterverwendet worden.
So nun kann jeder weiter an der Sache basteln. Wer eine große Track Verwaltung sucht sollte sich mal das hier http://osm.erlkoenigkabale.eu/phpmygpx.php anschauen, das ist auf eine Datenbank aufgebaut und funzt auch super.
Gruß
Folgender php code kommt auf die Seite1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
</head><body>
<h1>Track auf OSM</h1>
<p>
<?php
$map = "http://mtb.kilu.de/ausgabe/map.php"; //Pfad zur URL muss angepast werden
$track = "Feierabend.gpx"; //die Datei muss im selben Ordner liegen wie diese Seite
if (file_exists($track)) // prüfen ob der Track auch da ist
{
$track = "http://".($_SERVER['HTTP_HOST']).(dirname($_SERVER['PHP_SELF']))."/"."$track"; // erstellt die URL des Tracks
echo "<li><a href='$map?track=$track'>Track in OSM Karte</a></li>"; // das ist der Link der die Ausgabeseite aufruft
}
?>
</p></body>
</html>
Folgender php code kommt auf die Ausgabeseite
<?php
$track = $_REQUEST['track'];
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>GPX-Track von der Tour auf OSM Karte</title>
<?php include("#script.php"); ?>
<style type="text/css">.bildmitte { display: block; text-align: center; margin: 0 auto;}</style>
</head>
<!-- body.onload da wird die Funktion aus dem script.php aufgerufen -->
<body onload="init();">
<h1><?php echo "$title"; ?></h1>
<!-- DIV für das anzeigen der Karte -->
<div class="bildmitte" style="height:500px" id="map"></div>
<ul>
<li><a href="javascript:history.back();">Zurück</a></li>
</ul>
<h2>Downloads</h2>
<ul>
<li><a href="http://mtb.kilu.de" target="_top">HOME</a></li>
<li><a href="<?= $track ?>" target="_blank">Download der GPX Datei</a></li>
<li><a href="http://www.openstreetmap.org" target="_blank">Große openstreetmap Karte</a></li>
</ul>
</body>
</html>
so und hier die #script.php
<!-- bring in the OpenLayers javascript library -->
<script type="text/javascript" src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript" src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
<script type="text/javascript" src="GPX.js"></script>
<script type="text/javascript">
<?
$fp = fopen( $track, "r"); /* $track ist der Trackname aus der vorhergehenden Seite */while (! feof( $fp )) {
$zeile = fgets( $fp , 4096);
if (strpos($zeile,"<trkpt")!==false) break;
}
fclose( $fp );
$zeile=preg_replace("@<trkpt @", "", $zeile);
$zeile=preg_replace("@>@", "", $zeile);
$zeile=trim($zeile);
$zeile=preg_replace("@\"@","",$zeile);
$zeile=preg_replace("@lat@","var lat",$zeile);
$zeile=preg_replace("@lon@","\n var lon",$zeile);echo $zeile;
?>
var zoom=12
var map; //complex object of type OpenLayers.Map
//Initialise the 'map' object
function init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layerMapnik);
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
layerMarkers = new OpenLayers.Layer.Markers("Start / Wegpunkte");
map.addLayer(layerMarkers);
var lgpx = new OpenLayers.Layer.GPX("GPX-Track", "<?= $track ?>", "#9900ff");
map.addLayer(lgpx);var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
map.setCenter (lonLat, zoom);var size = new OpenLayers.Size(21,25);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon('http://www.openstreetmap.org/openlayers/img/marker.png',size,offset);
layerMarkers.addMarker(new OpenLayers.Marker(lonLat,icon));
}
</script>
GPS --Huawei Mate 20 / Garmin Oregon700 eigene OSM-Karte für meine Hometouren
Software -- Linux Debian Stable, QMapShack, JOSM
Offline
#15 2010-01-27 22:26:11
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Hallo AlterSachse,
vielen Dank für die Scripte. Ich hab die ersten beiden für mich angepasst. Was mir an der Darstellung noch nicht gefällt, ist die Startposition der Karte. Könnte man die auch so setzen, dass man den kompletten Track mittig sieht?
Oder müsste ich dazu zuerst diese Position und dann den Zoomwert aus der gpx-Datei berechnen?
EDIT:
Übrigens sehe ich ein "Problem" in deinem Code. Durch die Übergabe der kompletten gpx-Track-URL in dem Link ist es möglich, jede beliebige gpx-Datei darzustellen. Evtl. sollte man nur den Dateinamen übergeben und die url erst auf der Map-Seite erstellen.
Wenn diese Freiheit gewollt ist, ist es natürlich kein Problem...wollte nur drauf hinweisen.
Last edited by aighes (2010-01-27 22:31:26)
Viele Grüße
Henning
Offline
#16 2010-01-28 08:32:56
- AlterSachse
- Member

- From: D-02763
- Registered: 2010-01-27
- Posts: 125
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
HI,
ja Du hast recht mit der URL aber ich habe noch keine andere Lösung gefunden, wahrscheinlich baue ich aber mal eine Datenbank die nur die gpx Daten enthält und dann ausgelesen wird.
Das mit dem ganzen Track in die Mitte zu bekommen ist nicht so einfach, oder besser gesagt ich bin daran gescheitert.
Wie Du schon sagst man muss aus dem Track heraus die Mitte berechnen und auch den Zoom und das geht nur über eine Datenbank sag ich mal.
Wenn Du mal die Datei von http://osm.erlkoenigkabale.eu/phpmygpx.php probierst dann siehst Du dass das geht. Er schreibt aber die ganze gpx in eine Datenbank, also jeder Track Punkt steht in der Datenbank, und dann errechnet er die Mitte aus dem Track. Ich bin aber am Nachbau gescheitert, da sind meine PHP Kenntnisse einfach zu gering.
Aber falls jemand noch was anderes findet Bitte hier posten, bin für jedes PHP Schnipsel dankbar.
Gruß
Last edited by AlterSachse (2010-01-28 08:35:12)
GPS --Huawei Mate 20 / Garmin Oregon700 eigene OSM-Karte für meine Hometouren
Software -- Linux Debian Stable, QMapShack, JOSM
Offline
#17 2010-01-28 12:31:00
- greencaps
- Member
- Registered: 2009-10-05
- Posts: 423
Re: Eigene Tracks einfach anzeigen -- howto?
Wo scheitert die Berechnung des Mitten? Wo liegt genau dein Problem?
Offline
#18 2010-01-28 12:38:26
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Hallo,
die Situation ist folgende: die gpx-Datei liegt auf dem Server, die lat und die lon-Werte würde ich sicher jeweils in ein Array bekommen. Dann verlässt es mich aber schon...
Wäre schön, wenn du hier mit Code oder einem Algorithmus-Ansatz helfen könntest...
Viele Grüße
Henning
Offline
#19 2010-01-28 13:22:04
- greencaps
- Member
- Registered: 2009-10-05
- Posts: 423
Re: Eigene Tracks einfach anzeigen -- howto?
Alles in ein array zu bekommen ist die meiste Arbeid.
Vergess erst das Mitten. declariere vier variabelen;
maxlat = -90
minlat = +90
maxlon = -180
minlon = 180
jetzt eine schleife wo du immer eine lat und lon aus das array nimst
if ( lat < minlat ) minlat = lat
if ( lat > maxlat ) maxlat = lat
if ( lon < minlon ) minlon = lon
if ( lon > maxlon ) maxlon = lon
am ende hast du die coordinaten von den boundingbox von der track
aus minlon, maxlon, minlat und maxlat ist einfach das Mitten zu berechnen.
Offline
#20 2010-01-28 13:47:14
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Das Einlesen ins Array war kein Problem. Den Algorithmus hab ich schonmal in VB geschrieben und musste ihn nur in php übersetzten. Der Rest war dann auch nicht das Problem. Google meinte, php hat Funktionen, um Maximum und Minimum eines Arrays zu bestimmen.
Was noch fehlt ist eine Bestimmung des Zoomfaktors. Hat jemand dafür eine Idee?
Last edited by aighes (2010-01-29 13:31:24)
Viele Grüße
Henning
Offline
#21 2010-01-28 15:21:07
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Zu der Zoomstufe:
Die Umsetzung hat bei mir gerade bei mehreren gpx-Dateien geklappt. Evtl. müssen die Werte für h_faktor und v_faktor angepasst werden. Eine Berechnung der Tracklänge ist auch integriert.
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<head>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
<?php
if(isset($_GET["track"])){
?>
<title>GPX-Track auf OSM Karte</title>
<script type="text/javascript" src="http://www.openlayers.org/api/OpenLayers.js"></script>
<script type="text/javascript" src="http://www.openstreetmap.org/openlayers/OpenStreetMap.js"></script>
<script type="text/javascript" src="GPX.js"></script>
<script type="text/javascript">
<?php
$track_name = $_GET["track"];//Dateiname des gpx-Track
$track = "./gpx/".$track_name; // erstellt die URL des Tracks aus dem Unterordner gpx
$fp = fopen( $track, "r"); // $track ist der Trackname
$n=0;
while (! feof( $fp )) {
$zeile = fgets( $fp , 4096);
if (strpos($zeile,"<trkpt")!==false) {
$temp = explode("\" lon=\"",$zeile);
$lat[$n] = substr($temp[0], strpos($temp[0], "\"") + 1);
$lon[$n] = substr($temp[1], 0, strpos($temp[1], "\""));
$n++;
} //end if
} //end while
fclose( $fp );
$i = 0;
$r0 = 6371.0;
$laenge = 0.0;
while ($i < ($n-1)) {
$a = (90.0 - $lat[$i]) * M_PI / 180.0;
$b = (90.0 - $lat[$i+1]) * M_PI / 180.0;
$gamma = (abs($lon[$i+1] - $lon[$i])) * M_PI / 180.0;
$c = $r0 * acos(cos($a)*cos($b) + sin($a)*sin($b)*cos($gamma));
$laenge = $laenge + round(1000 * $c) / 1000;
$i++;
}//end while
$laenge = str_replace(".",",",$laenge);
$maxlat = max($lat);
$minlat = min($lat);
$maxlon = max($lon);
$minlon = min($lon);
$width=800;//Breite der Karte in pixel
$height=600;//Höhe der Karte in pixel
$j=18;
$h_faktor=304000;//experimenteller Wert für die Höhe
while (($height/($maxlat-$minlat)) < $h_faktor) {
$h_faktor = $h_faktor/2;
$j--;
if ($j < 0) break;//Not-Aus
}
$i=18;
$v_faktor=192000;//experimenteller Wert für die Breite
while (($width/($maxlon-$minlon)) < $v_faktor) {
$v_faktor = $v_faktor/2;
$i--;
if ($i < 0) break;//Not-Aus
}
if ($i <= $j) $zoom=$i;
if ($i > $j) $zoom=$j;
?>
var map; //complex object of type OpenLayers.Map
//Initialise the 'map' object
function init() {
map = new OpenLayers.Map ("map", {
controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher(),
new OpenLayers.Control.Attribution()],
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
maxResolution: 156543.0399,
numZoomLevels: 19,
units: 'm',
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
} );
layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layerMapnik);
layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
map.addLayer(layerTilesAtHome);
layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
map.addLayer(layerCycleMap);
<?php
echo"var lgpx = new OpenLayers.Layer.GPX(\"".substr($track_name, 0, strlen($track_name) - 4)."\", \"".$track."\", \"#0000ff\");\n";
echo"map.addLayer(lgpx);\n";
echo"var lonLat = new OpenLayers.LonLat(".(($minlon+$maxlon)/2).",".(($minlat+$maxlat)/2).").transform(new OpenLayers.Projection(\"EPSG:4326\"), map.getProjectionObject());";
echo"map.setCenter (lonLat, ".$zoom.");";
?>
}
</script>
<?php
echo"</head>\n";
echo"<body onload=\"init();\">\n";//Funktion init() aufrufen
echo"<div style=\"width:".$width."; height:".$height."\" id=\"map\"></div>\n"; //DIV für das anzeigen der Karte
echo $laenge." km\n";
}
else {
?>
<title>GPX-Track auf OSM Karte</title>
<?php
echo"</head><body>\n";
$name="test.gpx";
echo"<a href=\"./index.php?track=".$name."\">".$name."</a>\n";
}
?>
</body></html>Last edited by aighes (2010-01-29 11:03:30)
Viele Grüße
Henning
Offline
#22 2010-01-29 10:59:51
- aighes
- Member
- From: Shanghai
- Registered: 2009-03-29
- Posts: 5,383
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
So...ich hab obigen Code mal noch etwas ergänzt und optimiert...
Viele Grüße
Henning
Offline
#23 2010-01-29 12:25:34
- greencaps
- Member
- Registered: 2009-10-05
- Posts: 423
Re: Eigene Tracks einfach anzeigen -- howto?
if (strpos($zeile,"<trkpt")!==false) {
$temp = explode("\" lon=\"",$zeile);
$lat[$n] = substr($temp[0], strpos($temp[0], "\"") + 1);
$lon[$n] = substr($temp[1], 0, strpos($temp[1], "\""));
if (strpos($zeile,"<trkpt")!==false) {
Ist das richtich php ? Ich würde denken
if (strpos($zeile,"<trkpt") != false )
Aber denn noch. strpos() liefert eine integer. Nich schön ein int mit ein boolischer werd zu vergleichen.
if (strpos($zeile,"<trkpt") )
würde reichen.
Dann: deine code nimmt an das die zeile so aussieht:
<trkpt lat="53.227362" lon="6.563737">
aber es gibt auch .gpx files wo die reihenfolge umgekehrt is. Dann geht es schief
<trkpt lon="8.60706806182861328125" lat="54.500476837158203125"/>
Besser du scheibst eine kleine function getattibvalue()
if (strpos($zeile,"<trkpt")) {
$lat[$n] = getattibvalue($zeile, "lat")
$lon[$n] = getattibvalue($zeile, "lon")
Offline
#24 2010-01-29 12:44:58
- Zartbitter
- Member
- Registered: 2009-04-22
- Posts: 201
Re: Eigene Tracks einfach anzeigen -- howto?
Ich bin mal über das hier gestolpert:
http://linuxundich.de/de/webhosting/ope … einbetten/
Das ist vielleicht eine Alternative und funktioniert über die Einbettung eines iframe, dessen Inhalt auf dem Server des Autors bereitgestellt wird. Verwendet habe ich es (bisher) aber noch nicht.
Offline
#25 2010-01-29 13:07:56
- Bikeman2000
- Member
- Registered: 2009-09-27
- Posts: 223
- Website
Re: Eigene Tracks einfach anzeigen -- howto?
Mit Openlayers lassen sich auch GPX Tracks einbinden:
http://dev.openlayers.org/docs/files/Op … PX-js.html
Offline