Google Maps parsen

Ronald Nickel

Legendäres Mitglied
Hallo

ich benötige eine Möglichkeit die zu fahrende Straßendistanz zweier Orte in Deutschland zu ermitteln. Angesicht der hochen Abfragefrequenz bin ich der Meinung das das Parsen von Google Mpas nicht sinvoll ist. Hat jemenand einen anderen Ansatz punkt wie ich die Straßenkilometer zwischen zwei Orten ermitteln kann? (nicht Fluglinie) Super wäre natürlich auch die Fahrzeit aufgrund der zugelassenen Höchstgeschwindigkeit.

Bin für jede Idee dankbar

Lieben Gruß Ronny
 
Ich bin aus deiner Anfrage jetzt nicht ganz schlau geworden, ob du nun die Google Maps API nutzen willst oder nicht, aber dein Problem lässt sich mit der API jedenfalls ganz leicht lösen:

In der Klasse "GDirections" gibt es die Methoden "getDistance()" und "getDuration()".
getDistance()
...ein Objekt mit den Werten "Entfernung in Metern" und "Entfernung in der des Startpunktes landesüblichen Einheit".

getDuration()
...ein Objekt mit den Werten "Fahrtzeit in Sekunden" und "Fahrtzeit in der des Startpunktes landesüblichen Formatierung".

=> GDirections: getDistance() und getDuration() in der Google Maps API
 
@connectR
vielen Dank für die Antwort

2 Fragen stellen sich im Zusammenhang mit der Google Maps API Nutzung

1.
Dürfen die Resultate kommerziell genutzt werden wie beispielsweise eine Reisekostenabrechnung?

2. Macht die Nutzung Sinn bei ca 9000 Abfragen/Tag

Gruß Ronny
 
Beide Fragen werden eigentlich in den FAQ beantwortet:

QUOTE (Google Maps API FAQ)

Meine Site wird stark frequentiert. Kann ich das Maps-API verwenden?

    Selbstverständlich. Die Anzahl der Zugriffe auf die Karten auf Ihrer Site ist nicht begrenzt. Wenn Ihre Site schätzungsweise mehr als 500.000 Seitenzugriffe pro Tag verzeichnen wird, wenden Sie sich an uns, damit wir zur Bewältigung des Datenverkehrs auf Ihrer Site zusätzliche Kapazitäten bereitstellen können.

    Beachten Sie, dass die Funktion zur Geokodierung (Konvertierung von Adressen in Koordinaten) den in diesen FAQs dokumentierten Einschränkungen hinsichtlich der Verwendung unterliegt.



Kann ich die Google Maps-APIs auf einer kommerziellen Website verwenden?

    Solange Ihre Site für Kunden allgemein kostenlos zugänglich ist, dürfen Sie das Google Maps-API verwenden. Wird Ihre Website beispielsweise durch Werbung finanziert, entspricht Sie wahrscheinlich den Nutzungsbedingungen für das Google Maps-API. Sollten Sie Ihren Kunden die Platzierung von Informationen auf Ihrer Karte (beispielsweise um ihr Haus zum Verkauf anzubieten) in Rechnung stellen, diese Informationen jedoch über das Google Maps-API in einem kostenlosen Bereich Ihrer Site anzeigen, erfüllen Sie die Nutzungsbedingungen für das Google Maps-API wahrscheinlich ebenfalls.

    Es ist jedoch nicht jede kommerzielle Verwendung zulässig. Falls Ihre Site eines der folgenden Kriterien erfüllt, müssen Sie Google Maps API Premier verwenden:

        * Ihre Site steht nur zahlenden Kunden zur Verfügung.
        * Ihre Site ist nur innerhalb Ihres Unternehmens oder in Ihrem Intranet verfügbar.

    Google behält sich wie bereits erwähnt das Recht vor, Ihre Nutzung des Google Maps-API jederzeit auszusetzen oder zu beenden, daher sollten Sie die Nutzungsbedingungen unbedingt sorgfältig lesen.




Wobei deine zweite Frage ja eher den SINN erfragt... Ich denke, die Frage kannst wohl nur du selbst beantworten. Möglich ist es jedenfalls ;-)
 
Hmm... leider finde ich die angezeigten Fallbeispiele nicht gerade repräsentativ.

Gibt es hier jemanden, der mir gegen eine kleine Aufwandsentschädigung hilft die o.g. Wert abzufragen und zusammen ein für mich verständliches Script schnitzt?

Gruß Ronny
 
