HTW Dresden
Fachbereich Vermessungswesen/Kartographie Lehrgebiet Geoinformationssysteme |
fett | sind notwendige Elemente |
kursiv | sind durch selbst definierte Namen zu ersetzen |
[ ] | in eckigen Klammern stehen optionale Eingaben (Klammern werden weggelassen) |
( ) | Runde Klammern sind Pflicht |
{ } | In geschweiften Klammern stehen kommaseparierte Listen (die Klammern werden in den Kommandos generell nicht mit aufgeführt!) |
Sie benötigen in dieser Übung das Web-Verzeichnis public_html auf dem zentralen Fileserver der HTW (rob.rz). Rufen sie deshalb ihr Passwort in Erinnerung und beschäftigen Sie sich mit dem SSH Secure Shell Client (siehe 4.2 Karte einbinden).
Eine weitere Vorraussetzung für das Tutorial ist der Google Maps API-Key.(siehe 3. Google Maps API) Ohne ihn können Sie die Übungen nicht vollständig durchführen und kontrollieren. Also generieren Sie den Key schon im Vorfeld dieses Tutoriums (siehe 3.3 generieren des Google Maps API-Key's).
Das wichtigste in diesem Tutorium sind HTML-Kenntnisse, wiederholen Sie sie deswegen. Falls sie nicht viele HTML-Kenntnisse haben, schauen sie sich folgende Themen an:
Es wird empfohlen für dieses Tutorial Mozilla Firefox zu verwenden.
Das Ziel dieser Übung ist der Umgang mit Earth Viewer. Diese modernen, allgemeinen und populären Darstellungen (Earth Viewer) von Geodaten werden dabei Näher gebracht. Ein Bestandteil dieses Tutorials ist der Aspekt, wie man die Earth Viewer für den eigenen Gebrauch verwendet. Dabei wird auf die Mittel, die man für die Realisierung benötigt, eingegangen. Abgabe sind die Requests, Bildschirmausdrucke und die Vorführung der Lösung. Das restliche Kapitel 1 und Kapitel 2 sind zum überfliegen und zum Selbststudium da. Diese sind für diejenigen, die mehr über Google Maps wissen wollen.
Earth Viewer sind Darstellungen von Geodaten. Diese Darstellungen werden über das Internet angeboten. Man unterscheidet sie in zwei Systeme. Das erste System ist das Client System. Und das zweite ist das Web Mapping System.
Bei dem Clientsystem wird ein Anwendungsprogramm, ein sogenannter Client aus dem Internet heruntergeladen. Mit diesem Programm kann man die Daten von den Servern anschauen und steuern.
Client Systeme sind zum Beispiel:
Aber auf diese wird in diesem Tutorial nicht weiter eingegangen. Die Übung beschränkt sich lediglich auf den zweiten Punkt, die Web Mapping Systeme.
Dabei handelt es sich um Anwendungen die sich auf das Internet beziehen. Diese Systeme kann man auf Websites ausführen und in eigene Websites integrieren.
Web Mapping Systeme sind zum Beispiel:
Die Earth Viewer funktionieren nach dem Wiki-Prinzip und arbeiten schnell, was Wiki [hawaianisch] auch bedeutet. Jeder darf es benutzen, seine Daten und Informationen dazugeben. Weiterhin kann es jeder in seine Website einbinden. Dies wird nicht wirklich auf die Richtigkeit überprüft.
Google Maps ist ein Produkt der Firma Google Inc und des Untrenehmens Keyhole und ist seit dem 08. Februar 2005 verfügbar. Das Wort Google stammt vom Wort googol ab, was eine Zahl mit hundert Nullen (10100) beschreibt. Das Unternehmen Google Inc. wurde 1988 von Laary Page und Sergey Brin in einer Garage gegründet und seit dem wächst es stetig an und erweitert seinen Markt. Google hat unter anderem mit dem Produkt Google Maps den Schritt in Richtung Geoinformationsmarkt gewagt, um sich mehr durch Werbung zu finanzieren.
Ist es möglich Google Maps (ohne API) als Geodateninfrastruktur (GDI) oder gar mit dem Begriff GIS, in speziellen mit den WMS/WFS-Diensten in Verbindung zu verbringen? Sehen Sie hierzu einige Auszüge zum Thema GDI aus Sachsen. Und zum Thema GIS sehen sie einen Vortrag vom Runder Tisch GIS e.V.
Hier ist eine Zusammenfassung über die Möglichkeiten zwischen Google Maps und WMS/WFS-Diensten.
Google Maps | GIS (WMS/WFS-Dienste) |
---|---|
|
|
ABER | |
|
|
Wenn man von der reinen Definition von GIS ausgeht, können mit Google Maps Daten digital erfasst, modeliert, gespeichert, verwaltet, alphanumerisch und graphisch angezeigt werden. Aber es ist nicht möglich andere Daten zu verändern und zu analysieren. Nur mit der API existieren mehr Funktionen mit Google Maps. Mit der API sind dann zum Beispiel fremde Daten veränderbar.
Beim Thema Geodateninfrastruktur (GDI) befassen wir uns erstmal mit der Definition (siehe Geodateninfrastruktur - ein Überblick, Lars Bernard).
GDI:
Google Maps | GDI |
---|---|
|
|
Die Eigenschaften der GDI kann Google noch erreichen, aber mit der API ist es möglich Dienste (WMS/WFS) zu nutzen.
Fazit:
Google und die Earth Viewer werden auf dem Geoinformatikmarkt als Konkurrent wahrgenommen, weil sich die Leute mehr für die Earth Viewer interessieren. Außerdem besitzen sie eine bessere Technik und das Potential, um die Geodaten zu veröffentlichen.
Aber die Leute zeigen mehr Interesse an den Geoinformationen und die Anwendung wird breiter. Weiterhin sind GIS-Komponenten nicht Google's Angelgenheit bei der Arbeit. Das sind nur die Werkzeuge, um ihre Geschäfte zu vollziehen.
Google benutzt zur Anzeige und Eingabe von Koordinaten das Bezugssystem und Datum WGS84 (World Geodetic System 1984). Dabei ist WGS84 das Datum und Referenzellipsoid, in diesem Fall ist es ein global angepasstes Rotationsellipsoid (Rechenfläche). Die große Halbachse beträgt 6 378 137.0 m und die kleine Halbachse hat eine Läe von 6 356 752.3142 m. Als Hauptmeridian ist der Meridian von Greenwich definiert und der Äquator wurde als Hauptbreitenkreis definiert. Bei den Koordinaten handelt es sich um Geographische Koordinaten, das sind Latitude (Breitengrad, φ) und Longitude (Längenengrad, λ). Dabei existieren verschiedene Darstellungsvarianten:
Die Projektion ist eine Mercatorprojektion (Zylinderprojektion entlang des Äquators). Diese Karte wird in Nord-Süd-Richtung verzerrt, deswegen ist es eine Winkeltreue Abbildung. Aber dafür werden die Flächen verzerrt abgebildet. Dabei schneiden sich die abgebildeten Breiten- und Längengrade rechtwinklig. Die abgebildeten Flächen wird mit zunehmender Entfernung vom Äquator größer, als sie wirklich sind (zum Beispiel Grönland).Das selbe Phänomen tritt bei der Länge auf (nicht längengetreu). Der Maßstab wird dann auch größer. Dieses Problem löst Google mit einer dynamischen Anpassung des Maßstabes. Das Hauptproblem ist aber, dass die Pole (Nord und Süd) nicht dargestellt werden. Denn die projizierten Punkte liegen im Unendlichen.
Durch das Bezugssystem WGS84 verwendet man beim Einlesen von Diensten (Google Maps API) auch EPSG: 4326.
Aber das Hauptsystem sind die lokalen Pixelkoordinaten. Da ist der Ursprung die linke obere Ecke des Kartenfensters. Die positive x-Achse verläuft nach Rechts und die positive y-Achse geht vom Ursprung aus nach unten.
Wie jeder Dienst braucht Google Maps auch Daten. Diese Daten werden Google von Unternehmen zur Verfügung gestellt. Die Firmen sieht man unten Rechts, bei den Copyrights. Bei den Daten handelt es sich um Sachdaten, Vektordaten und Rasterdaten.
Sachdaten | Vektordaten | Rasterdaten |
---|---|---|
|
|
|
Damit der Nutzer die Daten sehen und anwenden kann, werden verschiede Programmiersprachen und andere Methoden eingesetzt. Diese Methoden sind:
Die Einzelteile sind nun bekannt, jetzt muss alles nur noch zusammengefügt werden. Die Daten werden bei Google geometrisch angepasst und mosaikiert, gerendert und be- und verarbeitet (gekachelt) und verwaltet. Für die Verwaltung besitzt Google und Keyhole riesige und viele Server. Die Vektordaten liegen als PNG in den Hosts der mt-Reihe (mt0, mt1,...) der Server vor. Und die Rasterdaten werden als JPG in den Hosts mit den Namen kh (kh0, kh1, ...) gespeichert und verwaltet.
Mit jedem Zoom und Pan werden die Kachheln alle einzeln per Request geladen. Die Scriptdatei main.js lädt die Kacheln, auch schon über die sichtbare Kartenansicht hinaus, herunter. Und speichert sie dabei im Cache. Wenn sie benötigt werden, lädt der Browser sie von dort. Erst in einem Bereich, in dem keine Kacheln existieren, ist es nötig neue Kacheln nachzuladen.
Die wichtigste Datei bei Google Maps ist die main.js, sie steuert die Internetseite und holt die Daten von Google. Dabei werden die Anfragen immer zu Google gesendet und dort ausgewertet und/oder berechnet. Google packt die gewonnen Daten in eine Datei, die vom Nutzer gefordert wird (ohne API default) und sendet diese dann zurück (Reponse). Im Browser wird sie dann interpretiert und abgebildet. Polylinien und Polygone werden auf ein transparentes Bild gezeichnet, mit lokalen Pixelkoordinaten.
Wenn der Nutzer Daten, wie zum Beispiel KML, GeoRSS oder XML in Google Maps einladen möchte, sendet er die Request zu Google. Der Server von Google besorgt sich die Daten vom Server und verarbeitet sie in eine Datei. Die Datei ist so aufgebaut, dass sie mit Markern, Polylinien und Polygonen angezeigt werden kann. Dann wird sie zum Browser des Nutzers zurück gesendet.
Google Maps besitzt viele Funktionen. Die wichtigsten sehen Sie hier:
Bei Google werden die Suchanfragen im Hintergrund durch einen Request mit Parametern gesendet.
Parameter | Erklärung |
---|---|
q |
|
ll | Geographische Koordinaten (Latitude, Longitude) des Kartenzentrums |
sll | Koordinatenangabe des Zentrum der Ergebnisse der Suche (Latitude,Longitude) |
spn | Boundingbox, genäherte Abstand vom Zentrum der Karte zum Rand in Grad angegeben (Hoch [Latitude], Rechts [Longitude]), abhängig von der Zoomstufe, unwichtig für Suche |
sspn | Boundingbox nach Routenabfrage, genäherte Abstand vom Zentrum der Karte zum Rand in Grad angegeben (Hoch [Latitude], Rechts [Longitude]), abhängig von der Zoomstufe, unwichtig für Suche |
hl | Host-LanguageSprache (hl=de) |
t | MapType (Ansicht r,e=Karte, k= Satellit, h=Hybrid) |
saddr | Source address (Startadresse) bei Route |
daddr | Destination address (Zieladresse) bei mehreren Adressen "+to:" |
mrad | bei einer dritten Ziel Adresse |
start | Überspringen der ersten Übereinstimmung (start=-1) |
num | Ausgabe der Übereinstimmungen (0 bis 10) |
near | Suchort bei Branchen |
f | kontrolliert den Stil der Suchanfrage (q=Adresse, d=Route, l=Unternehmen) |
output | Ausgabe von Dateien die zur Zeit benutzt werden (HTML, js = JavaScript Objekte, kml= Placemark Informationen, nl = Networklink) |
latlng |
|
cid | gleichbedeutend zu latlng, nur die Karte ist groß |
vp |
http://maps.google.com/maps?spn=0.030372,0.068665&z=6&t=h&vp=53.859462,-3.038235 |
om | Einblenden der Übersichtskarte (0=aus, 1=ein) |
ie | Angabe der Zeichengruppe, Kodierung (ie=UTF8) |
pw | Druckfenster (0=Druckfenster aus, 1=Vorschau wird erstellt, 2= geöffnetes Druckfenster) |
z | Zoomlevel (0-19, aber manchmal auch bis 21, je nach Auflösung) |
Iwloc | Inhalt und Ansicht des InfoWindow (Infofenster) |
layer=t | aktiviert den Traffic Overlay |
msa=b | aktiviert die "My Maps" Sidebar |
msa=0 | ID der eigen erstellten Karten |
msid | "My Maps" ID |
mrt=kmlkmz |
|
view | setzt die Ansicht ob Text (view=text) oder Karte (view=map) |
dirflg=h | vermeiden von Autobahnen bei Routenberechnung |
Nun sind die Parameter der Abfrage bekannt, aber wie wendet man sie an und wie werden sie aneinander gereiht.
Von den Parametern können Sie so viele Parameter hintereinanderreihen wie sie möchten und es sinnvoll ist.
Jetzt wenden Sie ihre Kenntnisse auf folgende Aufgaben an.
Was ist eine API? API ist die Abkürzung für application programming interface. Dabei handelt es sich um eine Schnittstelle (auf Quelltextebene) zur Anwendungsprogrammierung. Sie wird zur Anbindung an das System verwendet. Weiterhin gewährleistet die API den Zugriff auf Datenbanken und Hardware. Mit einer API werden auch GUIs erstellt. Die Unterteilung der API erfolgt nach funktionsorientiert, dateiorientiert, objektorientiert und protokollorientiert.
Bei der funktionsorientierten Programmierschnittstelle kommen nur Funktionen zum Einstaz, die einen oder keinen Rückgabewert haben. Sie verwenden die Funktionsweise des Handlers (Zeiger).
Die dateiorientierten Programmierschnittstellen werden durch open, read, write und close angesprochen.
Plattformunabhängig sind protokollorientierte Programmierschnittstellen, jedoch muss das Protokoll immer neu eingefügt werden. Um dieses Problem zu umgehen, ist diese Schnittstelle z.B. mit einer funktionsorientierten Programmierschnittstelle kombiniert.
Von der Google Maps API existiert momentan die Version 2. Dies kann sich aber jeder Zeit ändern. Denn Google kann wieder eine neue Version veröffentlichen.
Die API lässt Sie Google Maps in Ihren eigenen Webseiten einbetten. Die API ist gültig für ein einzelnes "Verzeichnis" auf Ihrem Web-Server. Wenn Sie sich zur URL http://www.mygooglemapssite.com/mysite melden, ist der erhaltene API-Key für alle Unterverzeichnisse und -pfade valide. Die API darf nicht zu Werbezwecken verwendet werden. Weiterhin ist es nicht erlaubt Embleme oder die Zuordnung auf der Landkarte zu ändern oder unklar zu machen
Wenn Sie mehr als 500.000 Ansichten pro Tag erwarten, wenden Sie sich im vorraus an Google. Denn in diesem Fall muss zusätzliche Kapazität Verpflegung zur Verfügung gestellt werden, damit die Qualität des Dienstes nicht beeinträchtigt wird.
Um den API-Key zu erhalten muss man sich erst die Benutzungsbedingungen durchlesen und zustimmen. Diese finden sie unter: http://www.google.com/apis/maps/terms.html
|
|
|
Die Google Maps API ist in der Google Maps API Reference beschrieben und erklärt.
In der API gibt es folgende Elemente:
All diese Elemente werden über Variablen geregelt, weitergegeben und verwendet.
Wie Sie den API-Key generieren, erfahren Sie hier.
Wenn Sie noch kein Google Konto besitzen, erstellen Sie sich zuerst eines. Denn ohne Google Konto gibt es kein API-Key.
API-Key generieren:
http://www.htw-dresden.de/~sBibo.-nummer
Hinweis: Alle Bilder in diesem Abschnitt stammen aus Internetseiten von Google.
Vorraussetzung für dieses Kapitel sind HTML-Kenntnisse.
Zur Integration und Anzeigen von der Karte und von anderen Elementen in die Website wird das DOM (Document Object Model) benutzt.
Informieren Sie sich genauer über das DOM auf z.B. folgenden Seiten:
Aber hier auch noch ein kleiner Exkurs zum Thema DOM:
<h1 align="center">Hallo Welt</h1>
h1-ElementknotenBevor es los geht, laden Sie sich ein Add-on von Mozilla Firefox herunter.
Firebug
Und schließen Sie Firefox (Button).
Dieses Add-on ist eine Entwicklungsumgebung für HTML, DOM, CSS und JavaScript. Es zeigt ihnen Fehler an und man kann mit ihm in Echtzeit editieren. Aber die Editierung wird nicht gespeichert und muss im Orginalquelltext noch geändert werden. Es muss an den Rechnern, durch das Profil, bei jedem Anmelden neu installiert werden.
Wenn sie es installiert haben, können Sie es öffnen (Extras ==> Firebug ==> Open Firebug ==> Enable Firebug oder Extras ==> Firebug ==> Open Firebug in New Window ==> Enable Firebug).
Dieser Teil der Übung ist die Vorraussetzung für alle anderen Aufgaben. Die hier gelösten Aufgaben brauchen sie nicht ändern, sie können beibehalten werden. Und auch die hier beschriebene Syntax ändert sich nicht.
Zuerst brauchen Sie eine Internetseite, die sie erstellen sollen. Dazu verwenden sie einen von den folgenden Editoren:
Notepad, Notepad++, HTML-Editor, TextPad, Proton, WordPad
<html>
<head>
API-Key
JavaScript-Datei
Titel
</head>
<body>
Überschrift
Karte
Textfelder, Formulare, Buttons, ...
</body>
</html>
Diese Datei wird dann geschlossen und in das Web-Verzeichnis public_html auf dem zentralen Fileserver der HTW (rob.rz) kopiert. Benutzen Sie dazu den SSH Secure Shell Client:
Jetzt kann ihre Datei über das Internet von Jedem gesehen und ausgeführt werden.
Die HTML-Datei kann im Editor geschlossen werden. Für eine effektivere Arbeitsweise wird eine Verbindung mit dem SambaServer hergestellt. Und die Datei wird von dort aus geöffnet und weiter bearbeitet. Das benötigt nicht mehr so viel Zeit. Denn die Dateien müssen sonst immer kopiert werden. Eine Änderung der Eigenschaften erfolgt ebenfalls ohne den SambaServer. Kontrollieren sie aber hin und wieder die Eigenschaften.
Verbindung mit dem SambaServer:
Damit die API überhaupt funktioniert, wird durch den API-Key die JavaScript-Hauptdatei auf die Internetseite geladen.
<head>
<script src="http://maps.google.com/maps?file=api&v=2.x&
key=ABQIAAAAAvT-QjWq_otravrahtpYqRSaM-JY0VClnmGgq9dVsTYw-AEuRRSd6GNg5lT
-fZCzg8bRtmE8X4AvvA" type="text/javascript">
</script>
</head>
Weiterhin brauchen Sie noch, um die API in die HTML-Seite einzubinden, Javascript.
Dafür wird eine Anweisung verwendet. Diese Anweisung gibt an, dass eine Scriptsprache folgt oder eingebunden wird.
<script language="Sprache" type="Art/Sprache" [src="Quelle"] ></script>
Es existieren zwei Auswahlmöglichkeiten eine JavaScript-Datei in einen HTML-Text zu integrieren, die Extra-Datei und der folgende Quelltext.
Datei:
beispiel.js
Einfügen der Datei über den Tag :
<script language="JavaScript" type="text/javascript" src="beispiel.js" ></script>
Der Vorteil ist eine getrennte Datei und kleinere Dateien, als eine große ganze Datei. Der Quelltext wird übersichtlicher. Aber es könnten zu viele Dateien werden. Die Datei muss ebenfalls auf dem eigenem Server oder auf einem anderen Server liegen. Deswegen kopieren Sie am besten die Datei in den selben Ordner, wie die von ihnen erstellte HTML-Datei.
Der folgende Quelltext:
<script language="JavaScript" type="text/javascript" >
//<![CDATA[
Code
//]]>
</script>
Es ist angebracht, in Verbindung mit der API, mit JavaScript umzugehen. Als erstes werden Variablen erzeugt, dann braucht man Funktionen zum Ausführen und Aufrufen von bestimmten Teiltätigkeiten. In diesen Funktionen erfolgen dann die Befehle, der Aufruf der Klassen und die Aktionen.
Um JavaScript-Funktionen aus einer HTML-Datei aufzurufen, benötigt man Event-Handler. Diese fangen immer mit on an.
Hier einige wichtige Event-Handler.
Event-Handler | Erklärung |
---|---|
onclick | beim klicken eines Elementes |
onfocus | beim aktivieren eines Elementes |
onload | beim laden eines Elementes |
onsubmit | beim absenden eines Formulars |
onunload | beim Verlassen einer Datei |
<Element [Attribute] Event-Handle="Funktionsname([zu übergebene Parameter]); return false"></Element>
Attributte: id="Name" value="Name" name="Name" title="Name" type="Type"
<input type="button" value="Reine Karte" onclick='weg();return false>
Doch bevor es los geht, rufen wir uns noch mal in Erinnerung, wie man Knoten anspricht. Und somit auch die Elemente einer XML - gerechten Auszeichnungssprache.
Und zwar mit den Methoden :
Wie werden jetzt die Daten in die Website dynamisch generiert?
Sehen wir uns erstmal den HTML-Code an, in welchen der Text geschrieben werden soll.
<Tagname id="Name" [Attribute]></Tagname>
<div id="content"></div>
JavaScript erstellt den Text zwischen dem öffnenden und schließenden Tag. Wie das funktioniert sehen Sie hier:
Name des gegenwertigen Dokumentes(meist document)>. Methode("Name/Art des Elementes").Eigenschaft[.Eigenschaft]="Text"/HTML-Quelltext/Variable;
document.getElementById("content").innerHTML ="Bitte warten. Die Daten von "+url+" werden geladen.";
Der Aufbau erfolgt vom großen (links) ins kleine (rechts). Und das ist bei JavaScript immer so.
Wenn man jetzt Daten oder Elemente aus einer XML-gerechten Auszeichnungssprache haben möchte, ist der Aufbau nicht sehr viel anders. Nur das man ihn einer Variablen zuweist.
var Variablenname=Datei.documentElement.Methode("Arte/Name").Eigenschaft;
var markers = xmlDoc.documentElement.getElementsByTagName("marker");
var lat = parseFloat(markers[i].getAttribute("lat"));
Nun kann es los gehen mit der API von Google Maps und JavaScript.
Zuerst werden globale Variablen deklariert.
var Variablenname;
Diese Variablen sind allgemeingültig und können alle Datentypen beinhalten, aber immer eine Variable für einen Datentyp. Arrays werden anders deklariert.
var Variablenname=[];
function Name([an die Funktion übergebene Parameter]){
Befehle (Variablenzuweisungen, Schleifen, If-Anweisungen)
Andere Funktionen ansprechen
Events
Google Maps API Klassen, Methoden, ...
}
Funktionsname([zu übergebene Parameter]);
place(pointe.y,pointe.x);
In die Funktion kommen sämtliche Befehle, die man für Ausführungen benötigt. Und für die API bedeutet das Aufrufen von Klassen, durch erzeugen von Konstruktoren, die auch ineinander verschachtelt werden können.
Variablenname= new Klassenkonstruktor([Parameter, Optionen]);
Verschachtelt:
-
Variablenname= new Klassenkonstruktor(new Klassenconstruktor([Parameter, Optionen]));
-
Variablenname1= new Klassenkonstruktor([Parameter, Optionen]);
Variablenname2= new Klassenkonstruktor(Variablenname1,[Parameter, Optionen]);
var point = new GLatLng(51.034267, 13.734071);
var marker = new GMarker(point);
polydist=new GPolyline([messpoints[k-1],messpoints[k]],"#ff0000", 4, 1,{geodesic:true});
Diese Variablen, die jetzt die Objekte und Werte von den Konstruktoren besitzen, sind auch mit weiteren Befehlen ausführbar. Die Kombination mit Methoden oder Properties ist realisierbar.
Auch hier haben wir wieder den Aufbau vom Groß (Grobe), was sich am Anfang befindet, ins Kleinere (Feinere), was sich am Ende befindet.
-
Variable.Methode.properties;
-
Varible.Methode(übergeordnete Klasse).Methode(untergeordnete Klasse);
-
markerausg.getPoint().y;
-
gdir.getRoute(0).getStep(k).getDescriptionHtml()
Im Body der HTML Seite wird über einen DIV-Container die Map geladen.
<body>
<div id="map" [Attribute]></div>
</body>
Dann benötigen Sie für den Umgang mit Google Maps API die API Referenz welche sie auf der folgenden Seite finden:
http://www.google.com/apis/maps/documentation/reference.html
Mit diesem Wissen können Sie jetzt gut mit der API umgehen. Und Sie können eine Karte einfügen.
Nutzen Sie dazu folgende Klassen:
GMap2, GMapType, GControl, GLatLng, GBrowserIsCompatible, GPoint
Tip:
Mit Google Maps API können auch Overlays wie Marker (Punkte), Polylinien und Polygone abgebildet werden. Die Marker können Informationen enthalten. Die Informationen werden im Infofenster der Marker angezeigt. Informationen sind unter anderem Text, wie zum Beispiel Adressen, Bilder und Links. Das Gestalten und Erstellen von eigenen Markersymbolen (Icons) ist auch realisierbar. Mit GEvent sind Marker und Karte im Stande Funktionen auszuführen. Die Marker, die Polylinien und Polygone werden als transparentes PNG über lokale Koordinaten dargestellt (Viewbox). Auf dieser Viewbox sind dann die Objekte als SVG/VML abgebildet und überlagern die Karte. Polylinien und Polygone werden im Firfox als SVG (Pixelkoordinaten) abgebildet und im Internetexplorer durch VML.
Die Abkürzung VML steht für Vector Markup Language. Hier ist ein kleiner überblick von VML.
<vml:oval
style="width:200px; height: 200px"
strokecolor="red"
strokeweight="2">
</vml:oval>
<vml:polyline
style="width:200px; height: 200px"
stroked="false"
filled="true"
fillcolor="blue"
points="8, 65, 72, 65, 92, 11, 112, 65,
174, 65, 122, 100, 142, 155, 92,
121, 42, 155, 60, 100">
</vml:polyline>
Nicht jeder Browser ist fähig die Polylinien und Polygone von Google Maps auf den Bildschirm darzustellen, deswegen muss ein VML-Schema geladen werden.<html xmlns:v="urn:schemas-microsoft-com:vml">
Wendet man diese Klasse auf Markern, Overlays oder Karten an, führen diese bestimmte selbstdefinierte Funktionen aus. Events (click, doubleclick, drag, dragend,dragstart, mouseup, mousemove, mouseover) sind der Grund für die Ausführung der Funktion.
Namespace.Methode
Spezieller ist die Methode addListener() dafür zuständig. In ihr gibt der Programmierer die Quelle (Ort welcher auf den Listener ansprechen soll), das Event (in Hochkomma) und der handler (auszuführende Funktion) an. Dies geschieht auf zwei Arten entweder man schreibt die Funktion selbst hinein oder man verweist auf die Funktion.
GEvent.addListener (source,"event",function ([empfangene Parameter]){
Befehle
});
GEvent.addListener (source,"event",function ([empfangene Parameter]){beispiel([Parameter]);});
function beispiel ([Parameter]){
Befehle
}
GEvent.addListener(marker, "mouseup", function() {
marker.openInfoWindowHtml(html);
});
oder
GEvent.addListener(marker1,"mousedown",function(){measure();});
function measure(){
}
Entscheiden Sie sich für eine Variante. Bei der ersten hat man alles in einem zusammen, kann aber schnell die übersicht (Klammern) verlieren. Bei der zweiten sind die Funktionen alle getrennt und man kann sie auch in anderen Seiten wieder verwenden oder von anderen Funktionen aufrufen. Aber die Anzahl der Funktionen steigt und damit kann die gesamte Datei unübersichtlich werden. Dazu müssen aber sehr viele Funktionen vorhanden sein.
Jetzt können Sie die nächsten Schritten von der Übung bewältigen.
Dazu brauchen Sie die Klassen :
GMarker, GPolyline, GPolygon, GEvent, GInfoWindow, GPoint, GIcon, GLatLng
Tip:
Tip:
Tip:
Was ist Geocoding?
Für diese Aufgabe brauchen sie ein Formular in der Website. Dieses Formular, indem Sie die Adresse eintragen, enthält das Wort "Adresse:", ein Textfeld zum Eintragen und ein Button zum Absenden. (SELFHTML-Formular)
<form action="" event="Funktionsname(this.textfeldname.value); return false">
Beschriftung
Textfeld (Text, id, Name)
<input name="Name" value="Buttonaufschrift" type="submit">
</form>
Die eingetragene Adresse wird dann beim Absenden an eine Funktion übergeben. Diese Funktion führt die Suche aus. Die API sendet die Anfrage zu Google. Die Datenbank wird nach der Suchanfrage durchsucht und als Antwort bekommt man zum Beispiel eine XML-Datei. Im Hintergrund des Geocoding sendet die API ein HTTP-Request ab. Der Request kann aber auch direkt durch den Nutzer erfolgen. Dies erfordert folgende Parameter:
Parameter | Erklärung |
---|---|
q | Die Adresse, die man suchen möchte (Suchanfrage) |
key | der erhaltene API-Key |
output | das gewünschte Ausgabeformat (xml, kml, csv oder json) |
Für das Zerlegen der Antwort gibt es beim Geocoding schon vorgefertigte Funktionen.
Um die nächsten Aufgaben zu erledigen benötigen Sie die Klassen :
GClientgeocoder, GGeoStatusCode, GMap2
Manchmal ist es möglich, dass eine Suchanfrage mehrmals auf der Welt existiert. Daher sollte eine Sicherheitsabfrage erfolgen (Sidebar), welche Adresse er meint. Weiterhin gibt es auch Fälle wo sich der Nutzer vertippt oder die Adresse nicht in der Datenbank vorhanden ist. Diese Gegebenheiten sollten abgefangen werden (Fehlerbehandlung) und der Nutzer wird informiert, was falsch ist.
Tip:
Das Problem der Routenberechnung ist ein altes, langes Problem. Es beruht sich auf dem Problem des Handlungsreisenden (Traveling Salesman Problem). Dabei handelt es um ein komplexes Optimierungsproblem und ein Problem der Heuristik. In der Geschichte geht es um einen Mann der durch 15 Städte reisen soll. Die erste Stadt soll die letzte Stadt sein. Er darf keine Stadt doppelt durchreisen und die Wege dürfen sich nicht kreuzen. Und das wichtigste es muss dann noch der kürzeste Weg sein. Zur Lösungsfindung werden Graphen (Knoten, Kante, Knoten) verwendet und man weist den Kanten Eigenschaften (Länge, Zeit) zu. Zum Beispiel muss jeder Knoten zwei Kanten haben. Viele Verfahren wurden dazu schon entwickelt (Hamilton-Kreis, greddy-Algorythmus, Schnittebenenverfahren), aber so richtig funktioniert es noch nicht, da es schier unendliche Möglichkeiten an Wegen gibt. Wer sich Näher damit beschäftigen will (Selbststudium), der schaue in den Link oben hinein.
Für diese Übung haben Sie alles, was Sie brauchen schon gelernt. Sie benötigen hier nur die Klassen der API:
GDirections, GDirectionsOptions, GRoute, GStep
Tip:
Tip:
Die Distanzberechnung erfolgt normalerweise über die Umrechnung der Koordinate in Bogenmaß und eine Berechnung der Distanz mit der Formel:
d = 6378.7 * acos(sin(lat1) * sin(lat2) + cos(lat1) * cos(lat2) * cos(lon2 - lon1))
Aber Google bietet die Möglichkeit auch mit einer Methode die Distanz zwischen zwei Punkten zu berechnen. Diese Methode ist eine Methode der Klasse GLatLng und heißt:
distanceFrom(other)
new GLatLng(lat.,long.).distanceFrom(new GLatLng(lat.,long.));
Tip:
Tip:
Mit Google Maps kann man auch eigene Karte darstellen, zeigen und überlagern. Dabei ist es wichtig die Karte erst zu schneiden, denn Google Maps lädt nur Bilder in der Größe von 256 x 256 Pixel ein. Aber dafür gibt es schon fertige Codes. Außerdem ist das Ausrichten der Karte notwendig, damit die Ecken die passenden Koordinaten besitzen. Und auch dafür gibt es schon eine Anwendung. Aber da dies zu lange dauert, greifen wir auf fast dieselben Klassen zu, indem wir etwas anderes einladen. Wir integrieren ein WMS in Google Maps. Da das Bezugssystem von Google Maps WGS84 ist, können nur WMS mit dem EPSG:4326 integriert werden, ansonsten müsste man es transformieren.
Es ist schwierig die Scriptdatei, um das WMS einzulesen, zu erstellen. Deswegen laden Sie sich die Datei wms.js herunter.
http://www.htw-dresden.de/~s53382/Website/wms.js (G:\Lehrgebiete_Vermessung\GIS_II\Download\...)
Nutzen Sie in der Website die Klassen :
GMapType, GMapTypeOptions, GTileLayer, GTileLayerOverlay, GCopyrightCollection, GCopyright
Tip:
Tip:
Mit der Google Maps API ist es auch realisierbar ein WFS (Web Feature Service) einzubinden. Ein WFS hat zur Aufgabe vektorielle Geodaten, mit von der OGC standardisierten Methoden, in das Internet zu stellen. Mit der Methode GetFeature wird eine GML-Datei aufgerufen und an den Nutzer übertragen. Geography Markup Language (GML) gehört auch in die Klasse der XML-gerechten Auszeichnungssprachen.
Hier sehen Sie eine kleine Ausführung von den Tags, die die Punkte, Linien und Polygone enthalten.
Punkte:
<Point></Point>
<gml:Point></gml:Point>
<LineString></LineString>
<gml:LineString></gml:LineString>
<LinearRing></LinearRing>
<gml:LinearRing></gml:LinearRing>
Tragen Sie folgendes in ihre Website ein.
Im Kopf:
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript"></scrpit>
:
Im body unter dem Map-div:
<script type="text/javascript">
_uacct = "UA-811607-1";
urchinTracker();
</scrpit>
Tip:
!!!Achtung!!!
Wenn Sie sich mit der Übung zehn beschäftigen, kann es Aufgrund der Sicherheitseinstellung von Firfox (GeckoBrowser) zu Komplikationen führen. Und der Request kann nicht ausgeführt werden.
Deswegen: