Aufgabe 1 Aufgabe 2 - GIS-Management
Aufgabe 1 Aufgabe 2 - GIS-Management
Aufgabe 1 Aufgabe 2 - GIS-Management
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Name:<br />
Semester:<br />
Name:<br />
Semester:<br />
FACHHOCHSCHULE STUTTGART - HOCHSCHULE FÜR TECHNIK<br />
STUDIENGANG VERMESSUNG UND GEOINFORMATIK<br />
LEISTUNGSNACHWEIS IM WINTER-SEMESTER 2004/05 FÜR DAS H AUPTDIPLOM<br />
g) Erläutern Sie den Begriff Basisklassenzeiger!<br />
FACH: Programmieren von <strong>GIS</strong>-Applikationen NAME:<br />
DATUM: 25. Jan. 2005 SEMESTER: V7<br />
ZEIT: 11:00 – 13:00<br />
PRÜFER: Prof. Dr. Behr<br />
HILFSMITTEL: Literatur, Skripte, keine Rechner (PCs, Laptops etc.) mit Software<br />
ANLAGEN: –<br />
Rechenwege, Formeln, Zwischenergebnisse etc. sind mit anzugeben!<br />
<strong>Aufgabe</strong> 1<br />
<strong>Aufgabe</strong> 1.1<br />
Erläuterungen, Definitionen<br />
a) Erläutern Sie den folgenden Funktionskopf bezüglich Klassenzugehörigkeit,<br />
Ergebnisdatentyp, Übergabeparameter<br />
CComplexInt CComplexInt::operator>(const CComplexInt & rhs)<br />
h) Erläutern Sie den Begriff dynamisches Binden!<br />
<strong>Aufgabe</strong> 1.2<br />
Verständnisfragen<br />
Jedes richtige Kreuz ergibt einen Pluspunkt, jedes falsche Kreuz einen Minuspunkt! Die Summe<br />
kann aber nicht negativ werden...<br />
Eine Klasse heißt abstrakt, wenn<br />
a) keine Objektinstanz vorstellbar ist<br />
b) sie mindestens eine rein virtuelle Methode besitzt<br />
c) sie keinen konkreten Algorithmus enthält<br />
d) niemand weiß wozu man sie gebrauchen kann.<br />
Die öffentliche Schnittstelle einer Klasse besteht aus<br />
a) polymorphen Ringen,<br />
b) den protected-Elementen der Klasse oder<br />
c) den public-Elementen oder<br />
d) durchlässigen Stellen in konzentrischen Kreisen.<br />
A sei die Oberklasse und B die davon abgeleitete Unterklasse. Welche Aussage stimmt:<br />
b) In einer Diskussion über Geoinformatik schnappen Sie die Begriffe CSV und CVS auf.<br />
Erläutern Sie kurz diese Begriffe!<br />
c) Was verstehen Sie unter Regulären Ausdrücken?<br />
d) Geben Sie einen Regulären Ausdruck an, der die Nachnamen „Mayer“ und „Mayr“ findet!<br />
e) Geben Sie einen Regulären Ausdruck an, der "100" und "1000" usw. aber nicht "1" findet!<br />
e) A besitzt meistens mehr Methoden und weniger Variablen als B<br />
f) A besitzt meistens weniger Methoden und dafür aber mehr Variablen als B<br />
g) Im UML-Diagramm zeigt die Spitze des Pfeils zwischen A und B auf A<br />
h) Im UML-Diagramm muss am Ende der Verbindungslinie zwischen A und B eine Raute sein.<br />
Wenn Sie beabsichtigen, eine Klasse A als Basisklasse für andere Klassen einzusetzen,<br />
dann gilt:<br />
a) die abgeleitete Klasse muss unbedingt einen eigenen Konstruktor definieren<br />
b) mindestens ein Element von A sollte protected sein<br />
c) der Destruktor von A sollte als virtual deklariert sein.<br />
d) die Klasse muss mittels class parent A deklariert werden<br />
f) Wodurch wird die Plattformunabhängigkeit bei .NET erreicht? (kurze Antwort)<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
1/16<br />
<strong>Aufgabe</strong> 2<br />
(72 Punkte)<br />
Das Desktop-<strong>GIS</strong> MapInfo Professional kann Daten im sog. MIF-Format an andere GI-Systeme<br />
übergeben. Die grafischen Daten werden in einer Datei mit der Extension .mif, die Sachdaten<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
2/16
Name:<br />
Semester:<br />
Name:<br />
Semester:<br />
werden in einer Datei mit der Extension .mid gespeichert. Sachdaten werden durch ein<br />
Trennzeichen getrennt.<br />
Eine MIF-Datei (siehe unten und auch letzte Seite) besteht aus zwei Bereichen: dem Dateiheader<br />
(sechs Zeilen umfassend) und dem Datenbereich (ab dem Schlüsselwort Data, in dem sich die<br />
Definitionen der grafischen Objekte befinden<br />
Version 300<br />
Charset "WindowsLatin1"<br />
Delimiter ","<br />
CoordSys Earth Projection 8, 1000, "m", 9, 0, 1, 3500000, 0 Bounds<br />
(3400000.0, 5400000,0) (3600000.0, 5600000.0)<br />
Columns 1<br />
Type Char(20)<br />
Data<br />
Point 3455887.3 5429803.92<br />
Symbol (35,0,12)<br />
...<br />
<strong>Aufgabe</strong> 2.1<br />
a) Was ist die Bedeutung der Zeile:<br />
Delimiter ","<br />
Denken Sie dabei an das CSV-Format!<br />
b) Was ist die Bedeutung der Zeile:<br />
Verständnisfragen (7 Punkte)<br />
CoordSys Earth Projection 8, 1000, "m", 9, 0, 1, 3500000, 0 Bounds<br />
(3400000.0, 5400000,0) (3600000.0, 5600000.0)<br />
zu entwerfen. Beachten Sie beim Entwurf, dass diese Klasse als Basisklasse für andere Klassen<br />
dienen soll!<br />
Folgende Methoden sind zu implementieren:<br />
? Standard-Konstruktor einschließlich Initialisierung,<br />
? zusätzlicher Konstruktor (z. B. mit Vorgaben für Rechtswert, Hochwert des Zentroids)<br />
? Destruktor (virtuell),<br />
? set- und get-Funktionen für die Eigenschaft Darstellungsstil<br />
? Ausgabefunktion.<br />
Die Ausgabefunktion ist als rein virtuelle Funktion zu deklarieren, d. h. dass sie in abgeleiteten<br />
Klassen überschrieben werden muss. Die Klasse wird somit zu einer abstrakten Basisklasse.<br />
<strong>Aufgabe</strong> 2.3<br />
Implementierung der Klasse CPoint (11 Punkte)<br />
Für ein Punktobjekt sind zwei Angaben erforderlich: ein Rechtswert (X-Koordinate) und ein<br />
Hochwert (Y-Koordinate). Daneben besteht die die Möglichkeit, das Symbol festzulegen, das zur<br />
Darstellung des Punktobjektes verwendet wird.<br />
Point 3455887.3 5429803.92<br />
Symbol (35,0,12)<br />
Leiten Sie nun von der Klasse CGraphicObject eine Klasse CPoint ab mit den Eigenschaften<br />
1. Rechts- und<br />
2. Hochwert<br />
3. einem parametrisierten Konstruktor (mit Rechts- und Hochwert sowie Darstellungsstil als<br />
Parameter) unter Nutzung einer Initialisiererliste einschließlich Setzen der Zentroid-<br />
Koordinaten sowie einer<br />
4. Ausgabefunktion für alle Eigenschaften der Klasse (dezimal, zwei Nachkommastellen)<br />
Welche Elemente können Sie erkennen / interpretieren?<br />
c) Was ist die Bedeutung der folgenden Zeilen:<br />
<strong>Aufgabe</strong> 2.4<br />
Implementierung der Klasse CLine (optional, 10 Punkte)<br />
– optional –<br />
Columns 1<br />
Type Char(20)<br />
<strong>Aufgabe</strong> 2.2<br />
Implementierung der Basisklasse (18 Punkte)<br />
Als Ausgangspunkt zur Übernahme der Geodaten in eine C++-Applikation ist eine Klasse<br />
CGraphicObject mit den Membervariablen<br />
Für eine Linie sind vier Angaben erforderlich: eine X-Koordinate und eine Y-Koordinate für jeden<br />
Endpunkt. Optional kann der Linientyp durch einen "Stift" (= PEN) angegeben werden.<br />
Line 3516202.87 5445008.99 3513000.4 5404202.38<br />
Pen (1,2,0)<br />
Leiten Sie nun von der Klasse CGraphicObject eine weitere Klasse CLine mit den notwendigen<br />
Eigenschaften ab. Ein parametrisierter Konstruktor soll alle notwendigen Parameter (d. h. die<br />
vier Koordinatenwerte und Stilangabe) als Übergabewerte erhalten und die Zentroid-Koordinaten<br />
setzen.<br />
? Zentroid-Rechtswert (double) und<br />
? Zentroid-Hochwert (double) 1<br />
? Darstellungsstil (string, ohne Zerlegung in die jeweiligen Bestandteile!)<br />
<strong>Aufgabe</strong> 2.5<br />
Implementierung der Klasse CPolyline (16 Punkte)<br />
1 Ein Zentroid ist ein (fiktiver) Punkt, der im Inneren eines Objektes liegt.<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
3/16<br />
Eine Polylinie besteht aus einem Abschnitt oder mehreren Abschnitten. In unserem Beispiel<br />
beschränken wir uns auf den einfachen Fall: Es wird die Anzahl der Stützpunkte und, pro<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
4/16
Name:<br />
Semester:<br />
Name:<br />
Semester:<br />
Stützpunkt, eine X-Koordinate und eine Y-Koordinate angegeben. Dann erfolgt die Angabe des<br />
Linientyps.<br />
Pline 5<br />
3456688.2 5429308.32<br />
3468949.91 5430766.37<br />
3492968.6 5440463.19<br />
3503290.26 5438237<br />
3516202.87 5445008.99<br />
Pen (1,2,0)<br />
Entwerfen Sie nun, ausgehend von der Klasse CGraphicObject, eine weitere Klasse<br />
CPolyline mit den notwendigen Eigenschaften.<br />
Bedenken Sie dabei, dass die Anzahl der Stützpunkte beliebig groß sein kann! Welche<br />
Datenstruktur ist zweckmäßig?<br />
1. Deklarieren Sie eine entsprechende Datenstruktur.<br />
2. Begründen Sie kurz Ihre Entscheidung.<br />
Ein parametrisierter Konstruktor soll alle notwendigen Parameter als Übergabewerte erhalten<br />
und die Zentroid-Koordinaten setzen.<br />
<strong>Aufgabe</strong> 2.6<br />
Datei-Verarbeitung (20 Punkte)<br />
Der Programmcode dieser Teilaufgabe ist durch einen try ... catch-Block abzusichern!<br />
Schreiben Sie einen Programmabschnitt, der eine .mif-Datei mit Namen test.mif öffnet (siehe<br />
Anlage). Kontrollieren Sie das erfolgreiche Öffnen der Datei.<br />
Auf die Auswertung der ersten 8 Zeilen wird verzichtet. Überlesen Sie diese, ohne den Inhalt<br />
auszuwerten.<br />
Lesen und verarbeiten Sie den Datenabschnitt solange, bis das Dateiende erreicht wird.<br />
Hinweis: Das wird das Dateiende erreicht, liefert die Methode eof() des Streamobjekts den Wert<br />
true zurück.<br />
<strong>Aufgabe</strong> 2.7<br />
(optionale Zusatzaufgabe, 8 Punkte)<br />
Schreiben Sie eine Funktion, die alle Punkte in eine ASCII-Datei im CSV-Format 2 ausgibt. Sie<br />
können dabei davon ausgehen, dass alle notwendigen get-Funktionen verfügbar sind (auch wenn<br />
nicht alle implementiert sind).<br />
<strong>Aufgabe</strong> 3<br />
Template-Funktionen (8 Punkte)<br />
In einer Bibliothek stehen verschiedene Template-Funktionen zur Verfügung:<br />
template <br />
void tausche (T2 & a, T2 & b)<br />
{<br />
const T2 tmp = a;<br />
a = b;<br />
b = tmp;<br />
}<br />
template <br />
void bubblesort (F &feld, int anzahl)<br />
{<br />
for (int k=anzahl; k > 1; k --)<br />
{<br />
for (int i=0; i < k-1; i ++)<br />
{<br />
if (feld [i] < feld [i+1])<br />
{<br />
tausche (feld[i], feld[i+1]);<br />
}<br />
};<br />
};<br />
};<br />
Die Nutzung dieser Templates für die Sortierung von Punktdaten setzt bestimmte Methoden in der<br />
Klasse CPoint voraus.<br />
1. Um welche zwei Methoden (Operator-Funktionen) handelt es sich?<br />
2. Implementieren Sie eine dieser Methoden für die Klasse CPoint!<br />
Für die einzelnen, eingelesenen Objekte (Geometrie und Stilangabe) legen Sie mit new<br />
entsprechende Objekte der jeweiligen Klasse an. In ein Feld (oder Vector) mit<br />
Basisklassenzeigern tragen Sie die Zeiger auf diese Objekte ein.<br />
Danach schließen Sie die Datei.<br />
<strong>Aufgabe</strong> 4<br />
<strong>Aufgabe</strong> 4.1<br />
Windows-Programmierung<br />
(15 Punkte)<br />
a) Was versteht man bei Windows-Programmen unter "Ereignissen"?<br />
Nennen Sie zwei bis drei typische Ereignisse und die entsprechenden, in Windows-<br />
Programmen verwendeten Bezeichner!.<br />
2 Einzelne Datenfelder sind dabei durch ein Trennzeichen, wie das Komma, getrennt.<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
5/16<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
6/16
Name:<br />
Semester:<br />
Name:<br />
Semester:<br />
b) Wie werden diese in einem Windows-API-Programm verarbeitet?<br />
c) Wie werden diese in einem MFC-basierten-Programm verarbeitet?<br />
d) Erläutern Sie das Prinzip der Dokument-Ansicht-Architektur!<br />
e) Was verstehen Sie unter Serialisierung?<br />
<strong>Aufgabe</strong> 4.2<br />
Zusatzaufgabe (5 Punkte)<br />
Was sind Eigenschaften einer Fensterklasse?<br />
Was ist bei einer Windows-Applikation die <strong>Aufgabe</strong> einer Fensterprozedur?<br />
<strong>Aufgabe</strong> 4.3<br />
Einfach Windows-MFC-Applikation (16 Punkte)<br />
Erläutern Sie das nachfolgende Windows-Programm bezüglich folgender Aspekte:<br />
? Klassen, ihre Abhängigkeiten von anderen Klassen, ihre Methoden und Eigenschaften<br />
? Nachrichtenverarbeitung und Ereignis-Behandlungs-Funktionen (Callback-Funktionen)<br />
? Funktionalität<br />
? Variable prg01<br />
#include <br />
class CTopWindow : public CFrameWnd<br />
{<br />
public:<br />
CTopWindow() {Create(NULL,_T("<strong>GIS</strong>"));}<br />
protected:<br />
void OnLButtonDown(UINT nFlags, CPoint point);<br />
DECLARE_MESSAGE_MAP();<br />
};<br />
BEGIN_MESSAGE_MAP(CTopWindow, CFrameWnd)<br />
ON_WM_LBUTTONDOWN()<br />
END_MESSAGE_MAP()<br />
void CTopWindow::OnLButtonDown(UINT nFlags, CPoint point)<br />
{<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
7/16<br />
CClientDC dc(this);<br />
char str[30] = "Punkt erfasst!";<br />
dc.TextOut(point.x, point.y, str, strlen(str));<br />
CFrameWnd::OnLButtonDown(nFlags, point);<br />
}<br />
class C<strong>GIS</strong> : public CWinApp<br />
{<br />
public:<br />
virtual BOOL InitInstance();<br />
};<br />
BOOL C<strong>GIS</strong>::InitInstance()<br />
{<br />
m_pMainWnd = new CTopWindow();<br />
m_pMainWnd->ShowWindow(m_nCmdShow);<br />
return TRUE;<br />
}<br />
C<strong>GIS</strong> prg01;<br />
<strong>Aufgabe</strong> 4.4<br />
MFC (10 Punkte)<br />
Bei der Analyse des obigen Programms stoßen Sie auf die Basisklasse CWinApp und analysieren<br />
ihre Deklaration (siehe nachfolgenden Abschnitt).<br />
1. Interpretieren Sie die Klassendeklaration. Welche Elemente / Abschnitte können Sie<br />
benennen?<br />
2. Nehmen Sie dabei Bezug auf die Variablen, Abläufe, Vorgaben usw. der API-basierten<br />
Windows-Programmierung!<br />
Tragen Sie entsprechende Erläuterungen direkt in den Source ein!<br />
class CWinApp : public CWinThread<br />
{<br />
public:<br />
CWinApp(LPCTSTR lpszAppName = NULL);<br />
// Startup args (do not change)<br />
HINSTANCE m_hInstance;<br />
HINSTANCE m_hPrevInstance;<br />
LPTSTR m_lpCmdLine;<br />
int m_nCmdShow;<br />
LPCTSTR m_pszAppName; // human readable name<br />
LPCTSTR m_pszRegistryKey; // used for registry entries<br />
CDocManager* m_pDocManager;<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
8/16<br />
// app name defaults to EXE name<br />
public: // set in constructor to override default<br />
LPCTSTR m_pszExeName; // executable name (no spaces)<br />
LPCTSTR m_pszHelpFilePath; // default based on module path<br />
LPCTSTR m_pszProfileName; // default based on app name<br />
// Initialization Operations - should be done in InitInstance<br />
protected:<br />
void LoadStdProfileSettings(UINT nMaxMRU = _AFX_MRU_COUNT); // load MRU<br />
file list and last preview state<br />
...<br />
public:<br />
// Cursors<br />
HCURSOR LoadCursor(LPCTSTR lpszResourceName) const;<br />
};
Name:<br />
Semester:<br />
Name:<br />
Semester:<br />
<strong>Aufgabe</strong> 4.5<br />
Implementierung einer Anwendungsklasse (10 Punkte)<br />
1) An welcher Stelle wird der Event „Datei öffnen“ ausgewertet? Welche Funktion wird gerufen?<br />
(Bitte markieren)<br />
2) An welcher Stelle wird das Applikationsobjekt geschaffen? Wie heißt es (markieren)?<br />
3) An welcher Stelle wird die Class Id zur Nutzung der COM-Technologie festgelegt?<br />
4) An welcher Stelle wird der Fensterinhalt angezeigt? Durch welche Methode (markieren)?<br />
5) Markieren Sie den Konstruktor!<br />
6) Was steckt hinter MRU?<br />
BEGIN_MESSAGE_MAP(CMdimapApp, CWinApp)<br />
//{{AFX_MSG_MAP(CMdimapApp)<br />
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)<br />
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)<br />
//}}AFX_MSG_MAP<br />
// Standard file based document commands<br />
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)<br />
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)<br />
END_MESSAGE_MAP()<br />
CMdimapApp::CMdimapApp() { }<br />
CMdimapApp theApp;<br />
static const CLSID BASED_CODE clsid =<br />
{ 0xae8b3fc0, 0xf801, 0x11ce, { 0xbd, 0x29, 0x0, 0xaa, 0x0, 0x59, 0x4a,<br />
0xd7 } };<br />
DMapInfo mapinfo;<br />
BOOL CMdimapApp::InitInstance()<br />
{<br />
LoadStdProfileSettings(); // Load standard INI file options<br />
(including MRU)<br />
CMainFrame* pMainFrame = new CMainFrame;<br />
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))<br />
return FALSE;<br />
m_pMainWnd = pMainFrame;<br />
3) An welcher Stelle wird die Statuszeile angelegt?<br />
4) Was ist die Toolbar? Wie wird ihr Aussehen definiert?<br />
5) Markieren Sie den Konstruktor!<br />
static UINT BASED_CODE indicators[] =<br />
{<br />
ID_SEPARATOR,<br />
ID_INDICATOR_CAPS,<br />
ID_INDICATOR_NUM,<br />
};<br />
CMainFrame::CMainFrame() { }<br />
CMainFrame::~CMainFrame() { }<br />
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)<br />
{<br />
if (!m_wndToolBar.Create(this) ||<br />
!m_wndToolBar.LoadBitmap(IDR_MAINFRAME) ||<br />
!m_wndToolBar.SetButtons(buttons,<br />
sizeof(buttons)/sizeof(UINT)))<br />
{<br />
return -1; // fail to create<br />
}<br />
}<br />
if (!m_wndStatusBar.Create(this) ||<br />
!m_wndStatusBar.SetIndicators(indicators,<br />
sizeof(indicators)/sizeof(UINT)))<br />
{<br />
return -1; // fail to create<br />
}<br />
return 0;<br />
}<br />
pMainFrame->ShowWindow(m_nCmdShow);<br />
pMainFrame->UpdateWindow();<br />
return TRUE;<br />
<strong>Aufgabe</strong> 4.6<br />
Verständnis für die Implementierung einer Fensterklasse<br />
1) An welcher Stelle werden die Statusindikatoren definiert?<br />
2) An welcher Stelle werden sie zur Anzeige gebracht?<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
9/16<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
10/16
Name:<br />
Semester:<br />
Name:<br />
Semester:<br />
Implementierung der Klasse CGraphicObject<br />
GraphicObject.h<br />
Implementierung der Klasse CPoint<br />
Point.h<br />
GraphicObject.cpp<br />
Point.cpp<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
11/16<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
12/16
Name:<br />
Semester:<br />
Name:<br />
Semester:<br />
Implementierung der Klasse CLine<br />
Implementierung der Klasse CPolyline (<strong>Aufgabe</strong> 2.5)<br />
Line.h<br />
Polyline.h<br />
Line.cpp<br />
Polyline.cpp<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
13/16<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
14/16
Name:<br />
Semester:<br />
Name:<br />
Semester:<br />
Datei-Handling, Basisklassenzeiger (<strong>Aufgabe</strong> 2.6)<br />
Anlage: Beispieldatei im mif-Format<br />
Version 300<br />
Charset "WindowsLatin1"<br />
Delimiter ","<br />
CoordSys Earth Projection 8, 1000, "m", 9, 0, 1, 3500000, 0 Bounds (3400000.0,<br />
5400000,0) (3600000.0, 5600000.0)<br />
Columns 1<br />
Type Char(20)<br />
Data<br />
Point 3455887.3 5429803.92<br />
Symbol (35,0,12)<br />
Point 3512705.31 5404702.08<br />
Symbol (35,0,12)<br />
Point 3516206.32 5372899.37<br />
Symbol (35,0,12)<br />
Point 3516202.87 5445008.99<br />
Symbol (35,0,12)<br />
Line 3516202.87 5445008.99 3513000.4 5404202.38<br />
Pen (1,2,0)<br />
Line 3513000.4 5404202.38 3516206.32 5372899.37<br />
Pen (1,2,0)<br />
Pline 9<br />
3455887.3 5429803.92<br />
3460753.91 5425875.34<br />
3473862.85 5419059.64<br />
3478292.49 5419707.81<br />
3484352.19 5416685.2<br />
3489932.89 5409296<br />
3501836.64 5406055.63<br />
3509766.57 5407676.9<br />
3513000.4 5404202.38<br />
Pen (1,2,0)<br />
Pline 5<br />
3456688.2 5429308.32<br />
3468949.91 5430766.37<br />
3492968.6 5440463.19<br />
3503290.26 5438237<br />
3516202.87 5445008.99<br />
Pen (1,2,0)<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
15/16<br />
Klausur Programmieren von <strong>GIS</strong>-Applikationen, WS 2004/05<br />
16/16