script zur Routenberechnung ohne Kartenansicht

Hallo,

Ich bin auf der Suche nach einem kleinen Routenplaner Script in HTML. Es soll als Ergebnis nur die Entfernungskilometer anzeigen. Die Startadresse soll voreingestellt sein. Das Script soll im Warenkorb meines Shop eingebunden werden, dort muss die Datenübertragung verschlüsselt gestaltet sein. Kann jemand so einen Script schreiben oder hat jemand schon so etwas?
Danke schon mal,
David

Hallo David, willkommen im Forum :slight_smile:

Mit einem “kleinen Skript” ist es wohl nicht getan, da muss schon serverseitig einiges laufen, denn alle Straßen von Deutschland ist schon ein Batzen, geschweige denn das darauf rumgerechne
Schau mal am besten hier, was es fertiges gibt.
http://wiki.openstreetmap.org/wiki/Routing

Soweit ich weiß sollte Monav für dich sehr gut geeignet sein, da es viele Sachen vorberechnet und so sehr schnell arbeiten kann. Und bei deiner Sache scheint es ja nur um ein PKW/LKW Profil zu gehen, oder?
http://wiki.openstreetmap.org/wiki/MoNav

Willkommen auch von mir!

Wie soll die Zieladresse eingegeben werden? Hast du dafür die Geokoordinaten und das Script soll die nächste Straße automatisch suchen?
Ansonsten wäre zu klären: Pkw, Lkw, Fußgänger, Radfahrer? Müssen Abbiegege-/-verbote beachtet werden?

Ansonsten schließ ich mich !i! an, sowas ist relativ rechenintensiv. Ob das mit einem Java- oder PHP-Script innerhalb akzeptabler Zeit geht, weiß ich nicht…

Das Zauberwort könnte auch Datenbank heißen. Dies wäre Beispielsweise mit Pgrouting zu erreichen. Hier können mittels Php die Koordinaten übergeben werden und dann wird der Weg in der Datenbank berechnet. Bei Bedarf sogar dauerhaft gespeichert. Ob das für alle Adressen in Deutschland sinnvoll ist, sei einmal dahingestellt.

Eigentlich braucht David ja nur eine Liste, die ihm für jede Postleitzahl die Entfernung angibt. Da müsste er nur einmal heftig rechnen (z.B. auf dem lokalen PC) und könnte dann ganz schnell drauf zugreifen.

Na ihr seid schnell, total gut. Ich beschreibe einmal etwas genauer wofür ich das brauche.
Ich habe einen Internetshop, zur Frachtpreisberechnung muss mein Kunde die Entfernung von uns zu seiner Lieferadresse in km haben. Mit diesen km kann er dann die passende Versandmethode auswählen.
Wie soll die Zieladresse eingegeben werden?
Die Adresse soll als Straße, Plz und Ort eingegeben werden. Die Strecken werden von LKW befahren, als Routenvariante nicht unbedingt die kürzeste sondern die optimale.
Das Problem was ich sehe ist die Serverseitige Berechnung. Wenn das wirklich so große Datenmengen sind muss auf einem Server gerechnet werden, dafür muss während des Bestellvorgangs eine Verbindung zu einem anderen Server aufgebaut werden, diese ist normale nicht verschlüßelt. Mein Kunde bekommt dann einen Warnhinweis und ist natürlich verunsichert und bricht den Bestellvorgang eher ab.
Die Idee mit der Datenbank ist mir auch schon gekommen. Ich habe da bisher keine fertige gefunden, und alle Postleitzahlen einzeln heraussuchen und manuel die Entfernung zu berechnen ist mir zu langwierig. Ein Problem bei einer Postleitzahlen Datenbank ist das die Flächenpostleitzahlen Gebiete, gerade in Ostdeutschland, so groß sind das die von der Spedition vorgegeben km Grenzen überschritten werden. Eine Postleitzahl kann in zwei Versandzonen liegen, das sind dann für mich Mehrkosten von 80 bis 160 €.
Wenn berechnungen nicht möglich sind müsste ich das in Kauf nehmen. Es wird hoffentlich nicht so oft vorkommen :wink:

Zählt die “Straßenlänge” oder geht aus Luftlinie +20% z.B ? Letzteres könnte man sehr gut ausrechnen.

Ich denke die Luftlinie +20 % kommt auch in etwa hin.

Wenn Du zwei Koordinaten hast, dann kannst Du relativ einfach die grobe Entfernung ausrechnen:

Entfernung Nord-Süd: 1° sind 111120 Meter

Bei der Entfernung Ost-West wird es leider etwas komplizierter. Am Quator sind es auch 111120 Meter für ein 1° Entfernung, an den Polen treffen sich aber alle Linien an einem Punkt. Wenn Du den Kosinus der Nord-Koordinate ausrechnest erhältst Du eine Zahl von 0 (Nordpol) bis 1 (Äquator). Mit dieser Zahl mußt Du die Entfernung mal nehmen.

Beispiel: cos(degtorad(60))=0,5 (degtorad, da mein Kosinus mit RAD rechnet) → Du befindest Dich in 60° Nord, dann ist der Kosinus genau 0,5. → 1° Ost-West-Richtung sind also nur noch 55560 Meter.

Kompliziert wird, es, wenn Du die Diagonale ausrechnen möchtest. Denn Du hast ja ein Trapetz auf einer Kugel. Wenn Du nur einfach die Diagonale mit Wurzel(a²+b²) ausrechnest, hast Du einen Näherungswert. Ich habe es nicht nachgerechnet, aber wenn Du Entfernungen < 1000 km ausrechnest, wird der Näherungswert sicher ausreichend genau sein. Wenn Du noch 20% dazu addierst, hast Du sicher eine ausreichend gute Basis.

Bleibt nur die Frage, wo Du die Zieladresse in Koordinaten umrechnest. Entweder über die Postleitzahl oder über eine Suche z.B. über Nominatim.

Also wenn dir Luftlinie +20% ausreichen, wird es ganz einfach. du legst dir eine Postgisdatenbank an und fragst dann einfach deine Datenbank wie weit ist es von xy nach z. Dafür hat Postgis bereits die entsprechenden Formeln. Schwieriger wird es jedoch die entsprechende Adresse zu finden. Denn leider sind die Adressen noch nicht vollständig bei OSM erfasst.
Dieses Problem ließe sich aber leicht lösen, wenn du eine Karte einblendest auf welcher der Kunde durch Klick sein Ziel selbst bestimmt.
Ein Pgrouting workshop kannst du hier finden: http://workshop.pgrouting.org/
Bestandteil des Wokrshops ist auch eine Beispieldatenbank für Barcelona. Die Daten lassen sich aber bei genügend Speicher gegen die Daten Europas austauschen.

Dieses Problem ließe sich aber leicht lösen, wenn du eine Karte einblendest auf welcher der Kunde durch Klick sein Ziel selbst bestimmt.

Genau, kann ich eine Karte gestalten die 10 Radien um unseren Standort hat. Als 10 Lieferzonen, ähnlich den Tarifzonen von Verkehrsbetrieben. Dann ein Feld wo der Kunde sein Adresse eingibt. Auf der Karte wird die Adresse angezeigt und jeder kann leicht die Tarifzone erkennen. Eine Routenberechnung muss nicht mehr durchgeführt werden. Diese Radien könnte man auch 20 % größer machen und hat so wieder die annährenden Streckenkilometer.
Das ganze ist nur für Deutschland gesucht.
Hier schon mal die Vorschau wo es hin soll, wie ihr bemerkt ist es noch nicht fertig, also bitte nichts bestellen:)
http://www.lehm-laden.de/epages/63074720.sf/sec6a5acadfc7/?ObjectID=8183878
momentan ist dort so ein hässliches Teil von Klicktel.

Also zunächst einmal musst du die Kreise 20% kleiner machen und nicht größer. Das zweite Problem ist, dass es sich eigentlich nicht um Kreise handelt. Aber da du eh schon mit Pauschalen umgehst, spielt das dann wahrscheinlich auch kaum noch eine Rolle.
Mit der Bibliothek openlayers hast du die Möglichkeit auch Objekte zu platzieren. Da nimmst du dann einfach einen Kreis und fertig. Wenn du willst kannst du den Kreis auch zu einem Polygon machen und dann dieses einbinden. Schwieriger ist dann hingegen herauszufinden in welchem Kreis sich die Adresse befindet. Dafür müsstest du dann etwas tiefer in das Javascript einsteigen.
Ein ähnliches Problem findest du vielleicht hier: http://forum.openstreetmap.org/viewtopic.php?id=12615.