QUOTE (Ronald Nickel @ Sa 22.08.2009, 15:00) ... oder fragen wir noch einfacher: Kennt sich jemand gut mit der Google-Maps API aus?

Gruß Ronny

Hallo Ronald,

frag einfach mal Peter Hansmann welcher auch hier bei ayom rumschwirrt. Er hat mir damals auch bei mir geholfen und kennt sich meiner Meinung nach her recht gut mit der google Maps - Geschichte aus...

Gruß
 
Hier der Code:

CODE

<script src="http://maps.google.com/maps?file=api&v=2&key=deinKey" type="text/javascript"></script>

    <style type="text/css">
     v\:* {
       behavior:url(#default#VML);
     }
     table.directions th {
background-color:#EEEEEE;
     }
 
     img {
       color: #000000;
     }
   </style>

   <script type="text/javascript">
var map;
   var gdir;
   var geocoder = null;
   var addressMarker;

   function initialize() {
     if (GBrowserIsCompatible()) {      
       map = new GMap2(document.getElementById("map"));
       gdir = new GDirections(map, document.getElementById("directions"));
       GEvent.addListener(gdir, "load", onGDirectionsLoad);
       GEvent.addListener(gdir, "error", handleErrors);

       setDirections("Winterthur CH", "Baden CH", "de");
     }
   }
   
   function setDirections(fromAddress, toAddress, locale) {
     gdir.load("from: " + fromAddress + " to: " + toAddress,
               { "locale": locale });
   }

   function handleErrors(){
   if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
     alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect.\nError code: " + gdir.getStatus().code);
   else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
     alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
   
   else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
     alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);

//   else if (gdir.getStatus().code == G_UNAVAILABLE_ADDRESS)  <--- Doc bug... this is either not defined, or Doc is wrong
//     alert("The geocode for the given address or the route for the given directions query cannot be returned due to legal or contractual reasons.\n Error code: " + gdir.getStatus().code);
     
   else if (gdir.getStatus().code == G_GEO_BAD_KEY)
     alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);

   else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
     alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
   
   else alert("An unknown error occurred.");
   
}

function onGDirectionsLoad(){
     // Use this function to access information about the latest load()
     // results.

     // e.g.
     // document.getElementById("getStatus").innerHTML = gdir.getStatus().code;
  // and yada yada yada...
}

   </script>

// in die body
<body onload="initialize()" onunload="GUnload()">

// wo die Map angezeigt werden soll!

<form action="#" onsubmit="setDirections(this.from.value, this.to.value, this.locale.value); return false">

 <table>
  <tr><th align="right">Von: </th>
  <td><input type="text" size="25" id="fromAddress" name="from"
    value="Winterthur CH"/></td>
  <th align="right">  to: </th>
  <td align="right"><input type="text" size="25" id="toAddress" name="to"
    value="Baden CH" /></td></tr>
  <tr><th>language: </th>
  <td colspan="3"><select id="locale" name="locale">
  <option value="en">english</option>
  <option value="de">deutsch</option>
   <option value="fr">france</option>
   </select>
   <input name="submit" type="submit" value="show route" />
  </td></tr>
  </table>
 </form>
   <br/>
   <table class="directions">
   <tr><th>route</th><th>map</th></tr>
   <tr>
   <td valign="top"><div id="directions" style="width: 275px"></div></td>
   <td valign="top"><div id="map" style="width: 250px; height: 300px"></div></td>
   </tr>
   </table>




Der Routenfinder findest du auf Alpenplaner unter Ausflüge.
 
OOOPS - cool
Wie separiere ich aber die Werte die in diesem DIV ganz unten generiert werden?

<td valign="top"><div id="directions" style="width: 275px"></div></td>

Ich brauche einmal die vom API ermittelte Kilometerzahl und SEPARAT die berechnete Fahrtdauer, die in diesem Div includiert werden.
Ich muss also diese Werte in je eine ColdFusion-Variable packen, um dann beispielsweise Fahrtkosten berechnen zu können.

Gruß Ronny
P.S. Sorry wegen der penetranten Fragerei aber JS ist nu wahrlich nicht meine Stärke
 
Kann mir ein Java-script jünger kurz zeigen wie ich aus der Funktion "onGDirectionsLoad" den Wert von "getDistance() " und "getDuration() "ausgeben kann?

Gruß Ronny
 
CODE <html>
<head>
<script src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q"></script>
<script type="text/javascript">

var map;
var directions;

function initialize() {
map = new GMap2(document.getElementById("map"));

directions = new GDirections(map);
GEvent.addListener(directions, "load", onRouteLoad);
directions.load("from: Zürich to: St.Gallen");

}
function onRouteLoad(){
document.getElementById("distanz").innerHTML = directions.getDistance().meters + " Meter";
document.getElementById("zeit").innerHTML = directions.getDuration().seconds + " Sekunden";

}

</script>
</head>
<body onload="initialize()">
<div id="map" style="width: 40%; height: 480px; float:left; border: 1px solid black;"></div>
<div id="distanz"></div>
<div id="zeit"></div>
<br/>
</body>
</html>

Das ist ganz normale Objektorientierung mit einer super(!) dokumentierten Klasse! Gibts in ColdFusion keine Objektorientierung? Dir ist schon klar, dass JavaScript Clientseitig ist oder?
 
QUOTE (Ronald Nickel @ Mo 24.08.2009, 13:10) Gehen muss es aber. Leider steige ich da noch nicht so wirklich durch.

Dass es geht ist mir schon klar
wink.gif


Google nach AJAX, da gibts viele Tuts!
 
Ist es denn nicht möglich die besagten Werte beispielsweie als "Value" in ein Formular einzufügen? Danach kann ich es ja weiterverwursten.

Gruß Ronny
 
Ich habe da mal was vorbereitet:
CODE
<h1>Der CFML-Ausdruck aus einer JavaScript Funktion:</h1>

<script language="javascript">
function TryOut()
{
document.write("Hallo Welt!");
}
</script>
Hier die Variablenausgabe der JavaScript - Funktion:<b><script>TryOut();</script></b>
<p>

<cfset MyVar="<script>TryOut();</script>">
<cfoutput>
Hier die Variablenausgabe der JavaScript - Funktion mit Coldfusion (CFML):
<b>#MyVar#</b>
</cfoutput>



funktioniert auchm soweit.

Frage hierzu:
Statt des Strings "Hallo Welt" brauche ich ein nummerischen Wert (Value). Wie schreibe ich also statt "Hallo Welt" eine Zahl?

Gruß Ronny
 
Indem du dort einfach eine Zahl hinschreibst...

EDIT: ich kann zwar kein Coldfusion, aber ich glaube, das was du da machst, macht überhaupt keinen Sinn!
 
@adrian

Noch mal kurz zum verständnis:

Ich muss 2 Werte, die aus dem Google Maps API zurückgegeben werden, sowie die Daten des Kunden der die Fahrdaten vorgibt in eine Datenbank schreiben. Die Distanzwerte werden vorher mit einer Kilometerpauschele multipliziert. Das ist der Hintergrund. Da ich keine andere Möglichkeit sehe aus Adressdaten eine Route und die damit verbundeen Strecken zu ermitteln halte ich mich derzeit an die Google Maps API. Die gibt die geforderten Daten allerdings lediglich per Javascript zurück. Diese müssen dann mit Coldfusion weiter bearbeitet werden. Thats it!

Wer bessere Vorschläge hat diese Procedur zu bewerkstelligen - ich bin für alles offen.

Gruß Ronny
 
CODE <html>
<head>
<script src="http://maps.google.com/maps?file=api&v=2&sensor=false&key=ABQIAAAA1XbMiDxx_BTCY2_FkPh06RRaGTYH6UMl8mADNa0YKuWNNa8VNxQEerTAUcfkyrr6OwBovxn7TDAH5Q"></script>
<script type="text/javascript">

var map;
var directions;

function initialize() {
map = new GMap2(document.getElementById("map"));

directions = new GDirections(map);
GEvent.addListener(directions, "load", onRouteLoad);
directions.load("from: Zürich to: St.Gallen");

}
function onRouteLoad(){
document.getElementById("googdistanz").value = directions.getDistance().meters&#59;
document.getElementById("googzeit").value = directions.getDuration().seconds;

}

</script>
</head>
<body onload="initialize()">
<div id="map" style="width: 10%; height: 40px; float:left; border: 1px solid black;"></div>
<form method="post" action="anronnysenden.cfm">
Von Zürich nach St. Gallen:
<input id="googdistanz" name="distanz" type="text" value="" /> Meter
<input id="googzeit" name="zeit" type="text" value="" /> Sekunden

<input type="submit" value="In der Datenbank Speichern" />
</form>
</body>
</html>


So? Wenn du es automatisch an den Server senden möchtest, dann musst du AJAX nutzen,...
 
Zurück
Oben