Diplomarbeit
Transcrição
Diplomarbeit
Diplomarbeit Umsetzung von Informationen zu Einschränkungen für Großfahrzeuge und den Schwerlastgüterverkehr auf ein routingfähiges Straßennetz von Daniela Vekonj in Zusammenarbeit mit Falk MarcoPolo Interactive GmbH, Ostfildern - Tochterunternehmen der Mair-Gruppe, Ostfildern Prüfer: Prof. Dr. Peter Freckmann - Januar 2004 - Fachbereich Geoinformationswesen Studiengang Kartographie und Geomatik Studienschwerpunkt Geoinformatik Inhaltsverzeichnis Inhaltsverzeichnis Abbildungsverzeichnis ................................................................................... III Tabellenverzeichnis....................................................................................... III 1. Zielsetzung .............................................................................................1 2. Referenzierungsmethoden ......................................................................2 2.1 2.2 2.3 2.4 3. Allgemeines............................................................................................2 Direkte Referenzierungsmethode...............................................................2 Indirekte Referenzierungsmethode............................................................3 Referenzierung im Projekt ........................................................................3 Dokumentation .......................................................................................5 3.1. Allgemein...............................................................................................5 3.2. UseCases ...............................................................................................5 3.2.1. 3.2.2. 3.2.3. 3.2.4. 3.2.5. 3.2.6. 3.2.7. Mögliche Aktoren ................................................................................ 5 UseCase „Transportplanung “ ................................................................ 6 UseCase „Änderung der Planung wegen Verkehrslage“ ................................ 7 UseCase “Ausgabe von POIs (Points Of Interest)“....................................... 9 UseCase „Anlegen eines Fahrzeugprofils“.................................................. 9 UseCase „Bearbeiten eines Fahrzeugprofils“ ............................................ 10 UseCase „Löschen eines Fahrzeugprofils“ ............................................... 11 3.3.1. 3.3.2. 3.3.3 Allgemeines ..................................................................................... 12 Symbolbewertung ............................................................................. 12 Ergebnis der Symbolbewertung ............................................................ 18 3.3. Legendenauswertung............................................................................. 12 3.4. Datenfelder .......................................................................................... 21 3.4.1. 3.4.2. Allgemeines ..................................................................................... 21 Datenfelderdefinition ......................................................................... 21 3.5.1. 3.5.2. Überblick ........................................................................................ 24 Rascon ........................................................................................... 25 3.5. Konzept ............................................................................................... 24 3.5.2.1. 3.5.2.2. Was ist Rascon? ...............................................................................................25 Umsetzung ......................................................................................................26 3.5.3.1. 3.5.3.2. 3.5.3.3. 3.5.3.4. 3.5.3.5. Was ist ArcView ...............................................................................................28 Was sind Shapes? ............................................................................................28 Konzept ...........................................................................................................29 Umsetzung ......................................................................................................31 Ablaufschema ..................................................................................................41 3.5.4.1. 3.5.4.2. 3.5.4.3. 3.5.4.4. 3.5.4.5. Was ist MS Access? ..........................................................................................42 Was sind Abfragen ...........................................................................................42 Was sind Module ..............................................................................................43 Konzept ...........................................................................................................43 Umsetzung ......................................................................................................43 3.5.3. 3.5.4. 3.5.5. ArcView.......................................................................................... 28 Microsoft Access............................................................................... 42 Attributierung in Rascon, Verknüpfung in ArcView - Zeitaspekt .................... 47 I Inhaltsverzeichnis 4. Konzept zur Datenaktualisierung........................................................... 51 4.1. Allgemeines.......................................................................................... 51 4.2. Benötigte Daten zur Aktualisierung.......................................................... 51 4.3. Aktualisierung der Rascon- Daten............................................................ 52 4.3.1. 4.3.2. Ein Objekt wurde gelöscht .................................................................. 52 Ein Objekt wurde hinzugefügt .............................................................. 53 4.3.2.1. 4.3.2.2. 4.3.3. Lösungsmöglichkeit 1 .......................................................................................53 Lösungsmöglichkeit 2 .......................................................................................58 Ein Objekt wurde verändert................................................................. 58 4.4. Aktualisierung der NavTech- Daten.......................................................... 58 4.4.1. 4.4.2. 4.4.3. Allgemeines ..................................................................................... 58 Ein Objekt in NavTech wurde gelöscht ................................................... 59 Ein Objekt wurde in NavTech hinzugefügt............................................... 60 4.5. Graphische Darstellung der bereits verknüpften NavTech- Elemente............ 62 4.5.1. 5. Skripte zur Datenaktualisierung ............................................................ 67 Bewertung und Ausblick........................................................................ 74 5.1 Bewertung............................................................................................ 74 5.2 Ausblick ............................................................................................... 75 6. Quellennachweis ................................................................................... 76 6.1 Printmedien.......................................................................................... 76 6.2 Online-Medien....................................................................................... 78 Anhang ......................................................................................................... 79 I. Skripte ................................................................................................. 79 ChangeKoord.............................................................................................. 79 id_uebergabe ............................................................................................. 80 koordinatenfb ............................................................................................. 82 koordinatent............................................................................................... 83 tableclose .................................................................................................. 84 username .................................................................................................. 85 writetxt .................................................................................................... 85 II. VBA-Skripte aus Access .......................................................................... 87 TXTImport ................................................................................................. 87 Funktion “tokenize”...................................................................................... 91 III. Anleitung zur Verknüpfung in ArcView ..................................................... 92 II Inhaltsverzeichnis Abbildungsverzeichnis Abbildung 1: Grober Ablaufplan........................................................................ 25 Abbildung 2: Ablaufschema der Arbeit in Rascon ................................................ 27 Abbildung 3: Ablaufschema der Arbeit in ArcView ............................................... 41 Abbildung 4: Ablaufschema für die Aktualisierung mit ganz neuen NavTechElementen ............................................................................................... 54 Abbildung 5: Anleitung zur Verknüpfung in ArcView ............................................ 57 Abbildung 6: Kurzes Schema zum Import in Access............................................. 59 Abbildung 7: Anleitung zum korrekten Import der NavTech-Elemente in ArcView ... 61 Abbildung 8: Schema zur graphischen Darstellung in ArcView .............................. 62 Abbildung 9: Screenshot aus ArcView. Gesonderte Darstellung der neuen Segmente (türkis).................................................................................................... 63 Abbildung 10: Anleitung zur graphischen Verbindung von Objekten mit den NavTechSegmenten .............................................................................................. 66 Abbildung 11: Screenshot aus ArcView. Die Verbindungen zwischen Objekt und Segment sind rot dargestellt. ..................................................................... 72 Abbildung 12: Screenshot aus ArcView. Die Verbindungen zwischen Objekt und Segment sind rot dargestellt. ..................................................................... 73 Tabellenverzeichnis Tabelle 1: Datenfelderdefinitionen .................................................................... 23 III Zielsetzung Zielsetzung 1. Im Zuge der Neuauflage des Falk-TruckerAtlasses im Frühjahr 2003 wurde eine große Anzahl von neuen Themen für den Schwerlastgüterverkehr erfasst, beziehungsweise auf amtlicher Grundlage aktualisiert. Diese, in der Generalkarte Deutschland 1:200.000 generalisierten, eingearbeiteten, kartographischen Daten sollen für eine Routing-Anwendung nutzbar gemacht werden. In einem ersten Schritt sollen bestimmte, besonders wichtige Objekte mit einem begrenzten Aufwand in Rascon attributiert werden. Zu diesen Objekten zählen diejenigen, die im Zusammenhang mit Sperrungen für den Schwerlastgüterverkehr oder Gefahrguttransporten stehen. Dazu zählen: - Brücken - Unterführungen - Sperrungen jeglicher Art, wie zum Beispiel für wassergefährdende Güter. In weiteren Schritten besteht die Aufgabe darin, die attributierten Objekte mit einem digitalen, routingfähigen Straßennetz zu verknüpfen. Hierfür steht eine Datenlieferung der Firma NavTech zur Verfügung. Hinzu können perspektivisch Daten kommen, die im heute bestehenden Printprodukt nicht enthalten sind, wie zum Beispiel Angaben zu temporären Sperrungen. Zusammenfassend kann gesagt werden, dass das primäre Ziel der Arbeit die digitale Verknüpfung von Objekten aus dem Printprodukt „Trucker Atlas“ mit den Segmenten eines digitalen, routingfähigen Straßennetzes ist. 1 Referenzierungsmethoden Referenzierungsmethoden 2. 2.1 Allgemeines Unter einer Referenzierung – beziehungsweise Georeferenzierung – versteht man die Verbindung von geographischen Objekten aus der realen Welt mit Punkten auf einer digitalen Karte in einem bekannten Koordinatensystem. Eine solche Georeferenzierung kann in einem Geoinformationssystem ausgeführt werden, da ein GIS1 grundsätzlich mit Geodaten arbeitet. Geodaten beinhalten Informationen über ihren Raumbezug. Dieser kann sowohl direkt sein, sich also auf „die räumliche Position der Information auf der Erde durch zwei- oder dreidimensionale Koordinaten“ 2, wie Geographische Koordinaten, Gauß-Krüger-Koordinaten oder geozentrische Koordinaten beziehen, als auch indirekt sein, und sich mit einem Postleitzahlengebiet, einer Adresse oder einem administrativen Gebiet in Verbindung bringen. Einsatzgebiete für eine solchartige Referenzierung wäre beispielsweise die FahrzeugNavigation, Routinganwendungen und die Auswertung von Luftbildern. Es können drei Referenzierungsmethoden unterschieden werden: die direkte, die indirekte und die hybride Referenzierung, wobei die hybride Referenzierung eine Kombination aus der direkten und der indirekten darstellt. 2.2 Direkte Referenzierungsmethode Eine direkte (Geo)Referenzierung bezieht sich auf die Koordinaten eines Objektes. Dies bedeutet, dass die Objekte, welche in ein Koordinatensystem referenziert werden sollen, dasselbe Bezugssystem wie das Zielsystem haben müssen. Der Vorteil einer direkten Referenzierung liegt in den Koordinaten: diese können ohne Probleme miteinander abgeglichen werden, ein automatisierter Ablauf ist einfach zu erstellen und die Koordinaten werden von allen bekannten Geoinformationssystemen erkannt. 1 2 GeoInformationsSystem http://www.net-lexikon.de/Geobezug.html 2 Referenzierungsmethoden 2.3 Indirekte Referenzierungsmethode Bei einer indirekten Referenzierung hat der Raumbezug der Objekte Attribute, die nicht auf Geodaten basieren. Mögliche Attribute für Referenzierungen wären: ? Link-ID ? Adressen und Hausnummern ? Postleitzahlen ? Straßenbezeichnungen ? Kreuzungen ? Lineare Referenzierung Eine Link-ID ist ein eindeutiger Identifikator eines Straßenabschnittes einer digitalen Karte, den Hersteller wie beispielsweise NavTech 3 oder Teleatlas, eingeführt haben. Auch über Adressen (offizieller Straßename plus Hausnummer), Postleitzahlen, Straßenbezeichnungen (zum Beispiel B10 für Bundesstraße 10, A8 für Autobahn 8) oder Kreuzungen (Durlacher Allee/ Ostring) wäre eine eindeutige Verbindung von Objekten mit einem digitalen Straßennetz möglich. Die Lineare Referenzierung ähnelt der Referenzierung anhand von Straßenadressen. Sie gibt zwar keine Hausnummer an, misst aber zwischen zwei Knoten die Entfernung zu einem Knoten. Dies ähnelt den Kilometerangaben von Autobahnen, zum Beispiel „A8, Kilometer 146,2“. 2.4 Referenzierung im Projekt Für das in dieser Arbeit besprochene Projekt wäre eine hybride Referenzierung am passendsten. Dabei würde die Referenzierung sowohl über Koordinaten, als auch über zusätzliche Attribute, wie Straßenbezeichnungen, erfolgen. Mit Hilfe der Koordinaten wäre eine manuelle und eine automatisierte Referenzierung durchführbar. Probleme könnte es dabei jedoch mit der Genauigkeit der Koordinaten geben. Nicht nur die Koordinaten der digitalen Straßenkarte liegen nicht zu hundert Prozent an der richtigen Stelle, sondern auch die nach ArcView importierten Rascon3 Navigation Technologies (www.navtech.com) 3 Referenzierungsmethoden Objekte haben eine gewisse Konvertierungs-Ungenauigkeit. Dies macht den Einsatz einer zusätzlichen Referenzierung notwendig. Die Straßenbezeichnungen in Verbindung mit den Koordinaten würde in allen Gegenden, auf dem Land und in Ballungsgebieten, zum Erfolg führen. Würde die Koordinate nicht zu hundert Prozent übereinstimmen, so könnte man immer noch die Straßenbezeichnung hinzuziehen. Das ergäbe eine hohe Trefferquote. Probleme ergeben sich hier aus den Objekten, die in das Netz überführt werden sollen, da sie keinerlei Angaben zu den Straßen beinhalten, auf denen sie liegen. Dies macht eine hybride und automatisierte Referenzierung in diesem Projekt unmöglich. Daher wurde auf eine direkte, manuelle und zeitaufwändige Referenzierung zurückgegriffen. 4 Dokumentation 3. Dokumentation 3.1. Allgemein Bevor mit der eigentlichen Aufgabe, der Erstellung eines Konzeptes zur Verknüpfung der Objekte aus Rascon mit den Straßensegmenten aus NavTech, begonnen werden kann, müssen einige Punkte sorgfältig geprüft werden. Mögliche Anwendungsfälle (Use Cases) für die Routinganwendung werden durchgespielt. Hierbei wird bereits im Vorfeld abgeklärt, auf welche Faktoren bei der zukünftigen Anwendung eingegangen, beziehungsweise Rücksicht genommen werden muss. Die Use Cases geben dem Hersteller der Routinganwendung Informationen über den möglichen Gebrauch sowie über denkbare zukünftige Anwendungsarten, wie zum Beispiel ein ‚On-Board-System’ des Produktes. Ferner muss anhand der Legende entschieden werden, welche Objekte aus dem Printmedium für den Prototypen wichtig und auch umsetzbar sind. Zusätzlich werden in dieser ersten Phase des Projektes Datenfelder definiert, in denen die Enddatensätze schließlich gespeichert werden sollen. 3.2. UseCases 3.2.1. Mögliche Aktoren Folgende Aktoren können identifiziert werden: - Aktor „Speditionssachbearbeiter“ Ein Speditionssachbearbeiter ist ein Mitarbeiter einer Speditionsfirma, der für die Streckenplanung von Transportaufträgen verantwortlich ist. - Aktor „Fahrer“ Ein Fahrer ist der Führer eines Kraftfahrzeuges, der Änderungen an einer einmal geplanten Route entsprechend der aktuellen Verkehrssituation durchführen muss. 5 Dokumentation Hinweise: Im Truckeratlas angedeutete Informationen wie ? Rollende Landstraße ? Schifffahrts-Terminals können nur dann sinnvoll für die Routenplanung eingesetzt werden, wenn zusätzliche Informationen wie zum Beispiel Zielorte, Anfahrtszeiten und Kosten verfügbar sind. 3.2.2. UseCase „Transportplanung “ Main Flow Der Sachbearbeiter lässt die Route für einen Transport berechnen. Dem System werden Eckdaten für die Berechnung der Strecke mitgeteilt, wie zum Beispiel • Es handelt sich um einen Gefahrguttransport. • Das Fahrzeug hat ein zulässiges Gesamtgewicht von mehr als 3,5 t. • Das Fahrzeug hat ein tatsächliches Gewicht (mit Ladung) von 30t. • Das Fahrzeug hat eine tatsächliche Achslast von 20t. • Das Fahrzeug ist 4,5 m breit. • Das Fahrzeug ist 4,0 m hoch. • Die Fahrzeuglänge ist 12 m. • Der Kurvenradius des Fahrzeugs ist 25 m. Optionale Angaben des Sachbearbeiters können sein: • Die Nichtberücksichtigung bestimmter Straßenklassen. • Die Vermeidung von Steigungsstrecken. • Die Vermeidung von frei wählbaren Orten. Optional: • Ein Fahrzeugprofil wird geladen, welches die Fahrzeuginformationen vorgibt. • Die Berechnung geschieht mit unvollständigen Fahrzeuginformationen. 6 Dokumentation • Die aktuelle Wetterlage wird bei der Berechnung berücksichtigt (Schneebericht) und schneekettenpflichtige Straßen von der Routenführung ausgeschlossen. • Bei Berechnung der Route während des kalendarischen Winters werden schneekettenpflichtige Straßen von der Routenberechnung ausgeschlossen. All diese Angaben werden in der berechneten Route verarbeitet. Post Condition Der Sachbearbeiter erhält die Daten der berechneten Route. Er erhält darüber hinaus Informationen über auf der Route liegende Grenzkontrollstellen, Schneekettenpflicht im Winter und auf dem Weg liegende Raststätten (vor allem Autohöfe), eventuell schon unter Berücksichtigung der Pausenregelung, und Tankstellen. Darüber hinaus informiert das System über alternative Transportmöglichkeiten (Rollende Landstraße, Binnenschiffterminals) und verkehrsgünstig gelegene Binnenzollämter. Der Sachbearbeiter erhält die Möglichkeit, Alternativstrecken auszuwählen, sollte er die ausgegebene Strecke aus bestimmten Gründen ablehnen. An allen Brücken und Unterführungen werden Warnhinweise bzw. Informationen zu Höhe, Schrammbordenbreite und Tragfähigkeit ausgegeben. Schneekettenpflicht im Winter wird angezeigt. 3.2.3. UseCase „Änderung der Planung wegen Verkehrslage“ Main Flow Der Fahrer berechnet mit einem OnBoard-System aufgrund der aktuellen Verkehrslage die Route neu (Stau, Sperrungen, Unwetter, Wartezeiten an Grenzen usw.). Der Fahrer (oder eine online übermittelte Stauinformation) sperrt interaktiv temporär Strecken für eine Neuberechnung in seinem System. Stauinformationen oder Sperrungen werden online zur Spedition übermittelt, um den Sachbearbeiter über die Streckenänderung zu informieren. 7 Dokumentation Das System übernimmt die vom Sachbearbeiter eingegebenen Rahmeninformationen und berechnet eine Alternativroute. Post Condition Der Fahrer erhält die Daten der berechneten Route. Er erhält darüber hinaus Informationen über auf der Route liegende Grenzkontrollstellen, Schneekettenpflicht im Winter und auf dem Weg liegende Raststätten, eventuell schon unter Berücksichtigung der Pausenregelung, und Tankstellen. Darüber hinaus informiert das System über alternative Transportmöglichkeiten (Rollende Landstraße, Binnenschiffterminals) und verkehrsgünstig gelegene Binnenzollämter. Der Sachbearbeiter erhält die Möglichkeit, Alternativstrecken auszuwählen, sollte er die ausgegebene Strecke aus bestimmten Gründen ablehnen. An allen Brücken und Unterführungen werden Warnhinweise bzw. Informationen zu Höhe, Schrammbordenbreite und Tragfähigkeit ausgegeben. 8 Dokumentation 3.2.4. UseCase “Ausgabe von POIs (Points O f Interest)“ Pre Condition Eine Routenberechnung liegt vor. Main Flow Der Fahrer oder der Sachbearbeiter lässt sich vom System an einer berechneten Route liegende Points Of Interest (POIs) anzeigen. Er erhält eine aktualisierte Routenplanung mit angegebenen • Binnenzollämtern • Grenzkontrollstellen für TIR-Verkehr • Güterverkehrszentren (GVZ) • Terminals für kombinierten Verkehr Straße/Schiene • Terminals für kombinierten Verkehr Straße/Schiene/Wasser • Seehafen-Terminals für kombinierten Verkehr Straße/Schiene/Wasser • Umschlag-Terminals für Rollende Landstraße • Rasthaus mit Übernachtung • Raststätte • Kleinraststätte • Tankstelle (LKW-geeignet) • Autohof Post Condition Der Fahrer erhält die Daten der ber echneten Route inklusive POIs. 3.2.5. UseCase „Anlegen eines Fahrzeugprofils“ Main Flow Der Sachbearbeiter definiert ein Fahrzeugprofil für einen LKW des Fuhrparks. Eckdaten für Routenberechnungen werden unter einem eindeutigen Namen im System abgelegt, wie zum Beispiel • Es ist ein Gefahrguttransport. 9 Dokumentation • Das Fahrzeug hat ein zulässiges Gesamtgewicht von mehr als 3,5 t. • Das Fahrzeug hat ein tatsächliches Gewicht (mit Ladung) von 30t. • Das Fahrzeug hat eine tatsächliche Achslast von 20t. • Das Fahrzeug ist 4,5 m breit. • Das Fahrzeug ist 4,0 m hoch. • Die Fahrzeuglänge ist 12 m. • Der Kurvenradius des Fahrzeugs ist 25 m. Post Condition Dem System liegen die Rahmeninformationen für ein bestimmtes Fahrzeug vor. Alternate Flow Der Sachbearbeiter prüft die getätigten Eingaben, welche ihm angezeigt werden und akzeptiert diese nicht. Post Condition Das System hat die gesamten getätigten Eingaben nicht gespeichert. 3.2.6. UseCase „Bearbeiten eines Fahrzeugprofils“ Main Flow Der Sachbearbeiter lädt ein bestehendes Fahrzeugprofil für einen LKW des Fuhrparks. Eckdaten für Routenberechnungen werden angezeigt und vom Sachbearbeiter verändert, wie zum Beispiel • Es ist ein Gefahrguttransport. • Das Fahrzeug hat ein zulässiges Gesamtgewicht von mehr als 3,5 t. • Das Fahrzeug hat ein tatsächliches Gewicht (mit Ladung) von 30t. • Das Fahrzeug hat eine tatsächliche Achslast von 20t. • Das Fahrzeug ist 4,5 m breit. • Das Fahrzeug ist 4,0 m hoch. • Die Fahrzeuglänge ist 12 m. 10 Dokumentation • Der Kurvenradius des Fahrzeugs ist 25 m. Der Sachbearbeiter speichert die getätigten Änderungen. Post Condition Dem System liegen die Rahmeninformationen für ein bestimmtes Fahrzeug vor. Alternate Flow Der Sachbearbeiter prüft die getätigten Eingaben, welche ihm angezeigt werden und akzeptiert diese nicht. Post Condition Das System hat die gesamten getätigten Änderungen nicht gespeichert. Der Datensatz liegt im Ausgangszustand vor. 3.2.7. UseCase „Löschen eines Fahrzeugprofils“ Main Flow Der Sachbearbeiter löscht ein unter einem eindeutigen Namen abgelegtes Profil. Eine Sicherheitsabfrage wird bestätigt. Post Condition Dem System liegen die Rahmeninformationen für ein bestimmtes Fahrzeug nicht mehr vor. Alternate Flow Der Sachbearbeiter bricht den Löschvorgang bei der Sicherheitsabfrage ab. PostCondition Das System hat die Löschung nicht durchgeführt. Der Datensatz liegt im Ausgangszustand vor. 11 Dokumentation 3.3. Legendenauswertung 3.3.1. Allgemeines Zu Beginn des Projektes lagen die Rascon- Objekte unter anderem im Printprodukt „Trucker Atlas“ vor. Da eine Verknüpfung aller im Atlas abgedruckten Objekte mit dem digitalen Straßennetz nicht realisierbar war, musste eine kritische Bewertung aller Symbole auf deren Wichtigkeit durchgeführt werden. 3.3.2. ? Symbolbewertung Grenzkontrollstellen international Plus: - Zeigen Fernfahrern, die ins Ausland müssen, wichtige Grenzstellen an. Minus: - Sind nicht nötig, da die Grenzstellen in den NavTech-Daten bereits enthalten sind. ? Grenzkontrollstellen mit Beschränkung Plus: - Zeigt die Grenzkontrollstellen an, für die nicht alle Lkws zugelassen sind. - Zeigt die Information an, dass die Grenzkontrollstelle nicht rund um die Uhr geöffnet ist. Minus: - Grenzkontrollstellen beziehungsweise Grenzübergänge sind bereits in den NavTech- Daten vorhanden. ? Brücke, Tragfähigkeit in Tonnen Plus: - Wird dieses Symbol nicht berücksichtigt, würde dies schwerwiegende Konsequenzen im Straßenverkehr nach sich ziehen. - Muss bei der Routenplanung mit einbezogen werden. 12 Dokumentation ? Brücke, Schrammbordenbreite in Meter Plus: - Wichtige Information für Lastkraftwagen mit Überbreite. Minus: - Brücken sind meist breit genug damit mindestens ein LKW hindurch passt. Ein Lkw darf die maximale Breite von 2,55m4 nicht überschreiten. Daher wären Signaturen mit einer Schrammbordenbreite von über 3 m unnötig. ? Brücke, genaue Einschränkungen vor Ort beachten Plus: - Diese Symbole zeigen alte Daten der Brücken an, die bis Redaktionsschluss nicht bestätigt oder geändert wurden. Sie waren in der letzten Ausgabe korrekt, sind jetzt jedoch ohne Gewähr. - Wichtig für die Routenplanung, müssen auf Grund der Verkehrssicherheit berücksichtigt werden. Minus: - Signatur ist ohne Gewähr, da sie bis Redaktionsschluss nicht bestätigt worden ist. Info: - Bei der Routenausgabe sollte man neben diese Brücken entsprechende Hinweise anbringen, eventuell „Ohne Gewähr“. ? Unterführung, Durchfahrtshöhe in Meter Plus: - Sehr wichtige Signatur. Wird sie nicht berücksichtigt, würde dies schwerwiegende Konsequenzen im Straßenverkehr nach sich ziehen. - Sie muss bei der Routenplanung mit einbezogen werden. ? Unterführung, Schrammbordenbreite in Meter Plus: - wichtig für Lastkraftwagen mit Überbreite Minus: - analog zu „Brücke, Schrammbordenbreite in Meter“ 4 http://www.storck-verlag.de/studie1/teil_a21.htm 13 Dokumentation ? Unterführung, genaue Einschränkung vor Ort beachten Plus: - Diese Symbole zeigen alte Daten der Unterführungen an, die bis Redaktionsschluss nicht bestätigt oder aktualisiert wurden. Sie waren also in der letzten Ausgabe korrekt, sind jetzt ohne Gewähr. - Wichtig für die Routenplanung, müssen auf Grund der Verkehrssicherheit berücksichtigt werden. Minus: - Diese Signatur birgt ein höheres Sicherheitsrisiko als die normalen Unterführungssignaturen, da sich der LKW-Fahrer über die exakten Einschränkungen vor Ort informieren muss. Info: - Bei der Routenausgabe sollte man neben diesen Unterführungen entsprechende Hinweise anbringen, eventuell „Ohne Gewähr“. ? Gesperrt für kennzeichnungspflichtige Kfz mit gefährlichen Gütern Plus: - Für den geregelten Straßenverkehr sehr wichtig. ? Gesperrt für Kfz mit wassergefährdender Ladung Plus: - Für den geregelten Straßenverkehr und die Absicherung der Umwelt sehr wichtig. ? Gesperrt für Fahrzeuge aller Art Plus: - Sehr wichtig für die zukünftige Routinganwendung, da diese Strecken vollständig gesperrt werden müssen. ? Gesperrt für Kraftwagen und sonstige mehrspurige Kraftfahrzeuge Plus: - Sehr wichtig für die zukünftige Routinganwendung, da diese Strecken gesperrt werden müssen. 14 Dokumentation ? Gesperrt für Kraftfahrzeuge mit einem zulässigen Gesamtgewicht über 3,5t Plus: - Sehr wichtig für die zukünftige Routinganwendung, da diese Strecken für Lastkraftwagen gesperrt werden müssen. ? Gesperrt für Fahrzeuge über angegebenem tatsächlichem Gewicht Plus: - Diese Signatur muss ebenfalls übernommen werden. ? Gesperrt für Fahrzeuge über angegebener tatsächlicher Achslast Plus: - Wichtig für den geregelten Straßenverkehr und die Routinganwendung. ? Schneekettenpflicht im Winter Plus: - Im Winter auf bestimmten Strecken Verkehrsteilnehmer enorm wichtig. für die Sicherheit aller Minus: - Im Sommer in den meisten Regionen nicht notwendig, außer in den Alpen und ähnlichem Gebiet, wie Bergland, Hochgebirge und höhergelegenen Regionen. Info: - In der Anfangsmaske der Routinganwendung sollte eingegeben werden können, in welcher Jahreszeit man sich befindet und ob Schneefalloder Glatteisrisiko vorhanden ist. Das System könnte das Datum bzw. Jahreszeit auch automatisch bei jedem Start ermitteln. Die vorherrschende Schnee- und Glatteissituation zu diesem Zeitpunkt muss der User selbst angeben. ? Gefälle von 6% bis 10%, über 10% Plus: - Eine sehr wichtige Signatur, für den Prototypen jedoch nicht notwendig. 15 Dokumentation ? Verkehrsgünstig gelegenes Binnenzollamt Plus: - Ist ein Binnenzollamt, das eine besonders gute Anbindung an das Straßennetz besitzt. - Wichtig für Spediteure, die ihre Fahrer ins Ausland schicken und lange Wartezeiten an den Grenzen vermeiden wollen. - Entlastung aller anderen Grenzstellen. Minus: - Im Prototyp nicht von Bedeutung. ? Sonstiges Binnenzollamt Plus: - Wichtig für Spediteure, die ihre Fahrer ins Ausland schicken und lange Wartezeiten an den Grenzen vermeiden wollen, da das Binnenzollamt im Landesinneren liegt. Minus: - Im Prototyp nicht von Bedeutung. ? Grenzzollstelle mit TIR-Verkehr Plus: - Schnellere Bearbeitung des TIR- Verkehrs, daher wichtig für TIRFahrer. Minus: - nicht von Bedeutung ? Umschlag-Terminal für den kombinierten Verkehr Straße/Schiene Plus: - Wichtig als Start- beziehungsweise Zielpunkt für Spediteure. Minus: - Da keine Informationen über Bahnhöfe vorhanden sind, ist diese Signatur für die erste Datenlieferung nicht notwendig. - Ist für den reibungslosen und gesicherten Ablauf des Straßenverkehrs nicht dringend nötig. ? Binnenschiff-Terminal für den kombinierten Verkehr Straße/Schiene/Wasser Plus: - Wichtig als Start- beziehungsweise Zielpunkt für Spediteure. Minus: - Da keine Informationen über Bahnhöfe und Häfen vorhanden sind, ist diese Signatur für die erste Datenlieferung nicht notwendig. 16 Dokumentation - Ist für den reibungslosen und gesicherten Ablauf des Straßenverkehrs nicht dringend nötig. ? Seehafen-Terminal für den kombinierten Verkehr Straße/Schiene/Wasser Plus: - Wichtig als Start- beziehungsweise Zielpunkt für Spediteure. Minus: - Da keine Informationen über Bahnhöfe und Häfen vorhanden sind, ist diese Signatur für die erste Datenlieferung nicht notwendig. - Ist für den reibungslosen und gesicherten Ablauf des Straßenverkehrs nicht dringend nötig. ? Umschlag-Terminal für Rollende Landstraße Plus: - Wichtig als Start- beziehungsweise Zielpunkt für Spediteure. Minus: - Da keine Informationen über Bahnhöfe vorhanden sind, ist diese Signatur für die erste Datenlieferung nicht notwendig. - Ist für den reibungslosen und gesicherten Ablauf des Straßenverkehrs nicht dringend nötig. ? Güterverkehrszentrum Plus: - Wichtig als Start- beziehungsweise Zielpunkt für Spediteure. Minus: - Da keine Informationen über Bahnhöfe vorliegen, ist diese Signatur für die erste Datenlieferung noch uninteressant. Info: - Ein Güterverkehrszentrum ist eine Ansammlung verkehrswirtschaftlicher Betriebe, logistischer Dienstleister und Industrieunternehmen in einem Gewerbegebiet mit Anbindung an mindestens zwei Verkehrsträger, zum Beispiel Straße und Schiene. ? Rasthaus mit Übernachtung Plus: - Könnte für Fernfahrer interessant sein. Minus: - Für den geregelten und sicheren Ablauf im Straßenverkehr ist diese Signatur nicht notwendig. Fernfahrer übernachten meist in den eigenen Fahrzeugen. 17 Dokumentation ? Raststätte Plus: - Ebenfalls interessant für Fernfahrer. Minus: - Für den geregelten und sicheren Ablauf im Straßenverkehr ist diese Signatur nicht notwendig. ? Kleinraststätte Plus: - Interessant für Fernfahrer, die ihre vorgeschriebenen Pausen dort verbringen könnten. Minus: - LKW-Fahrer fahren eher die großen Raststätten oder Autohöfe an. - Für den geregelten und sicheren Ablauf im Straßenverkehr ist diese Signatur nicht notwendig. ? Tankstelle Plus: - Wichtige Signatur. Minus: - Meist gibt es Tankstellen auch an größeren Raststätten oder Autohöfen. Ob einzelne Tankstellen wichtig sind, wird angezweifelt, da Fernfahrer eher nicht die Autobahnen verlassen um zu tanken. ? Autohof Plus: - Diese Signatur ist unverzichtbar. Sie ist wichtig für die großen Pausen oder Übernachtungen der Fernfahrer. 3.3.3 Ergebnis der Symbolbewertung Trotz der vielen wichtigen Signaturen können (vorerst) nicht alle für die Routinganwendung übernommen werden. Anhand der Bewertung war es möglich genau zu erkennen, was in der ersten Version für die Lastkraftwagenfahrer wirklich wichtig sein könnte. Das heißt, es wurden die Signaturen übernommen, welche zwingend notwendig für den sowohl reibungslosen als auch sicheren Straßenverkehrsablauf sind. 18 Dokumentation Übernommen wurden folgende Signaturen: - Brücke, Tragfähigkeit in Tonnen - Brücke, Schrammbordenbreite in Meter - Brücke, genaue Einschränkungen vor Ort beachten - Unterführung, Durchfahrtshöhe in Meter - Unterführung, Schrammbordenbreite in Meter - Unterführung, genaue Einschränkungen vor Ort beachten - Gesperrt für: - ? kennzeichnungspflichtige Kfz mit gefährlichen Gütern ? Kfz mit wassergefährdender Ladung ? Fahrzeuge aller Art ? Kraftwagen und sonstige mehrspurige Kfz ? Kfz mit einem zulässigen Gesamtgewicht von über 3,5 t ? Fahrzeuge über angegebenem tatsächlichen Gewicht ? Fahrzeuge über angegebener tatsächlicher Achslast Schneekettenpflicht im Winter Als eher zweitrangig wurden folgende Signaturen erachtet: - Grenzkontrollstelle international - Grenzkontrollstelle mit Beschränkung - Gefälle von 6% bis 10% - Gefälle von über 10% - Verkehrsgünstig gelegenes Binnenzollamt - Sonstiges Binnenzollamt - Grenzzollstelle mit TIR-Vekehr - Umschlag-Terminal für den kombinierten Verkehr Straße/Schiene - Binnenschiff-Terminal für den kombinierten Verkehr Straße/Schiene/Wasser - Seehafen-Terminal für den kombinierten Verkehr Straße/Schiene/Wasser - Umschlag-Terminal für Rollende Landstraße - Güterverkehrszentrum 19 Dokumentation - Rasthaus mit Übernachtung - Raststätte - Kleinraststätte - Tankstelle - Autohof Diese eher sekundär wichtigen Signaturen sind nicht notwendigerweise mit dem sicheren Ablauf des Straßenverkehrs verbunden. Sie geben zusätzliche Informationen und erleichtern dem Reisenden die Fahrt, können jedoch auch weggelassen werden. Die Signaturen der Umschlag-, Binnenschiff- und Seehafen- Terminals wurden aus dem Grund nicht berücksichtigt, da bisher keine Zielorte wie Häfen oder Bahnhöfe, Anfahrtszeiten oder Kosten verfügbar waren. Alle nicht einbezogenen Objekte können jedoch jederzeit zum Projekt hinzugefügt werden. 20 Dokumentation 3.4. Datenfelder 3.4.1. Allgemeines Da die einzelnen Datensätze später in Access weiterver arbeitet werden sollen, werden für die Tabelle Datenfelder definiert. Diese geben an, in welchem Datenformat die Informationen gespeichert werden sollen und wie der eindeutige Spaltenname lauten soll. 3.4.2. Datenfelderdefinition Schlüsselwörter: Sie sind Wortkreationen, durch die die Objekte eindeutig identifizierbar sind. Die Schlüsselwörter sind außerdem auch die Spaltennamen in Access. Abkürzung Schlüsselwörter: Die Abkürzungen der Schlüsselwörter sind für die Bearbeitung in ArcView und Access sehr wichtig, da diese in die Skripte eingearbeitet werden. Hierbei wurde die Bearbeitung mit Kürzeln vorgezogen. Datentyp: Dieses Feld gibt den Datentyp des gespeicherten Objektes in Access wieder. Schlüsselwörter RasconID Abkürzu Datentyp ng Schlüss elwörter Beschreibung String Ist die eindeutige ID innerhalb der MGVMapServer-Datenbank. NetzID String StartpunktLamda Float StartpunktPhi Float EndpunktLamda Float EndpunktPhi Float Richtung Boolean Ist die eindeutige ID eines Straßenabschnittes innerhalb des Fremddatennetzes. In NavTech die LinkID. AnfangsKoordinate (geografisch) des beschriebenen Objektes in WGS84-Länge AnfangsKoordinate (geografisch) des beschriebenen Objektes in WGS84-Breite EndKoordinate (geografisch) des beschriebenen Objektes in WGS84-Länge EndKoordinate (geografisch) des beschriebenen Objektes in WGS84-Breite Bei in beide Richtungen geltende Einschränkungen 0, bei einseitigen Einschränkungen 1. Das Koordinatenpaar ist 21 Dokumentation BrueckeTrag bt Float BrueckeSchrammbord bs Float BrueckeEinschr Boolean be UnterfuehrungHoehe uh Float UnterfuehrungSchrammbord us Float UnterfuehrungEinschr Boolean ue GesperrtGefahrgut gg GesperrtGefahrgutNurZeitweise GesperrtWasser String gw GesperrtWasserNurZeitweise GesperrtAlles Boolean Boolean String ga GesperrtAllesNurZeitweise Boolean Schrammbordbreite bezeichnet die Breite der für Lkws befahrbaren Straße in Meter. Dieses Symbol zeigt alte Daten der Brücken an, die bis Redaktionsschluss nicht bestätigt oder geändert wurden. Sie waren in der letzten Ausgabe korrekt, sind jetzt ohne Gewähr. Genaue Einschränkungen vor Ort beachten. Gibt die Durchfahrtshöhe der Unterführung in Meter an. Schrammbordenbreite bezeichnet die Breite der für Lkws befahrbaren Straßen in Meter. Dieses Symbol zeigt alte Daten der Brücken an, die bis Redaktionsschluss nicht bestätigt oder geändert wurden. Sie waren in der letzten Ausgabe korrekt, sind jetzt ohne Gewähr. Die Strecke ist gesperrt für kennzeichnungspflichtige Kfz mit gefährlichen Gütern. Die Sperrung ist in irgendeiner Weise eingeschränkt. Die Strecke ist für Kfz mit wassergefährdender Ladung gesperrt. Die Sperrung ist in irgendeiner Weise eingeschränkt. Gesperrt für Fahrzeuge aller Art. s Boolean Die Sperrung ist in irgendeiner Weise eingeschränkt. Gesperrt für Kraftwagen und sonstige mehrspurige Kfz. Die Sperrung ist in irgendeiner Weise eingeschränkt. Gesperrt für Kfz mit einem zulässigen Gesamtgewicht über 3,5t. Die Sperrung ist in irgendeiner Weise eingeschränkt. Gesperrt für Fahrzeuge über angegebenem tatsächlichem Gewicht. Die Sperrung ist in irgendeiner Weise eingeschränkt Gesperrt für Fahrzeuge über angegebener tatsächlicher Achslast. Die Sperrung ist in irgendeiner Weise eingeschränkt. Zeigt Schneekettenpflicht an. Gefaelle6 ge6 Boolean Zeigt das Gefälle von 6-10% an. Gefaelle10 ge10 Boolean Zeigt das Gefälle über 10% an. biv Boolean, POI bi Boolean, Binnenzollamt, das eine besonders gute Anbindung an das Straßennetz besitzt (verkehrsgünstig gelegen). "Normales" Binnenzollamt. GesperrtKfz String in Laufrichtung abgespeichert . Gibt die Tragfähigkeit in Tonnen an. gk GesperrtKfzNurZeitweise GesperrtKfz3t5 String gk35 GesperrtKfz3t5NurZeitweise GesperrtTatGewicht gtg BinnenzollamtV Binnenzollamt Float String gta GesperrtTatAchslastNurZeitweise Schneekette Boolean String GesperrtTatGewichtNurZeitweise GesperrtTatAchslast Boolean Float String 22 Dokumentation Zeitstempel POI Boolean, POI Boolean, POI Boolean, POI Boolean, POI Boolean, POI Boolean, POI String NavTechReleass String TruckerRelease String Bearbeiter String GrenzTIR GVZ Raststaette RaststaetteK tir gvz r rk Tank t Autohof a Grenzzollstelle mit TIR-Verkehr. Schnellere und exklusive Bearbeitung des TIR-Verkehrs. Kleinraststätte Tankstelle Verknüpfungszeitpunkt zwischen Rascon/NavTech. Das NavTech-Release auf dessen Basis die Verknüpfung der NavTechId’s mit den RasconID’s erfolgt ist. Angabe des Korrekturstandes der zugrunde liegenden TruckerAtlas-Substanz. Bearbeitername Tabelle 1: Datenfelderdefinitionen 23 Dokumentation 3.5. Konzept 3.5.1. Überblick Zu Beginn galt es zu bedenken, mit welchen Programmen das Projekt durchgeführt werden sollte. Die Attributierung der Objekte aus dem Atlas sollte zuerst in dem kartographischen Programm „Rascon“ erfolgen, da die Objekte nur in jenem Programm zur Verfügung standen. Das nächste Problem ergab sich aus den NavTech-Daten, die nur in Form von Shapes verfügbar waren. Für diesen Fall musste ein Programm gefunden werden, das mit Shapes arbeitet und in welchem man eigene Skripte integrieren kann. Die Wahl fiel hierbei auf das Geoinformationssystem „ArcView 3.0a“ von ESRI. Nach der Attributierung in Rascon sollten die modifizierten Objekte als Shapes exportiert werden, um sie gemeinsam mit den Shapes des digitalen Straßennetzes in ArcView bearbeiten zu können. Es galt jetzt das nächste Problem zu lösen: Wie bekommen die NavTech-Segmente die Informationen über eventuelle Sperrungen, Brücken oder Unterführungen übermittelt? Hierfür wurde an eine Verknüpfung der Rascon-Objekte mit den Straßensegmenten gedacht. Durch Klicks auf die identischen Objekte im jeweiligen Thema sollen automatisch Objekt-Ids, Anfangs- und Endkoordinaten der NavTech-Segmente sowie der Infotext der Rascon-Objekte in einer Textdatei gespeichert werden. Diese Informationen werden anschließend in eine Access Datenbank importiert, liegen somit als Tabelle in einer eigenen Datenbank vor und können dort weiter bearbeitet werden. 24 Dokumentation Der grobe Ablauf in einem Schaubild: Rascon Attributierung der Objekte Export der Objekte aus Rascon, Import im Shapeformat in ArcView Laden der NavTechShapes in ArcView. ArcView Verknüpfen der Informationen aus den RasconObjekten mit dem digitalen Straßennetz. Automatisiertes Schreiben der Datensätze in eine externe Textdatei. Access Importieren der Textdatei in eine Access- Tabelle. Abbildung 1: Grober Ablaufplan 3.5.2. Rascon 3.5.2.1. Das Was ist Rascon? Programm Bearbeitung und „Rascon“ ist Erstellung ein von „Werkzeug Karten und zur kartographischen Plänen mit hoher Komplexität“ 5. Diese Karten können digital oder als Printprodukt von höchster Qualität herangezogen werden. Die für das Projekt genutzte Version stellt einige Funktionen bereit, die für die digitale Kartographie sehr wichtig sind. Dazu zählt unter anderem die Möglichkeit, sowohl im Raster- als auch im Vektormodus zu arbeiten. Das gibt dem Kartographen die Möglichkeit, eingescannte analoge Karten in 5 www.rascon.de 25 Dokumentation Rascon zu laden und diese im Vektormodus fortzuführen. Es können jedoch auch vektorisierte Karten aufgerastert werden. Im Vektormodus kann man eine vielzahl von Objekten erstellen. Jedes dieser Objekte besitzt im Bearbeitungsmodus eine Zeile, in die Informationen eigegeben werden können. Bei texthaften Objekten ist diese Angabe der Text, der in Rascon erscheint. Bei allen anderen Arten, wie linienförmigen oder punkthaften Symbolen, wird diese Information nicht sichtbar, sondern bleibt in der Info-Zeile im Hintergrund gespeichert. Diese Möglichkeit der Speicherung von Informationen wurde im Projekt genutzt, um Attribute zu Einschränkungen mit den Objekten, wie beispielsweise Brücken oder Unterführungen, zu verbinden. 3.5.2.2. Umsetzung Zu Beginn des Projektes mussten die Einschränkungsinformationen mit den Objekten in Rascon verbunden werden. Alle Objekte waren durch eindeutige IDs gekennzeichnet, das heißt zum Beispiel, dass eine Brücke von Beginn an als Objekt „Brücke“ attributiert war. Die genauen Einschränkungen wie Tragfähigkeit oder Höhe waren in keinem Objekt abgespeichert. Diese Informationen mussten daher jedem Objekt einzeln zugeordnet werden. Da jedoch jede Brücke oder Unterführung unterschiedliche Attribute hat, musste diese Arbeit anstatt mit Hilfe von automatisierenden Skripten vollständig manuell ausgeführt werden. 26 Dokumentation Hier ein kurzes Ablaufschema der Arbeit in Rascon: Rascon-Symbol für Unterführung. In das Textfeld des Elements können zusätzliche Informationen eingegeben werden. Rascon-Symbol mit beschreibenden Attributen. Diese Informationen geben Aufschluss über das zugehörige Symbol (z.B. Unterführung, Brücke, gesperrte Strecke etc.). Die Attribute werden von Hand in das Textfeld des Rascon- Symbols eingetragen. Bei diesem Beispiel wäre dies „uh3.5“. Konvertierung der bearbeiteten Rascon-Symbole in ArcView-Shapes. Abbildung 2: Ablaufschema der Arbeit in Rascon Nachdem alle Objekte in Rascon mit Attributen versehen worden waren, konnten sie durch ein von Herrn Markus Schorb selbst entwickeltes Programm als Shapefile exportiert werden. 27 Dokumentation 3.5.3. ArcView 3.5.3.1. Was ist ArcView ArcView ist ein Desktop-Geoinformationssystem (GIS) der Firma ESRI. Es ist ein offenes System für die Darstellung, die Bearbeitung und die Abfrage von geographischen Daten. „Geoinformationssysteme werden unter anderem in folgenden Bereichen eingesetzt: - Katasterämter (Liegenschaften) - Militär (Logistik) - Umweltschutz (Biotop- und Nutzungstypen) - Notdienste (Polizei, Feuerwehr, Rettungswesen) - Stadt- und Raumplanung (Kanalnetze)“ 6 Raumbezogene Daten können mit ArcView nicht nur erfasst und in einer Datenbank verwaltet, sondern auch kartographisch bearbeitet, ausgewertet, exportiert oder auf Bildschirm oder Drucker ausgegeben werden. Durch die Einbindung von Legenden, Tabellen und Diagrammen können mit ArcView erzeugte Karten zusätzliche Informationen darstellen. Das Programm ist überdies mit einer Entwicklungsumgebung für die objektorientierte Sprache Programmiersprache lässt Benutzeroberfläche, eine die „Avenue“ individuelle hauptsächlich ausgestattet. Veränderung aus Diese sowohl der Avenue-Skripten und Steuerelementen besteht, als auch eigener Skripte zu. Mit Hilfe dieser Programmiersprache konnte das Projekt in ArcView ohne Probleme umgesetzt werden. 3.5.3.2. Was sind Shapes? In ArcView wird mit Projekten gearbeitet. Die Daten, die in einem Projekt angezeigt werden sollen, müssen dafür als neues Thema in einem 6 LIEBIG, Wolfgang (2001): Desktop-GIS mit ArcView GIS: Leitfaden für Anwender. Seite 3 28 Dokumentation sogenannten View geöffnet werden. Um raumbezogene Daten öffnen zu können, müssen diese in einem bestimmten Datenformat vorliegen. ArcView unterstützt sowohl das Format von ARC/INFO - Datensätzen wie Coverages und Grids, als auch Shapethemen. Ein Shapethema ist ein ArcView-eigenes Datenformat für raumbezogene Daten. 7 Die Geodaten müssen im die Auswahl Fall im Shapeformat vorliegen, um mit ihnen problemlos in ArcView arbeiten zu können. In dem Projekt zur Umsetzung der Einschränkungsinformationen auf ein digitales Straßennetz liegen sowohl die Objekte mit den Einschränkungsinformationen als auch das digitale Straßennetz als Shapedatei vor. 3.5.3.3. Konzept Es sollen Themen aus NavTech und Rascon als Shapes in ArcView eingelesen werden. Die Rasconshapes wurden bereits georeferenziert und besitzen Attributtabellen. Durch die Auswahl von zueinandergehörigen Objekten im jeweiligen Thema, sollen automatisch Objekt-Ids, Anfangsund Endkoordinaten der NavTech-Segmente, sowie der Infotext, der den Objekten in Rascon manuell zugeordnet wurde, der Rascon-Objekte in einer Textdatei gespeichert werden. Das Konzept zur Verknüpfung der Einschränkungsinformationen mit dem digitalen Straßennetz gliedert sich in folgende Teilschritte: Schritt 1 Im ersten Schritt muss der Bearbeiter seinen Namen angeben, der dann als globale Variable für die Dauer der Session gespeichert bleibt und bei jedem Schreiben der Textdatei mitgeschrieben wird. Schritt 2 Als nächstes wird ein Skript benötigt, in welchem die Ids und der Infotext der Rasconobjekte aus der jeweiligen Attributzeile an eine externe Datei 7 LIEBIG, Wolfgang (2001): Desktop-GIS mit ArcView GIS: Leitfaden für Anwender. Seite 79 29 Dokumentation übergeben, beziehungsweise erst einmal als globale Variablen gespeichert werden, wenn auf ein bestimmtes Objekt geklickt wird. Das Skript merkt sich hier den Wert der Attribute. Schritt 2.1 Die in Schritt 2 geöffneten Attributtabellen müssen geschlossen werden und nicht im Hintergrund geöffnet bleiben. Schritt 3 Es soll überprüft werden, ob das markierte Objekt Richtungsinformationen in der Attributtabelle enthält. Richtungsinformationen sind für die spätere Routinganwendung unverzichtbar. Sind Informationen enthalten, soll geprüft werden, in welche Richtung das Segment „zeigt“. Schritt 3.1 Enthält das Richtungsfeld in der Attributtabelle die Information „T“, so wird ein weiteres Skript aufgerufen, das die Besonderheit dieser Richtung (entgegen der Fahrtrichtung) berücksichtigt und die Anfangs- und Endkoordinaten des NavTech-Segmentes in umgekehrter Reihenfolge aufnimmt und in Variablen speichert. Schritt 3.2 Enthält das Richtungsfeld in der Attributtabelle die Information „B“ (Richtung beidseitig) oder „F“ (Richtung einseitig, jedoch mit der Fahrtrichtung), so wird ein Skript aufgerufen, das die Anfangs- und Endkoordinaten aufnimmt und in Variablen speichert. 30 Dokumentation Schritt4 Möchte man nun die Koordinaten eines Segmentes überprüfen, die Richtung markieren oder die Koordinaten umkehren, so braucht man ein Skript, das zuerst die bisherigen Koordinaten anzeigt. Dadurch kann man überprüfen, ob die Digitalisierungsrichtung korrekt ist oder ob man sie ändern muss. Schritt 5 Die IDs aus Rascon und NavTech, die Anfangs- und Endkoordinaten des NavTech-Segments, der Infotext, wahlweise die Richtungsinformation und der Name des Bearbeiters müssen nun in dieser Reihenfolge in eine externe Textdatei geschrieben werden. 3.5.3.4. Umsetzung Im Folgenden wird die Umsetzung der Ideen inklusive Auszügen aus den Quelltexten dargestellt. Die vollständigen Quelltexte sind im Anhang zu finden. Schritt 1 Für den beim ersten Bearbeiten des Projektes aufzurufenden Dialoges wurde das Skript „Username“ erstellt. Skriptablauf: Das Skript wird durch den Menüeintrag „Bearbeitername“, den Shortcut strg+n, das Skript „id_uebergabe“ oder den Button aufgerufen. Es wird ein Eingabefenster geöffnet, in welches der Bearbeiter seinen Namen eingeben muss. Wird dies nicht getan, so erscheint das Eingabefenster so lange, bis eine Eingabe erfolgte. Damit der Benutzername bei jeder Bearbeitung in ArcView eingegeben wird, wurde in das Skript „id_uebergabe“ eine Sicherung eingebaut, die prüft, ob die globale Variable „_Name“ bereits einen Wert enthält oder 31 Dokumentation nicht. Ist diese Variable nicht belegt, so erscheint auch dann das Eingabefenster mit der Aufforderung. Skriptauszug: ' Öffnen eines Eingabefensters _Name = MsgBox.Input("Bitte geben Sie Ihren Benutzernamen hier ein.","Eingabe","") ' so lange in das Textfeld des Eingabefensters nichts eingegeben ' wird, erscheint das Errorfenster while (_Name = NIL) MsgBox.Error("Bitte geben Sie Ihren Namen ein!","Eingabe") _Name = MsgBox.Input("Bitte geben Sie Ihren Benutzernamen hier ein.","Eingabe","Ihr Name") end Schritt 2 Es wurde das Skript „id_uebergabe“ erstellt, das sich, nachdem ein Objekt im Thema angeklickt wurde, den Inhalt eines bestimmten Feldes im markierten Datensatz temporär sichert. Bei diesem Beispiel ist es entweder das Feld „Object_ID“ in den Rascon-Shapes oder das Feld „Link_ID“ aus den NavTech-Shapes. Der Inhalt des Feldes wird einer globalen Variablen zugewiesen, die später in einem anderen Skript wieder aufgerufen wird. Das Skript wird über den Shortcut strg+a, den „Id-Klick“- Menüeintrag „IDÜbergabe“ oder diesen Button aufgerufen. 32 Dokumentation Skriptablauf: Es wird überprüft, ob die Variable „_Name“ bereits einen Wert beinhaltet. Wenn nicht, wird das Skript „Username“ ausgeführt. Dadurch wird sichergestellt, dass immer ein Benutzername angegeben ist. Anschließend wird eine Themenliste generiert, aus der der Bearbeiter das Thema auswählen muss, welches im Moment bearbeitet werden soll. Dieses wird dann aktiviert. Die Tabelle des aktiven Themas wird zum editieren geöffnet. Anschließend wird die virtuelle Tabelle (Vtab) des Themas aufgerufen und nach den Feldern „Object_ID“(Rascon-Daten) oder „Link_ID“ (NavTech-Daten), sowie „Infotext“ gesucht, und schließlich der Inhalt des selektierten Datensatzes einer globalen Variablen zugewiesen. Skriptauszug: '---------------------------------------------------------------' Es wird die Virtuelle Tabelle (VTab) des aktiven Dokumentes ' aufgerufen, also die VTab der Attributtabelle. Felder ' werden gesucht. Die Werte, die in den Feldern stehen, ' werden in globalen Variablen gespeichert. '---------------------------------------------------------------- myVTab = av.GetActiveDoc.GetVTab Feld1 = myVTab.FindField("DB_id") Feld2 = myVTab.FindField("Link_id") Feld3 = myVTab.FindField("dir_travel") Feld4 = myVTab.FindField("Infotext") if (Feld1 = NIL) then 'MsgBox.Info("keine DB-ID","DB-ID") else _DBID = myVTab.ReturnValueString(Feld1,myVTab.GetSelection. GetNextSet(-1)) MsgBox.Info(_DBID,"DB_id") if (Feld4 = NIL) then MsgBox.Info("Das Feld ist leer!","Leer") 33 Dokumentation else _Infotext = myVTab.ReturnValueString(Feld4,myVTab. GetSelection.GetNextSet(-1)) 'msgbox.info(_Infotext,"Infotext") end for each t in myVView t.ClearSelection end end Als nächstes muss das Richtungsfeld in der Attributtabelle des StreetsThemas überprüft werden. Das Thema „streets.shp“ wird gesucht und aktiviert. Anschließend wird überprüft, ob das Feld „dir_travel“ existiert. Wurde es gefunden, wird der Wert des Feldes in einer globalen Variablen gespeichert. Anschließend wird geprüft, welcher Wert im Feld steht. Bei dem Wert „T“ wird das Skript „KoordinatenT“, bei den Werten „B“ und „F“ das Skript „KoordinatenFB“ ausgeführt. Skriptauszug: Streetsthema = Themenliste.FindTheme("streets.shp") Streetsthema.setactive(TRUE) if (Feld3 = NIL) then MsgBox.Info("Das Richtungsfeld ist leer!","Leer") else Richtung = myVTab.ReturnValueString(Feld3, myVTab. GetSelection.GetNextSet(-1)) if (Richtung = "T") then av.run("KoordinatenT",NIL) _Richtung = (";dir1") elseif (Richtung = "B") then av.run("KoordinatenFB",NIL) _Richtung =("") elseif (Richtung = "F") then av.run("KoordinatenFB",NIL) 34 Dokumentation _Richtung = (";dir1") elseif (Richtung = NIL) then MsgBox.Info(Richtung,"Richtung") end end Schritt 2.1 Die in Schritt 2 geöffneten Tabellen werden noch innerhalb des Skriptes „ID_uebergabe“ durch Aufruf des Skriptes „tableclose“ geschlossen. Skriptauszug aus „tableclose“: '--------------------------------------------------------------' Jede mögliche offene Tabelle wird namentlich im Projekt gesucht ' und anschließend geschlossen. '--------------------------------------------------------------- Tabelle = av.GetProject Tabellen = Tabelle.finddoc("Attribute von Linien.shp") Tabellen2 = Tabelle.finddoc("Attribute von Majhwys.shp") Tabellen3 = Tabelle.finddoc("Attribute von Sechwys.shp") Tabellen4 = Tabelle.finddoc("Attribute von Symbole.shp") Tabellen5 = Tabelle.finddoc("Attribute von Streets.shp") if (Tabellen = NIL) then else Tabellen.getwin.close end if (Tabellen2 = NIL) then else Tabellen2.getwin.close end Schritt 3 Die Überprüfung nach Richtungsinformationen erfolgt bereits in Schritt 2 im Skript „id_uebergabe“. 35 Dokumentation Schritt 3.1 Im Falle einer Richtungsinformation mit dem Wert „T“ wird in „id_uebergabe“ das Skript „KoordinatenT“ aufgerufen. Skriptauszug aus „KoordinatenT“: '---------------------------------------------------------------' Der Wert, der im Feld "Shape" steht, wird zurückgegeben. '---------------------------------------------------------------- theShapeField = theFTab.FindField("Shape") val = theFTab.ReturnValue(theShapeField, theFTab.GetSelection. GetNextSet(-1)) '---------------------------------------------------------------' Gibt einen Punkt zurück, der bei den angegebenen Prozent auf der ' Polylinie liegt. Der Anfangspunkt liegt also bei 100 Prozent, ' der Endpunkt bei Null Prozent. Dies wurde vertauscht, da die ' Information zur Richtung „Entgegen der Fahrtrichtung“ lautet. '---------------------------------------------------------------- startp = val.Along(100) endp = val.Along(0) '---------------------------------------------------------------' Jetzt müssen die globalen Variablen definiert werden, ' die im späteren Verlauf der Verknüpfung wieder gebraucht werden. '---------------------------------------------------------------- _startx = startp.GetX _starty = startp.GetY _endx = endp.GetX _endy = endp.GetY '---------------------------------------------------------------' Kurzer Check, ob auch wirklich die richtigen Koordinaten ' aufgenommen wurden. Hierfür werden die soeben erzeugten 36 Dokumentation ' Koordinaten in einer Messagebox ausgegeben. '---------------------------------------------------------------- Liste = {_startx,_starty,_endx,_endy} MsgBox.ListAsString(Liste,"Das sind die Koordinaten", "Koordinaten") Schritt 3.2 Im Falle einer Richtungsinformation mit den Werten „B“ oder „F“, wird in „id_uebergabe“ das Skript „KoordinatenFB“ aufgerufen. Skriptablauf: Das Skript „KoordinatenFB“ läuft im Grunde genau wie das Skript „KoordinatenT“ ab, jedoch mit einem Unterschied: der Anfangspunkt liegt hier bei Null Prozent der Polylinie, und nicht wie im Skript „KoordinatenT“ bei 100 Prozent. Dies liegt an der Tatsache, dass die Richtungsinformation „F“ in eine Richtung, jedoch mit der Fahrtrichtung zeigt. Der Eintrag „B“ steht für eine beidseitige Richtungsinformation – daher ist es bei dieser Information egal, in welche Richtung die Koordinaten zeigen. Skriptauszug: '---------------------------------------------------------------' Gibt einen Punkt zurück, der bei den angegebenen Prozent auf der ' Polylinie liegt. Der Anfangspunkt liegt also bei Null Prozent, ' der Endpunkt bei 100 Prozent. '---------------------------------------------------------------- startp = val.Along(0) endp = val.Along(100) Schritt 4 Um die erzeugten Koordinaten überprüfen und bei Bedarf umdrehen zu können, müssen diese in einem Fenster angezeigt werden. Außerdem 37 Dokumentation besteht die Möglichkeit, die Koordinatenrichtung beizubehalten und der Textdatei lediglich eine Richtungsinformation zu übergeben. Skriptauszug: '----------------------------------------------------------------' Die Infobox mit den Koordinaten wird erzeugt. Hierfür müssen die ' Koordinaten in einer Liste gespeichert werden, damit sie unter' einander angezeigt werden könne. '----------------------------------------------------------------- Anfangskoord = _startx.AsString ++ _starty.AsString Endkoord = _endx.AsString ++ _endy.AsString aeList = {Anfangskoord,Endkoord} myString = "" For each i in aeList myString = myString + NL + i.AsString myString.BasicTrim(NL,"") End MsgBox.Info(myString,"Koordinaten") '----------------------------------------------------------------' Es wird eine Auswahlliste erstellt. Man kann auswählen, ob man ' die Richtung beibehalten oder umkehren möchte. In beiden Fällen ' wird der Variablen _Richtung ein Wert zugewiesen. Möchte man der ' Variablen jedoch keinen Wert zuweisen und einfach abbrechen, so ' klickt man einfach auf „abbrechen“. '----------------------------------------------------------------- AuswahlListe = {"Richtung beibehalten", "Richtung umkehren"} Auswahl = MsgBox.ListasString(AuswahlListe,"Bitte auswählen", "Auswahl") if (Auswahl = NIL) then Msgbox.info("Der Vorgang wurde abgebrochen","Abbruch") elseif (Auswahl = "Richtung beibehalten") then _Richtung = (";dir1") elseif (Auswahl = "Richtung umkehren") then 38 Dokumentation _Richtung = (";dir1") startx = _startx starty = _starty endx = _endx endy = _endy '---------------------------------------------------------------' Hier werden die Koordinaten umgekehrt. _startx wird zu endx und ' _endx zu startx. Schließlich wird wieder eine Liste generiert, ' die anschließend in einer Infobox zur Überprüfung ausgegeben ' wird. '---------------------------------------------------------------_startx = endx _starty = endy _endx = startx _endy = starty Anfangskoord = _startx.AsString ++ _starty.AsString Endkoord = _endx.AsString ++ _endy.AsString aeList = {Anfangskoord,Endkoord} myString = "" For each i in aeList myString = myString + NL + i.AsString myString.BasicTrim(NL,"") End MsgBox.Info(myString,"Koordinaten") end Schritt 5 Um nun die IDs aus Rascon und NavTech, die AnfangsEndkoordinaten der NavTech-Segmente, den Infotext, und die Richtungsinformation und den Namen des Bearbeiters extern zu speichern, wurde das Skript „Writetxt“ erstellt. 39 Dokumentation Skriptauszug: '----------------------------------------------------------------' Die globalen Variablen, die in den vorherigen Skripten definiert ' wurden, werden normalen Variablen zugewiesen. Anschließend ' wird eine neue Datei angelegt. '----------------------------------------------------------------- DBID = _DBID LinkID = _LinkID startx = _startx.asString starty = _starty.asString endx = _endx.asString endy = _endy.asString Infotxt = _Infotext Richtung = _Richtung name = ("n"+_Name) newfile=Filename.Make("C:\IDdata.txt") newfileexists=File.Exists(newfile) MsgBox.info(newfileexists.asString,"Die Datei besteht bereits.") '----------------------------------------------------------------' Existiert die Datei noch nicht, so wird sie neu angelegt und ' virtuell geöffnet. Existiert sie bereits, wird der Cursor an ' das Ende der Datei gestellt und alles, das hineingeschrieben ' werden soll, wird hinten angefügt. '----------------------------------------------------------------if (newfileexists = false) then lf = LineFile.Make(newfile, #FILE_PERM_WRITE ) lf.WriteElt(DBID+";"+LinkID+";"+startx+";"+starty+";" +endx+";"+endy+";"+Infotxt+Richtung+";"+name) lf.Close else lf = LineFile.Make(newfile,#FILE_PERM_MODIFY) lf.gotoend lf.WriteElt(DBID+";"+LinkID+";"+startx+";"+starty+";" +endx+";"+endy+";"+Infotxt+Richtung+";"+name) lf.close end 40 Dokumentation 3.5.3.5. Ablaufschema ArcView Import der Rascon- Shapes in ArcView Import der ArcView NavTech- Shapes in Rascon-Shapes für Linien (gesperrte Strecken) und Symbole (Brücken, Unterführungen). Relevante Informationen in der DBF: - Infotext (Bsp. Uh3.5) - Datenbank- ID NavTech-Shape mit Straßen und Straßeninformationen für Deutschland. Relevante Informationen in der DBF: - Shape (Polyline) - Link- ID - Direction of Travel Wiederholung bei linienhaften Objekten so lange, bis das Rascon-Objekt vollständig „abgedeckt“ ist. Erfassung eines Rascon- Objektes aus dem jeweils richtigen Shape (Linie oder Symbol) und gleichzeitiges Extrahieren der relevanten Informationen aus der DBF (Infotext und DB-ID). Erfassung des lagerichtig zum Rascon- Objekt passenden NavTech- Segmentes aus dem NavTech- Shape und gleichzeitiges Extrahieren der relevanten Informationen aus der DBF (Shape, Link-ID und und Dir -Travel). Die Anfangs- und Endkoordinaten des NavTechSegmentes werden automatisch in vier Variablen temporär abgespeichert. Schreiben aller Variablen (DB-ID, Link-ID, Koordinaten Anfangs- und Endpunkt, Infotext und Richtungsinformation) in eine externe Textdatei. Abbildung 3: Ablaufschema der Arbeit in ArcView 41 Dokumentation 3.5.4. Microsoft Access Was ist MS 8 Access? 3.5.4.1. Microsoft Access (MS Access) ist ein Datenbankprogramm. Mit ihm können Daten erstellt, bearbeitet, analysiert und berechnet, jedoch auch Datenbankanwendungen erstellt werden. Es bildet zusammen mit Microsoft Word und Microsoft Excel einen Teil des „Microsoft Office“-Paketes. „MS Access speichert die Daten in ein so genanntes mdb-Dateiformat ab, wobei sowohl Elemente der Oberfläche als auch die Datenbanktabellen in einer monolithischen Datei landen. Es ist allerdings möglich, die Tabellendefinitionen und den Datenbestand sowie die Oberfläche in zwei verschiedenen Dateien zu halten. Diese geschieht durch eine Funktion, die Tabellen verknüpft. Datenbanksystemen Im Gegensatz unterstützt zu MS früheren Access PC-basierenden das Relationale Datenbankmodell. Um extern auf Access-Datenbanken zuzugreifen, eignet sich am besten die ebenfalls von Microsoft entwickelte ODBC- Anwendungsprogrammierschnittstelle.“9 Wie ArcView, kann auch Access mit eigenen Skripten modifiziert werden, beziehungsweise mit Skripten auf Datenbanken zugreifen und automatisiert ausführen lassen. Dies geschieht Befehle mit der Programmiersprache Visual Basic for Applications. 3.5.4.2. Was sind Abfragen Datenbankabfragen in MS Access sind SQL10-Queries, mit welchen Daten aufbereitet, aktualisiert, gefiltert oder gelöscht werden können. Der Aufbau einer Abfrage ähnelt dem eines einfachen SQL-Queries. Durch Abfragen aus Access werden die Tabellen der Datensätze des Projektes bei der Aktualisierung bearbeitet. 42 Dokumentation 3.5.4.3. Was sind Module Access Module sind Skripte, mit denen Daten manipuliert werden können. Sie werden mit Hilfe der Programmiersprache Visual Basic for Applications (VBA) erstellt. „VBA (Visual Basic for Application) ist eine eigenständige, objektorientierte Programmiersprache für die MS Office-Anwendungen. Sie dient der Erweiterung des Funktionsumfangs der MS-Office-Produkte und ist in diese integriert.“11 Zu Beginn ihrer Entwicklung gab es für die einzelnen Office-Anwendungen eigene und unterschiedliche „Makro-Sprachen“. Für eine einfachere Programmierung und Handhabung in Office wurde eine gemeinsame Programmiersprache gesucht und entwickelt – es entstand Visual Basic for Applications. Mit Hilfe dieser Module werden die Datensätze des Projektes anschließend in Access importiert. 3.5.4.4. Konzept Die Werte, die in ArcView in die externe Textdatei geschrieben wurden, müssen nun an Access übergeben und jeder Wert für sich in eine bestimmte Spalten eingelesen werden. Dies geschieht in Acces mit Hilfe eines Visual Basic Skriptes, das die Textdatei Zeile für Zeile einliest und anschließend die wichtigen Informationen herausfiltert. 3.5.4.5. Umsetzung Mit der Unterstützung von Herrn Markus Schorb wurde ein VBA -Skript erstellt. Der grobe Ablauf wird hier mit Hilfe von Skriptauszügen dokumentiert. Das gesamte Skript ist ebenfalls im Anhang einsehbar. 8 Microsoft http://www.net-lexikon.de/Microsoft-Access.html 10 Structured Query Language 11 http://www.rrzn.uni-hannover.de/Dokumentation/Handbuecher/VBA.html 9 43 Dokumentation Zuerst muss die Textdatei Zeile für Zeile in Access eingelesen werden. ' Ab diesem Punkt wird das Einlesen der Datei festgelegt. zaehler = 0 'Bis zum Dateiende soll zeilenweise eingelesen werden. Do While Not EOF(1) ReDim Preserve alleZeilen(zaehler) Line Input #1, eineZeile alleZeilen(zaehler) = eineZeile zaehler = zaehler + 1 Loop Anschließend müssen die Werte jeder Zeile voneinander getrennt werden, da diese direkt aneinander hängen und nur durch Semikola getrennt sind. Zuerst werden die IDs, sowie Anfangs- und Endpunkte aus der Zeile gezogen. Dies ist einfach, da die ersten Sechs Einträge der Textdatei immer die gleichen sind. 'Aufsplittung des String-Arrays For i = 0 To DSMax eineZeile = alleZeilen(i) 'Zerlegen der Zeile an den Semikola Set eineZeileAlsCollection = tokenize(eineZeile, ";") 'Die abgetrennten Daten werden in die Tabelle importiert With rsTabelle .AddNew !RasconID = eineZeileAlsCollection.Item(1) !NetzID = eineZeileAlsCollection.Item(2) !StartpunktLamda = Val(eineZeileAlsCollection.Item(3)) !StartpunktPhi = Val(eineZeileAlsCollection.Item(4)) 44 Dokumentation !EndpunktLamda = Val(eineZeileAlsCollection.Item(5)) !EndpunktPhi = Val(eineZeileAlsCollection.Item(6)) Der nächste Abschnitt ist aufwändiger. Dort werden die Informationen zu Einschränkungen aus dem Eintrag ermittelt, müssen jedoch je nach Wert in eine eigene Spalte geschrieben werden. Hierfür werden zuerst alle Einträge mit nur einem Buchstaben überprüft. Wurde ein Eintrag gefunden, wird der Wert einer Spalte zugewiesen, hineingeschrieben und das Skript springt zum nächsten Eintrag in der Textzeile. Wurde jedoch kein Eintrag gefunden, so werden die Einträge mit zwei Buchstaben überprüft. Wurde ein passender Wert festgestellt, so wird wie bei einem Buchstaben verfahren. Ansonsten springt das Skript auf die Überprüfung der Einträge mit drei Buchstaben. Dieser Ablauf wiederholt sich bis zu Einträgen mit vier Buchstaben bzw. vier Werten. Skriptauszug: ' Hier beginnt die Überprüfung der Zeile nach Inhalten mit nur ' einem Zeichen. For j = 5 To eineZeileAlsCollection.Count einEintrag = trim(eineZeileAlsCollection(j)) attributKennung = Left(einEintrag, 1) Select Case attributKennung Case "s" !Schneekette = True GoTo Skip Case "r" If Len(einEintrag) = 1 Then !Raststaette = True GoTo Skip End If End Select ' Hier beginnt die Überprüfung der Zeile nach Inhalten mit zwei ' Zeichen. 45 Dokumentation attributKennung = Left(einEintrag, 2) Select Case attributKennung Case "bt" attributInhalt = Right(einEintrag, (Len(einEintrag) - 2)) !BrueckeTrag = Val(attributInhalt) GoTo Skip Case "bs" attributInhalt = Right(einEintrag, (Len(einEintrag) - 2)) !BrueckeSchrammbord = Val(attributInhalt) GoTo Skip End Select 46 Dokumentation 3.5.5. Attributierung in Rascon, Verknüpfung in ArcView - Zeitaspekt Das Attributieren der Objekte in Rascon sowie die Verknüpfung der Objekte mit den Segmenten in Arcview wurde zu Beginn prototypisch für die Seiten 168 und 169 des TruckerAtlasses von Falk durchgeführt. Hier eine kurze Auswertung der bearbeiteten Objekte. Insgesamt 528 Rascon-Objekte 1991 NavTech-Segmente ø 3,7 NavTech-Segmente/Rascon-Objekt Themen: Gewichtsbeschränkung Brücken 24 Rascon-Objekte 25 NavTech-Segmente ø 1,04 NavTech-Segmente/Rascon-Objekt Durchfahrtshöhenbeschränkung Brücken 202 Rascon-Objekte 246 NavTech-Segmente ø 1,2 NavTech-Segmente/Rascon-Objekt Gefällestrecken (rot+grün) 234 Rascon-Objekte (219 grün, 15 rot) 986 NavTech-Segmente ø 4,2 NavTech-Segmente/Rascon-Objekt 47 Dokumentation kennzeichnungspflichtige Güter 25 Rascon-Objekte 379 NavTech-Segmente ø 15,2 NavTech-Segmente/Rascon-Objekt wassergefährdende Güter 13 Rascon-Objekte 136 NavTech-Segmente ø 10,5 NavTech-Segmente/Rascon-Objekt gesperrt für KFZ aller Art 0 Rascon-Objekte 0 NavTech-Segmente ø 0 NavTech-Segmente/Rascon-Objekt gesperrt für KFZ mehrsprurig 0 Rascon-Objekte 0 NavTech-Segmente ø 0 NavTech-Segmente/Rascon-Objekt gesperrt für KFZ > 3,5t 20 Rascon-Objekte 319 NavTech-Segmente ø 16 NavTech-Segmente/Rascon-Objekt gesperrt für KFZ über tatsächlich angegebenem Gewicht 48 Dokumentation 4 Rascon-Objekte 94 NavTech-Segmente ø 23,5 NavTech-Segmente/Rascon-Objekt gesperrt für KFZ über tatsächlich angegebener Achslast 0 Rascon-Objekte 0 NavTech-Segmente ø 0 NavTech-Segmente/Rascon-Objekt Anhand dieser Auswertung kann man erkennen, dass im Schnitt ein Rascon-Objekt mit ca. 3,7 NavTech-Segmenten verknüpft wird. Die Verknüpfung von Objekten, die die Sperrung „gesperrt für KFZ über tatsächlich angegebenem Gewicht“ innehaben, mit den Segmenten ist besonders aufwändig, da pro Objekt ca. 23,5 NavTechSegmente zu verknüpfen sind. Um den Zeitfaktor der gesamten Verknüpfung in etwa schätzen zu können, muss man grundsätzlich folgendes beachten: Während den Verknüpfungen müssen des Öfteren Pausen zur Orientierung in der Karte eingelegt werden. Vor allem in Ballungsgebieten ist es sehr schwer, sich nur anhand von NavTech-Linien zu orientieren. Bei längeren, linienhaften Objekten muss man vor der Verknüpfung zusätzlich den Verlauf der Objekte auf den NavTech-Daten verfolgen um eventuelle Verwechslungen der Straßen zu vermeiden. Punktsymbole (Brücken, Unterführungen, punkthafte Gefällestrecken) - 2 Minuten pro Objekt Linienhafte Symbole (Gefällestrecken, Sperrstrecken) - einfache linienhafte Symbole mit ca. 6 Segmenten ? ca. 2min 30sek 49 Dokumentation - einfache linienhafte Symbole mit ca. 13 Segmenten ? - ca. 4 Minuten zweispurige linienhafte Symbole ? je nach Länge mindestens die doppelte Zeit der einfachen Symbolen, also für lange Symbole ca. 8 Minuten Nach der Bearbeitung der prototypischen Daten musste das gesamte Gebiet der Bundesrepublik Deutschland verknüpft werden. Das ergab im Endergebnis über 40.000 Datensätze bei geschätzten 16.000 Rascon-Objekten. Wird diese enorme Anzahl an Objekten mit knappen drei Minuten pro Objekt berechnet, ergibt sich somit eine reine Bearbeitungszeit von 800 Stunden oder 20 Arbeitswochen á 40 Stunden. Tatsächlich wurde die Verknüpfung innerhalb von fünf Wochen von zwei Personen durchgeführt. Diese schnelle Bearbeitung der Daten kann darauf zurückgeführt werden, dass sich die Orientierung im digitalen Straßennetz mit der Zeit verbesserte und in den Arbeitsablauf mehr Routine einkehrte. 50 Konzept zur Datenaktualisierung 4. Konzept zur Datenaktualisierung 4.1. Allgemeines Alle Rascon- Daten werden immer in Oracle gespeichert. Eine eindeutige Objekt- Id ist vorhanden. Die DBF- Dateien der Rascon- Daten enthalten stets die Geokoordinaten der Objekte. Die aus den Rascon-Daten erzeugten Shapes sind in Einzel-Shapes für Linien, Punkte, Flächen und Texte gesplittet. Eine Aktualisierung der Daten erfolgt je nach Bedarf, jedoch frühestens nach 12 Monaten. Die NavTech- Daten hingegen werden quartalsweise in Form von Shapes aktualisiert geliefert. Auch hier ist pro Segment je eine eindeutige ID vorhanden, jedoch sind die Vergabekriterien nicht bekannt. Eventuell muss bei der Aktualisierung auf die in der „IdData“- Datenbank vorhandenen Anfangs- und Endkoordinaten der Segmente zurückgegriffen werden. 4.2. Benötigte Daten zur Aktualisierung A ) Rascon-Thema komplett als Shape- Datei bzw. DBF B) Rascon-Thema nur veränderte bzw. neue Objekte als Shape-Datei bzw. DBF C) NavTech-Daten als Shape-Datei bzw. DBF, d.h. streets.shp und streets.dbf D) Vorjahres Datenbank in Access, d.h. die importierte IdData.txt E) Vorjahres- NavTech-Daten, d.h. streets.shp 51 Konzept zur Datenaktualisierung 4.3. Aktualisierung der Rascon- Daten Bei der Aktualisierung der Rascondaten gibt es drei unterschiedliche Korrekturfälle, auf welche näher eingegangen werden muss: (1) ein Objekt wurde gelöscht (2) ein Objekt wurde hinzugefügt (3) ein Objekt wurde verändert Der Lösungsweg für die Aktualisierung der Rascondaten ist aufwändig. Bei jeder Attributänderung eines Objektes in Rascon muss neben der grafischen Korrektur in den Rascon-Daten die Information zusätzlich im Textfeld des Rascon-Objekts (zum Beispiel einer Brücke) Brückensignatur in eingetragen Rascon werden erhält die (Beispiel: textliche Das Textfeld Information über einer die Gewichtsbeschränkung). Diese manuelle Änderung ist als Erweiterung des PrintEndprodukts unumgänglich. Allgemeingültiger erster Aktualisierungsschritt: Die in Rascon aktualisierten Objekte können anhand des MapServer-Zeitstempels aus dem Gesamtdatenbestand extrahiert werden. Nach dem Extrahieren müssen diese Datensätze in Access importiert werden, um mit der bereits vorhandenen IdData- Datenbank (D) verglichen zu werden. Hierbei werden die in beiden Tabellen vorhandenen eindeutigen IDs einander gegenübergestellt. Zusätzlich zum Import in Access müssen diese neuen Objekte als Shape exportiert und in ArcView geladen werden. 4.3.1. Ein Objekt wurde gelöscht Es existieren Daten in der IdData- Tabelle, die nicht mehr in der Rascon- Tabelle vorhanden sind. Diese sollen aus der IdData gelöscht werden. 52 Konzept zur Datenaktualisierung Lösungsansatz per SQL in Access: 1.Abfrage: SELECT * FROM alteIdData WHERE (((alteIdData.RasconID) Not In (Select RasconID from neueRascon))); Mit der ersten Abfrage werden alle Spalten aus der alten IdData- Tabelle ausgewählt, deren RasconIDs nicht in der neuen Tabelle vorhanden sind. Der Name der Abfrage lautet „Rascon_1“. 2.Abfrage: DELETE Rascon_1.* FROM Rascon_1; In der zweiten Abfrage werden die Ergebnisse der ersten Abfrage unwiderruflich in der alten IdData gelöscht. 4.3.2. Ein Objekt wurde hinzugefügt 4.3.2.1. Lösungsmöglichkeit 1 Wird festgestellt, dass Daten in der Rascon- Tabelle, jedoch noch nicht in der IdData (D) vorhanden sind, so werden diese Datensätze entweder in einer neuen Tabelle gespeichert oder nur markiert. Lösungsansatz per SQL in Access: 1.Abfrage: SELECT * FROM neueRascon WHERE (((neueRascon.RasconID) Not In (Select RasconID from alteIdData))); 53 Konzept zur Datenaktualisierung Mit dieser Abfrage werden, genau umgekehrt wie in 4.3.1, alle Spalten aus der Rascon-Tabelle ausgewählt, deren RasconIDs nicht in der alten Tabelle vorhanden sind, und somit neu dazugekommen sein müssen. Die markierten Datensätze bzw. die Datensätze in der Abfragetabelle werden per ODBC– Verbindung in ArcView importiert und mit der Rasconobjekte– Shape (A) verbunden. Die übereinstimmenden Datensätze werden markiert und zu einem neuen Shape umgewandelt. Nun kann man alle Rasconobjekte, die ganz neu dazugekommen sind, graphisch differenziert darstellen und sie dadurch schneller erkennen. ArcView Herstellen einer SQL-Verbindung zu Access und Übertragung der Abfragetabelle mit den ganz neuen NavTech-Elementen. Exportieren und speichern der neuen Tabelle in AV. Verbinden der neuen Tabelle mit der Attributtabelle der kompletten Rascondaten (A) Auswahl der hinzugefügten Daten und Erstellung eines Shapes mit dieser Auswahl. Abbildung 4: Ablaufschema für die Aktualisierung mit ganz neuen NavTech- Elementen Diese Objekte müssen nun von Hand mit NavTech-Segmenten verknüpft werden. 54 Konzept zur Datenaktualisierung Die Ergebnisse werden als neue IdData.txt erfasst und in die Vorjahres-AccessDatenbank eingelesen. Es folgt eine Anleitung zur Verknüpfung in ArcView. Anleitung zur Verknüpfung in ArcView Grundsätzliches: Die obersten Themen im View müssen immer Symbole.shp, Linien.shp und Streets.shp sein. Symbole.shp und Linien.shp bleiben auch beim Wechsel in ein anderes NaVTech-Netz im View, lediglich die Themen Streets.shp (Arbeitsshape!), Majhwys.shp, Sechwys.shp und Railrds.shp werden je nach Notwendigkeit ausgetauscht. Dringend zu beachten ist hierbei, dass die Verknüpfung der Rascon- mit den NavTech-Daten immer mit den Straßendaten aus der Streets.shp durchgeführt wird. Die Textdatei, in der sämtliche Informationen gespeichert werden, wird stets unter C:/IdData.txt gesichert. 1. Bei jedem neuen öffnen des Projektes, muss zuerst der Name des Bearbeiters eingegeben werden. Um den Namen eingeben zu können, benutzt man entweder die Tastenkombination strg+n oder diesen Button: 2. Sowohl das Werkzeug „Objekt auswählen“ aus der Werkzeugleiste als auch das RasconThema, mit welchem man beginnen möchte, müssen aktiviert sein. 3. Jetzt kann das zu verknüpfende Objekt aus entweder Symbole.shp oder Linien.shp markiert werden. Tastenkombination strg+a oder diesen Button: 4. Daraufhin erscheint eine Liste, aus der man das richtige Thema, passend zum aktivierten Objekt, auswählen muss. Hat man Schritt 3 korrekt ausgeführt, markiert man jetzt im NavTech- Thema (hier: immer streets.shp!), das bereits 55 Konzept zur Datenaktualisierung automatisch aktiviert wurde, das zum Rascon- Objekt passende NavTech- Segment und benutzt anschließend den Shortcut strg+a oder klickt auf: Auch hier erscheint eine Liste, aus der man jedoch immer streets.shp auswählen muss. 5. Nun müssen die Informationen im Normalfall nur noch in die Textdatei geschrieben werden. Dies geschieht mit dem Shortcut strg+w oder diesem Button: 56 Konzept zur Datenaktualisierung ArcView Bei jedem Projektstart: strg+n oder Das „Auswahl“- Werkzeug und das gewünschte RasconThema müssen aktiviert sein. Markierung des Rasconobjektes. Anschließend strg+a oder Bei linienhaften Objekten Wiederholung des Vorgangs. Thema des markierten Objektes aus der Liste auswählen. Markierung des passenden Segmentes in der streets.shp. Anschließend strg+a oder Auswahl von streets.shp aus der Liste. Schreiben der Informationen in eine Textdatei mit strg+w oder Abbildung 5: Anleitung zur Verknüpfung in ArcView 57 Konzept zur Datenaktualisierung 4.3.2.2. Lösungsmöglichkeit 2 Um sich den Umweg über Access zu ersparen, gibt es noch eine weitere Lösungsmöglichkeit. Alle veränderten Rasconobjekte, das heißt alle Objekte mit geänderten Attributen oder neue Objekte, werden aus dem Gesamtdatensatz der aktualisierten Trucker-Daten extrahiert und als separate Shape-Datei abgespeichert. Danach erfolgt in ArcView die Verknüpfung wie bei der Ersterfassung. 4.3.3. Ein Objekt wurde verändert Wurden für die aktualisiert Rasconobjekte neue Attribute vergeben, muss die alte IdData werden. Hierbei wird nicht der allgemeingültige erste Aktualisierungsschritt genutzt, die neuen Daten werden mit Hilfe eines Visual BasicSkriptes in A ccess bearbeitet. Das Skript importiert die neue Datei und überprüft, ob es RasconIDs in der IdData gibt, die auch in der neuen Datei vorhanden sind. Existieren solche doppelten Einträge, so werden die in der IdData gelöscht. Die restlichen Daten werden an die Tabelle angehängt. 4.4. Aktualisierung der NavTech- Daten Die NavTech- Daten werden quartalsweise im Shape- Format geliefert. Auch hier ist pro Segment je eine eindeutige ID vorhanden, jedoch sind die Vergabekriterien nicht bekannt. Eventuell muss bei der Aktualisierung auf die in der „IdData“- Datenbank vorhandenen Anfangs- und Endkoordinaten der Segmente zurückgegriffen werden. 4.4.1. Allgemeines Alte NavTech- Daten zu aktualisieren beziehungsweise neue NavTech- Daten zu überprüfen verlangt viel Konzentration. Bei den NavTech- Segmenten gibt es in dem Sinne keine Aktualisierung, sondern vielmehr eine Überprüfung, ob alte NavTechElemente noch vorhanden sind oder ob neue Elemente dazugekommen sind. 58 Konzept zur Datenaktualisierung Genau wie bei den Rascon- Objekten gibt es auch bei der Aktualisierung der NavTech- Segmente Fälle, die berücksichtigt werden müssen. Diese sind: o Ein Objekt in NavTech wurde gelöscht. o Ein Objekt wurde in NavTech hinzugefügt. Allgemeingültiger erster Aktualisierungsschritt: Die Attributtabellen der sowohl neuen (C) als auch alten (E) streets.shp müssen aus ArcView als Textdatei exportiert werden, um danach in Access bearbeitet werden zu können. Aufgrund der großen Datenmenge ist es empfehlenswert die für maximal ein Bundesland bzw. ein Gebiet vorhandenen Straßen zu exportieren. Vorstellbar wäre auch, die Streets- Daten gestückelt zu exportieren. Für das gebietsweise Exportieren der Streets spricht außerdem, dass die neuen Daten ebenfalls nur gebietsweise zur Verfügung stehen. Nun können beide Textdateien in Access importiert werden, wobei vorher die Komma-Trennzeichen durch Semikolon ersetzt werden müssen. ArcView NavTech-Streets alt NavTech-Streets neu Export als Textdatei, ersetzen der TrennKommata durch Semikolons Access Import in Access Abbildung 6: Kurzes Schema zum Import in Access Nachdem beide Dateien in Access vorhanden sind, müssen diese (per Skript, also automatisiert) miteinander verglichen werden. 4.4.2. Ein Objekt in NavTech wurde gelöscht Wurde im neuen NavTech- Datensatz (C) ein Segment gelöscht, so muss diese Tabelle mit der Tabelle der bereits verknüpften Segmente (D) verglichen werden. Alle Einträge, die in der Tabelle der IdData vorkommen, jedoch nicht mehr in der neuen NavTech- Datei, müssen extra ausgegeben werden und von Hand in ArcView überprüft werden, da die Objekte entweder nicht mehr vorhanden sind oder sich das Segment geändert hat bzw. ersetzt wurde. 59 Konzept zur Datenaktualisierung Diese Überprüfung könnte auch automatisiert ablaufen. Man müsste dafür die Koordinaten aller Datensätze der neuen NavTech- Datei in ArcView erzeugen und an die Tabelle anhängen. Wenn man diese Tabelle nun in Access importiert, könnte man die Koordinaten der neuen Datei mit den Koordinaten der verknüpften Segmente vergleichen, sofern die ID des Segmentes in der neuen Datei nicht mehr vorhanden ist. Stellt man dann fest, dass ein Segment wirklich umbenannt wurde, die Koordinaten jedoch weiterhin übereinstimmen, muss die ID in der alten Datei mit der ID aus der ganz neuen Datei ersetzt werden. Da in der IDData- Tabelle nur die NetzID, Richtungsangaben und Koordinaten aus der NavTech- Datei übernommen wurden, reicht es völlig aus, diese Spalten miteinander zu vergleichen. Lösungsansatz per SQL in Access: NetzID aus NavTech noch vorhanden in IdData Delete in IdData where NetzID NOT IN NavTech 4.4.3. Ein Objekt wurde in NavTech hinzugefügt Wurde zu den NavTech- Segmenten ein neues hinzugefügt, müssen auch hier die alte und die neue Shape miteinander verglichen werden. Dabei werden die alten Daten von den neuen Daten „abgezogen“. Übrig bleiben dann noch die Daten, die ganz neu sind, das bedeutet, dass diese Daten von Hand in ArcView überprüft und mit den dazugehörigen Rascon- Objekten verknüpft werden müssen. In folgendem Flussdiagramm wird beschrieben, wie das Ergebnis des Tabellenvergleichs nach ArcView gelangt. 60 Konzept zur Datenaktualisierung ArcView Herstellen einer SQL-Verbindung zu Access und Übertragung der Abfragetabelle mit den ganz neuen NavTech-Elementen. Exportieren und speichern der neuen Tabelle in AV. Verbinden der neuen Tabelle mit der Attributtabelle der aktuellen Daten. Auswahl der hinzugefügten Daten und Erstellung eines Shapes mit dieser Auswahl. Abbildung 7: Anleitung zum korrekten Import der NavTech- Elemente in ArcView Nachdem mit den ganz neuen Datensätzen ein Shape erstellt wurde, können diese differenziert dargestellt werden. Es wird davon ausgegangen, dass es keine großen Veränderungen in den neuen Versionen der NavTech- Daten gibt, so dass bei den ganz neu dazugekommenen Segmenten von Hand überprüft werden kann, ob sie gegebenenfalls mit einem Rascon- Element verknüpft werden müssen. Die Systematik der Verknüpfung ist identisch mit der Anleitung unter 4.3.2. 61 Konzept zur Datenaktualisierung 4.5. Graphische Darstellung der bereits verknüpften NavTech- Elemente Die bereits verknüpften bzw. neuen NavTech- Datensätze sollen in ArcView besonders hervorgehoben werden, um die manuelle Bearbeitung der neu dazugekommenen Datensätze zu vereinfachen. Im ersten Schritt sollten Access und die benötigte Tabelle mit den Daten der verknüpften Elemente geöffnet sein. Access Datenfeldänderung: Felddatentyp von Text auf Zahl im Feld NetzID ArcView Herstellen einer SQL- Verbindung. Auswählen der Felder „NetzID“ und „Zeitstempel“ aus der davor modifizierten Datenbank. Export der durch die SQL- Abfrage entstandenen Tabelle. Import der zuvor exportierten Tabelle. Verknüpfung der importierten Tabelle, welche die Id’s der bereits verknüpften NavTech- Elemente enthält, mit der Attributtabelle des streets- Shapes. Abfrage in der verknüpften Tabelle: es werden alle Einträge markiert, die bereits verknüpft worden sind. ([Zeitstempel] <> „“) Alle markierten Einträge werden zu einer neuen Shapefile gewandelt. Abbildung 8: Schema zur graphischen Darstellung in ArcView 62 Konzept zur Datenaktualisierung Abbildung 9: Screenshot aus ArcView. Gesonderte Darstellung der neuen Segmente (türkis) Die bereits verknüpften digitalen Straßensegmente können zusätzlich noch viel deutlicher dargestellt werden, indem jedes Segment mit dem dazugehörigen RasconObjekt über eine Linie verbunden wird. Grundvoraussetzung ist auch hier das Vorhandensein der IDData – Datenbank mit den Verknüpfungsinformationen, sowie eine ODBC- Verbindung zu eben dieser Datenbank. Sie wird im Verlauf in ArcView benötigt. Im ersten Schritt werden über eine ODBC- Verbindung in ArcView die hierfür benötigten Informationen – die NetzID sowie die RasconID – per SQL- Abfrage in eine Tabelle in ArcView importiert. Somit hat man jetzt die Informationen darüber, welche Segmente mit welchen Objekten verknüpft worden sind. Um herauszufinden, welche Straßensegmente mit Objekten verknüpft wurden, wird eine neu importierte IdData-Tabelle (Abfrage aus Vorjahres-Access-DB) mit der Streets- Attributtabelle (C) über die Spalte LinkID (streets.shp) bzw. NetzID 63 Konzept zur Datenaktualisierung (iddata.dbf) verbunden. Es müssen alle Datensätze, die sowohl eine LinkID als auch eine RasconID beinhalten, also verknüpft sind, markiert und als Shape exportiert werden. In der Attributtabelle dieses neuen Shapes (hier: streets_rascon_bw.shp) werden danach mit Hilfe des Skriptes „Mittelpunkt_Koord“ die Mittelpunktkoordinaten eines jeden Segmentes berechnet. Die X- und Y- Werte werden dabei auch in zwei extra Spalten mit den Namen „Mittelpunkt_X“ und „Mittelpunkt_Y“ an die Tabelle angehängt. Diese Mittelpunktkoordinaten werden als Startpunkte die späteren Linien verbinden. Für jedes Rascon-Shape – also Symbole.shp, Linien.shp sowie Symbole.shp (alles gesperrt) und Linien.shp (alles gesperrt) – müssen anschließend in den Attributtabellen mit Hilfe der Skripte „Mittelpunkt_Koord_Rascon“ für Linienobjekte und „Mittelpunkt_Koord_Rascon_Point“ für die Rascon- Symbolobjekte ebenfalls die Koordinaten des Mittelpunkts berechnet und in die Tabelle geschrieben werden. Diese Koordinaten stellen den Endpunkt der Verbindungslinie dar. Möchte man nun zum Beispiel die Linien zwischen den Straßensegmenten und den Linienobjekten graphisch darstellen, müssen zuerst die beiden Attributtabellen der Shapes miteinander verbunden werden. Hierfür klickt man erst auf die Spalte „DB_id“ (Rascon-ID) der Linienobjekt- Tabelle, dann auf die Spalte „RasconID“ der Streets_Rascon- Tabelle und verbindet die beiden Tabellen anschließend. Jetzt müssen in dieser erweiterten Streets_Rascon- Tabelle nur noch die Einträge markiert und als Shape exportiert werden, welche in allen Spalten Eintragungen beinhalten, das heißt in NetzID, Mittelpunkt_X, Mittelpunkt_Y, RasconID, Rasc_Mittelpunkt_X und Rasc_Mittelpunkt_Y. Nachdem die markierten Datensätze als Shape exportiert und im View wieder geöffnet wurden, muss jetzt nur noch das Skript „LinienZeichnen“ ausgeführt werden. In diesem Skript wird aus dem jeweils aktiven Thema die Attributtabelle geöffnet (hier: streets_linien_bw), dort die Koordinaten sowohl für den Anfangspunkt, also die Koordinaten des Mittelpunktes des NavTech- Segmentes, als 64 Konzept zur Datenaktualisierung auch für den Endpunkt der Linie, die Koordinaten des Mittelpunktes des RasconObjektes, herausgesucht und mit Hilfe dieser Koordinaten dann die Linie gezeichnet. Alle Linien werden als Grafiken dem View hinzugefügt, sind daher immer sichtbar und können, wenn sie markiert worden sind, durch einfaches Drücken der EntfernenTaste gelöscht werden. 65 Konzept zur Datenaktualisierung ArcView Erstellen einer ODBC- Verbindung zu Access. Abfrage der benötigten Daten aus Access per SQL- Abfrage. Speichern dieser Daten in einer neuen Tabelle. Exportieren der neuen Tabelle (IdData) bei geöffneter SQL- Verbindung. Sofortiges Importieren dieser Tabelle in das Projekt. Verbinden der Tabellen IdData und Streets über das gemeinsame Feld NetzID bzw. LinkID. Shape- Export der übereinstimmenden Felder. Wichtig: Streets- Tabelle ist Zieltabelle! In neuer Streets_rascon – Tabelle mit Hilfe von Skript „Mittelpunkt_Koord“ die Mittelpunktskoordinaten berechnen. In jeder Rascon – Attributtabelle, die verbunden werden soll, mit Hilfe der Skripte „Mittelpunkt_Koord_Rascon“ und „Mittelpunkt_Koord_Rascon_Point“ Mittelpunktskoordinaten berechnen. Verbinden der Streets_rascon – Tabelle mit der gewünschten Rascon – Tabelle über das Feld DbID bzw. RasconID. Zieltabelle ist hierbei immer die Streets_rascon – Tabelle. Die übereinstimmenden Datensätze werden markiert und als Shape exportiert. Anwenden des Skriptes „LinienZeichnen“ auf das neu erzeugte Shape. Abbildung 10: Anleitung zur graphischen Verbindung von Objekten mit den NavTechSegmenten 66 Konzept zur Datenaktualisierung 4.5.1. Skripte zur Datenaktualisierung Skript „Mittelpunkt_Koord“ '-------------------- Mittelpunkt_Koord --------------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 20.11.2003 ' - ' Die Mittelpunktkoordinaten werden berechnet und in die Tabelle geschrieben. '----- Interaktion mit folgenden Skripten: '------------------------------------------------------------------------ theView = av.FindDoc("View1") '-----------------------------------------------------------------------' Das erste in der Liste stehende aktive Thema wird "geholt", dessen FTab ' geöffnet und nach dem Feld "Shape" gesucht. Außerdem wird die FTab ' editierbar gesetzt. '------------------------------------------------------------------------ theTheme = theView.GetActiveThemes.Get(0) theFTab = theTheme.GetFTab theShapeField = theFTab.FindField("Shape") theFTab.SetEditable(true) '-----------------------------------------------------------------------' Es wird überprüft, ob die Spalten "Mittelpunkt_X" und "Mittelpunkt_Y" ' bereits existieren. Existieren sie bereits, so wird gefragt, ob die ' Spalten überschrieben werden sollen. '------------------------------------------------------------------------ MittelpunktX_exists = (theFTab.FindField("Mittelpunkt_X") = NIL).Not MittelpunktY_exists = (theFTab.FindField("Mittelpunkt_Y") = NIL).Not if (MittelpunktX_exists or MittelpunktY_exists) then if (MsgBox.YesNo("Feld überschreiben?","Das Feld Mittelpunkt existiert bereits!", false)) then if (MittelpunktX_exists) then theFTab.RemoveFields({theFTab.FindField("Mittelpunkt_X")}) 67 Konzept zur Datenaktualisierung end if (MittelpunktY_exists) then theFTab.RemoveFields({theFTab.FindField("Mittelpunkt_Y")}) end else exit end end '---------------------------------------------------------------------' Existieren die Spalten noch nicht, so werden sie erzeugt. ' Außerdem wird für jeden Eintrag in der Spalte theShapeField der X und Y' Wert an der Stelle 50%, also im Mittelpunkt des Objektes, berechnet und ' in die neuen Spalten hineingeschrieben. '----------------------------------------------------------------------- mpunktX = Field.Make("Mittelpunkt_X", #FIELD_DECIMAL, 25,5) mpunktY = Field.Make("Mittelpunkt_Y",#FIELD_DECIMAL, 25,5) theFTab.AddFields({mpunktX,mpunktY}) for each rec in theFTab mpkt = theFTab.ReturnValue(theShapeField, rec) mipkt = mpkt.Along(50) mipktX = mipkt.GetX mipktY = mipkt.GetY theFTab.SetValue(mpunktX, rec, mipktX) theFTab.SetValue(mpunktY, rec, mipktY) end Skript „Mittelpunkt_Koord_Rascon“ '-------------------- Mittelpunkt_Koord_Rascon -------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 20.11.2003 ' ' - Die Mittelpunktkoordinaten werden berechnet und in die Tabelle geschrieben. '----- Interaktion mit folgenden Skripten: '------------------------------------------------------------------------ 68 Konzept zur Datenaktualisierung theView = av.FindDoc("View1") '-----------------------------------------------------------------------' Das erste in der Liste stehende aktive Thema wird "geholt", dessen FTab ' geöffnet und nach dem Feld "Shape" gesucht. Außerdem wird die FTab ' editierbar gesetzt. '------------------------------------------------------------------------ theTheme = theView.GetActiveThemes.Get(0) theFTab = theTheme.GetFTab theShapeField = theFTab.FindField("Shape") theFTab.SetEditable(true) '-----------------------------------------------------------------------' Es wird überprüft, ob die Spalten "Rasc_Mittelpunkt_X" und "Rasc_Mittelpunkt_Y" bereits ' existieren. Existieren sie bereits, so wird gefragt, ob die Spalten überschrieben ' werden sollen. '------------------------------------------------------------------------ MittelpunktX_exists = (theFTab.FindField("Rasc_Mittelpunkt_X") = NIL).Not MittelpunktY_exists = (theFTab.FindField("Rasc_Mittelpunkt_Y") = NIL).Not if (MittelpunktX_exists or MittelpunktY_exists) then if (MsgBox.YesNo("Feld überschreiben?","Das Feld Mittelpunkt existiert bereits!", false)) then if (MittelpunktX_exists) then theFTab.RemoveFields({theFTab.FindField("Rasc_Mittelpunkt_X")}) end if (MittelpunktY_exists) then theFTab.RemoveFields({theFTab.FindField("Rasc_Mittelpunkt_Y")}) end else exit end end '------------------------------------------------------------------------' Existieren die Spalten noch nicht, so werden sie erzeugt. 69 Konzept zur Datenaktualisierung ' Außerdem wird für jeden Eintrag in der Spalte theShapeField der X und Y' Wert an der Stelle 50%, also im Mittelpunkt des Objektes, berechnet und ' in die neuen Spalten hineingeschrieben. '------------------------------------------------------------------------ mpunktX = Field.Make("Rasc_Mittelpunkt_X", #FIELD_DECIMAL, 25,5) mpunktY = Field.Make("Rasc_Mittelpunkt_Y",#FIELD_DECIMAL, 25,5) theFTab.AddFields({mpunktX,mpunktY}) for each rec in theFTab mpkt = theFTab.ReturnValue(theShapeField, rec) mipkt = mpkt.Along(50) mipktX = mipkt.GetX mipktY = mipkt.GetY theFTab.SetValue(mpunktX, rec, mipktX) theFTab.SetValue(mpunktY, rec, mipktY) end Das Skript „Mittelpunkt_Koord_Rascon_Point“ unterscheidet sich von dem Skript „Mittelpunkt_Koord_Rascon“ nur in den letzten sechs Zeilen. In diesem Skript soll der Mittelpunkt eines Symbols berechnet werden. Da die Symbole jedoch keine Länge haben, sondern nur punkthaft dargestellt werden, müssen die Koordinaten des Punktes berechnet werden und nicht die Koordinaten der Strecke an der Stelle 50%. Dieses Skript ist vollständig im Anhang zu finden. for each rec in theFTab mpkt = theFTab.ReturnValue(theShapeField, rec) mipktX = mpkt.GetX mipktY = mpkt.GetY theFTab.SetValue(mpunktX, rec, mipktX) theFTab.SetValue(mpunktY, rec, mipktY) end Skript „LinienZeichnen“ '-------------------- LinienZeichnen ------------------------------------'------------------------------------------------------------------------'----- Autor: Daniela Vekonj 70 Konzept zur Datenaktualisierung '----- letzte Änderung: 20.11.2003 ' - Es werden Linienobjekte erzeugt, die ihren Anfangs- ' punkt im Mittelpunkt des NavTech- Segmentes und ' den Endpunkt im Mittelpunkt des Rascon- Objektes haben. ' Die Geometrien werden als Graphiken dem View hinzugefügt. '----- Interaktion mit folgenden Skripten: '------------------------------------------------------------------------ SymbolFenster = av.GetSymbolWin SymbolFenster.Open theView = av.FindDoc("View1") theTheme = theView.GetActiveThemes.Get(0) theFTab = theTheme.GetFTab '-----------------------------------------------------------------------' Die Koordinatenfelder werden gesucht und deren Werte in Variablen ' gespeichert. Anschließend werden die Grafiklinien mit dem angegebenen ' Anfangs- und Endpunkt gezeichnet. '------------------------------------------------------------------------ for each rec in theFTab StreetX = theFTab.FindField("Mittelpunkt_X") valStreetX = theFTab.ReturnValue(StreetX, rec) StreetY = theFTab.FindField("Mittelpunkt_Y") valStreetY = theFtab.ReturnValue(StreetY, rec) RascX = theFTab.FindField("Rasc_Mittelpunkt_X") valRascX = theFTab.ReturnValue(RascX, rec) RascY = theFTab.FindField("Rasc_Mittelpunkt_Y") valRascY = theFTab.ReturnValue(RascY, rec) theView = av.FindDoc("View1") l = Line.Make(valStreetX@valStreetY, valRascX@valRascY) ls = graphicShape.make(l) theView.getgraphics.add(ls) End MsgBox.Info("Fertig!","Ende") 71 Konzept zur Datenaktualisierung Abbildung 11: Screenshot aus ArcView. Die Verbindungen zwischen Objekt und Segment sind rot dargestellt. 72 Konzept zur Datenaktualisierung Abbildung 12: Screenshot aus ArcView. Die Verbindungen zwischen Objekt und Segment sind rot dargestellt. 73 Bewertung und Ausblick 5. Bewertung und Ausblick 5.1 Bewertung Um eine automatisierte Geocodierung zur Aktualisierung der Daten hinsichtlich der Wirtschaftlichkeit des Umsetzungsverfahrens zu bewerten, müssen viele Faktoren in Betracht gezogen werden. Eine automatisierte Geocodierung kann grundsätzlich nur dann vorgenommen werden, wenn die Daten, die auf ein Straßennetz übertragen werden sollen, zusätzliche Straßeninformationen, wie Straßennamen oder Straßenbezeichnungen, besitzen. Sind diese Zusatzinformationen vorhanden, so ist eine automatisierte Geocodierung sowohl für die Erstbearbeitung als auch für die Aktualisierung von Daten gegenüber der manuellen Bearbeitung auf Grund ihrer Wirtschaftlichkeit sehr empfehlenswert. So kann innerhalb kürzester Zeit eine große Anzahl von Objekten geocodiert werden, was bei manueller „geocodierung“ in derselben Zeit nicht machbar ist. Andererseits ist zu bedenken, dass eine automatisierte Geocodierung nicht immer angewandt werden kann, da oft die wichtigen Zusatzinformationen fehlen – wie in diesem Projekt. Hierfür muss eine andere Möglichkeit der Zuordnung vorhanden sein. Ferner ist eine automatisierte Ausführung nicht immer der manuellen Verknüpfung vorzuziehen, da sie unter anderem große Fehlerquellen aufweisen kann, wenn die Automatisierung zum Beispiel Besonderheiten von Objekten nicht berücksichtigt und nach der Geocodierung dann zusätzlich tausende von Objekten von Hand überprüft werden müssen. Dieses „Nachbearbeiten“ macht die automatisierte Geocodierung nicht wirtschaftlicher als die manuelle Verknüpfung Aufgrund dieser Tatsachen ist das automatisierte Verfahren im aktuellen Zustand meiner Meinung nach weder wirtschaftlicher noch herausragender als die manuelle Bearbeitung. Da den Datensätzen der Rascon-Objekte im Moment wichtige Informationen zur korrekten Ausführung einer Geocodierung fehlen, wird angezweifelt, dass hier eine automatisierte Geocodierung grundsätzlich durchgeführt werden könnte. Bei einer manuellen Bearbeitung wären diese Informationen nicht notwendig für die korrekte Durchführung. Ferner wäre die Möglichkeit einer großen 74 Bewertung und Ausblick Fehlerquelle durch das manuelle „Anfassen“ eines jeden Objektes im Vergleich zur automatisierten Ausführung gebannt. Stellt man also die automatisierte Geocodierung der manuellen Bearbeitung im Hinblick auf die Wirtschaftlichkeit der Umsetzung gegenüber, so ist erkennbar, dass die automatisierte Umsetzung zwar schneller durchgeführt werden kann, auftretende Fehler jedoch ebenfalls von Hand überprüft werden müssen. Im Vergleich dazu nimmt die manuelle Umsetzung mehr Zeit in Anspruch, allerdings ist das Auftreten von Fehlerquellen hier reduzierter. 5.2 Ausblick In der vorliegenden Arbeit wurden Daten, die bisher nur in einem Printprodukt zur Verfügung standen, attributiert, mit einem digitalen, routingfähigen Straßennetz verknüpft und anschließend in Access importiert. Es wäre denkbar, diese hier angewandte manuelle Lösung der Verknüpfung automatisiert ablaufen zu lassen, sofern die Objekte noch mehr Informationen beinhalten, welche die Durchführung erst ermöglichen. Der vollständige Datensatz in Access kann für Routinganwendungen genutzt werden, die speziell für Fernfahrer interessant sein könnten. Aufbauend auf diesen Anwendungen können zukünftig noch mehr Daten wie Grenzstellen oder Gefällestrecken aus dem Printprodukt in das Routing übernommen werden und dadurch dem Nutzer den größtmöglichen Informationsumfang über die gewünschte Route gewährleisten. 75 Quellennachweis 6. Quellennachweis 6.1 Printmedien BILL, Ralf (1999): Grundlagen der Geoinformationssysteme. Band 2: Analysen, Anwendungen und neue Entwicklungen. 2. völlig neubearbeitete und erweiterte Auflage. Wichmann, Heidelberg. BUKOVAC, Robert (2001): Entwicklung, Implementierung und Test von Verfahren zur automatischen Georeferenzierung von linienhaften Objekten in digitalen Straßenkarten. Diplomarbeit. CS COMPUTER DOBERENZ , (1999): Rascon für Windows – Version 3.56 – Handbuch. Walter u. Thomas KOWALSKI (2000): Microsoft? Access 97 – Programmierung. Überblick, Rezepte und Lösungen für den professionellen AccessProgrammierer unter Windows 95 und Windows NT. Microsoft Press, Unterschleißheim. ESRI (1996): AvenueTM – Customization and Application Development for ArcView? GIS. ESRI, Redlands, USA. ESRI (1998): ESRI Shapefile Technical Description. An ESRI White Paper. GÖPFERT, Wolfgang (1991): Raumbezogene Informationssysteme; Grundlagen der integrierten Verarbeitung von Punkt-, Vektor- und Rasterdaten, Anwendungen in Kartographie, Fernerkundung und Umweltplanung. 2. Auflage. Wichmann, Karlsruhe. GRÖGER, Gerhard (2000): Modellierung raumbezogener Objekte und Datenintegrität in GIS. Wichmann, Heidelberg. 76 Quellennachweis HAKE, Günter, GRÜNREICH, Dietmar (1994): Kartographie. 7., völlig neu bearbeitete und erweiterte Auflage. de Gruyter, Berlin, New York. HERTER, Michael, HÖCK, Michael u. Michael JACOBI (1999): AvenueTM – Programmierung in ArcView? GIS. Herter, Höck, Jacobi, Freising. LIEBIG, Wolfgang (2001): Desktop-GIS mit ArcView GIS: Leitfaden für Anwender. 3., überarbeitete Auflage. Wichmann, Heidelberg. LONGLEY, Paul, GOODCHILD, Michael, MAGUIRE, David, RHIND, David (2001): Geographic Information Systems and Science. John Wiley & Sons, LTD. Chichester. MISGELD, Wolfgang D. (1991): ORACLE für Profis. Hanser, München, Wien. MUNZ (2003): Dokumentation zur Geocodierung und Qualität der Geokoordinaten. Falk Marcopolo Interactive, Kemnat. SAURER, Helmut, BEHR, Franz-Josef (1997): Geographische Informationssysteme: eine Einführung; mit 31 Tabellen im Text. Wissenschaftliche Buchgesellschaft, Darmstadt. SCHREIER , Gunter (1993): SAR geocoding: data and systems. Wichmann, Karlsruhe. WILLIAMS, Jonathan: GIS processing of geocoded satellite data. Springer-Verlag Berlin, Heidelberg, New York.- 77 Quellennachweis 6.2 Online-Medien Die letzte Überprüfung aller im Folgenden aufgeführter URLs auf Funktionalität erfolgte im Januar 2004. A NUVA : ArcView-Forum. www.anuva.de DEUTSCHE GVZ-G ESELLSCHAFT : Vorteile von GVZ. www.gvz-org.de/vorteile.htm ESRI SUPPORT CENTER : ArcView Forum. forums.esri.com GOODWIN, Cecil, GORDON, Stephen, SIEGEL, David: Reinterpreting the location referencing problem: a protocol approach. //itsdeployment.ed.ornl.gov/spatial/document/html/gis_tcg.html .14.11.2003, 14Uhr. LEXIKON: http://www.net-lexikon.de/Microsoft-Access.html MEIER , Robert: ArcView and SQL Connections. www.mygis.com/AVOracle.htm RASCON: Digitale Kartographie, Internet-Info-Systeme für Landkarten im Internet. http://www.rascon.de STAATLICHES A MT FÜR UMWELT U ND NATUR LÜBZ : ? Verbindung ArcView – Access 2000. www.staun-luebz.mvnet.de ? Verbindung MS Access – ArcView. www.staun-luebz.mvnet.de/pages/AVTipps/access.htm ? Verwendung einer zentralen ODBC-Datenbank. www.staun-luebz.mvnet.de/pages/AVTipps/odbc.htm VBA: http://www.rrzn.uni-hannover.de/Dokumentation/Handbuecher/VBA.html 78 Anhang Anhang I. Skripte ChangeKoord '-------------------- ChangeKoord ---------------------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 30.09.2003 ' - Die Anfangs- und Endkoordinaten des Segmentes werden ' angezeigt. Man kann danach wählen, ob man die Reihenfolge ' so belassen will oder ob man sie umkehren möchte. '----- Interaktion mit folgenden Skripten: '------------------------------------------------------------------------'----------------------------------------------------------------' Die Infobox mit den Koordinaten wird erzeugt. Hierfür müssen die ' Koordinaten in einer Liste gespeichert werden, damit sie unter' einander angezeigt werden könne. '----------------------------------------------------------------Anfangskoord = _startx.AsString ++ _starty.AsString Endkoord = _endx.AsString ++ _endy.AsString aeList = {Anfangskoord,Endkoord} myString = "" For each i in aeList myString = myString + NL + i.AsString myString.BasicTrim(NL,"") End MsgBox.Info(mystring,"Koordinaten") '----------------------------------------------------------------' Es wird eine Auswahlliste erstellt. Man kann auswählen, ob man ' die Richtung beibehalten oder umkehren möchte. In beiden Fällen ' wird der Variablen _Richtung ein Wert zugewiesen. Möchte man der ' Variablen jedoch keinen Wert zuweisen und einfach abbrechen, so ' klickt man einfach auf „abbrechen“. '----------------------------------------------------------------AuswahlListe = {"Richtung beibehalten","Richtung umkehren"} Auswahl = MsgBox.ListasString(AuswahlListe,"Bitte auswählen","Auswahl") if (Auswahl = NIL) then Msgbox.info("Der Vorgang wurde abgebrochen","Abbruch") elseif (Auswahl = "Richtung beibehalten") then _Richtung = (";dir1") elseif (Auswahl = "Richtung umkehren") then _Richtung = (";dir1") startx = _startx starty = _starty endx = _endx endy = _endy '---------------------------------------------------------------' Hier werden die Koordinaten umgekehrt. _startx wird zu endx und ' _endx zu startx. Schließlich wird wieder eine Liste generiert, 79 Anhang ' die anschließend in einer Infobox zur Überprüfung ausgegeben ' wird. '---------------------------------------------------------------_startx _starty _endx = _endy = = endx = endy startx starty Anfangskoord = _startx.AsString ++ _starty.AsString Endkoord = _endx.AsString ++ _endy.AsString aeList = {Anfangskoord,Endkoord} myString = "" For each i in aeList myString = myString + NL + i.AsString myString.BasicTrim(NL,"") End MsgBox.Info(mystring,"Koordinaten") end id_uebergabe '-------------------- id_uebergabe --------------------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 02.10.2003 '----- Interaktion mit folgenden Skripten: tableclose, KoordinatenT, ' KoordinatenFB ' - Aufuf durch STRG+a '------------------------------------------------------------------------- '---------------------------------------------------------------' Es wird überprüft, ob die Variable „_Name“ bereits ein Wert ' zugewiesen wurde. Wenn nicht, wird das Skript „Username“ erneut ' aufgerufen und ausgeführt. '---------------------------------------------------------------if (_name = NIL) then MsgBox.Info("Bitte geben Sie zuerst Ihren Benutzernamen ein!", "Eingabe erwünscht") av.Run("Username",NIL) end Themenliste = {"Symbole.shp","Linien.shp","streets.shp"} Thema = msgbox.listAsString(Themenliste,"Bitte wählen Sie das gewünschte Thema aus: ","Themen") theView = av.GetactiveDoc for each t in theView.getthemes t.setactive(FALSE) end if (Thema = "Symbole.shp") then ThemaSymbol = theView.FindTheme("Symbole.shp") Themasymbol.setactive(TRUE) elseif (Thema = "Linien.shp") then ThemaLinien = theView.FindTheme("Linien.shp") 80 Anhang ThemaLinien.setactive(TRUE) elseif (Thema = "streets.shp") then ThemaStreets = theView.FindTheme("streets.shp") ThemaStreets.setactive(TRUE) elseif (Thema = NIL) then MsgBox.Info("Sie müssen erst ein Thema auswählen!", "Thema wählen") exit end '------------------------------------------------------------------------' Die Tabelle des aktiven Themas wird aufgerufen. Ist sie nicht schon ' aktiv, so wird sie erst noch aktiv gesetzt '------------------------------------------------------------------------theView = av.GetActiveDoc myVView = theView.GetActiveThemes for each t in myVView if (t.HasTable) then t.EditTable end end '---------------------------------------------------------------' Es wird die Virtuelle Tabelle (VTab) des aktiven Dokumentes ' aufgerufen, also die VTab der Attributtabelle. Felder ' werden gesucht. Die Werte, die in den Feldern stehen, ' werden in globalen Variablen gespeichert. '---------------------------------------------------------------myVTab = av.GetActiveDoc.GetVTab Feld1 = myVTab.FindField("DB_id") Feld2 = myVTab.FindField("Link_id") Feld3 = myVTab.FindField("dir_travel") Feld4 = myVTab.FindField("Infotext") if (Feld1 = NIL) then 'MsgBox.Info("keine DB-ID","DB-ID") else _DBID = myVTab.ReturnValueString(Feld1, myVTab.GetSelection.GetNextSet(-1)) 'MsgBox.Info(_DBID,"DB_id") if (Feld4 = NIL) then MsgBox.Info("Das Feld ist leer!","Leer") else _Infotext = myVTab.ReturnValueString (Feld4,myVTab.GetSelection.GetNextSet(-1)) 'msgbox.info(_Infotext,"Infotext") end for each t in myVView t.ClearSelection end end theView = av.GetProject.FindDoc("View1") theView.getwin.activate Themenliste = av.GetActiveDoc 81 Anhang for each t in Themenliste.getthemes t.setactive(FALSE) end Streetsthema = Themenliste.FindTheme("streets.shp") Streetsthema.setactive(TRUE) if (Feld2 = NIL) then 'MsgBox.Info("keine Link-ID","Link-ID") else _LinkID = myVTab.ReturnValueString(Feld2, myVTab.GetSelection.GetNextSet(-1)) 'MsgBox.Info(_LinkID,"LINK_ID") end if (Feld3 = NIL) then 'MsgBox.Info("Das Richtungsfeld ist leer!","Leer") else Richtung = myVTab.ReturnValueString(Feld3, myVTab.GetSelection.GetNextSet(-1)) if (Richtung = "T") then av.run("KoordinatenT",NIL) _Richtung = (";dir1") elseif (Richtung = "B") then av.run("KoordinatenFB",NIL) _Richtung =("") elseif (Richtung = "F") then av.run("KoordinatenFB",NIL) _Richtung = (";dir1") elseif (Richtung = NIL) then MsgBox.Info(Richtung,"Richtung") end end '------------------------------------------------------------------------' Das Skript "tableclose" wird aufgerufen. '------------------------------------------------------------------------av.run("tableclose", NIL) koordinatenfb '-------------------- KoordinatenFB -------------------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 29.09.2003 ' - die Koordinaten für die ausgewählte Polylinie ' werden aufgenommen und in globalen Variablen "gemerkt". '----- Interaktion mit folgenden Skripten: id_uebergabe '------------------------------------------------------------------------theView = av.FindDoc("View1") theTheme = theView.GetActiveThemes.Get(0) theFTab = theTheme.GetFTab theShapeField = theFTab.FindField("Shape") '------------------------------------------------------------------------' Der Wert, der im Feld "Shape" steht, wird zurückgegeben. '------------------------------------------------------------------------- 82 Anhang val = theFTab.ReturnValue(theShapeField, theFTab.GetSelection.GetNextSet(1)) '---------------------------------------------------------------' Gibt einen Punkt zurück, der bei den angegebenen Prozent auf der ' Polylinie liegt. Der Anfangspunkt liegt also bei Null Prozent, ' der Endpunkt bei 100 Prozent. '---------------------------------------------------------------startp = val.Along(0) endp = val.Along(100) '------------------------------------------------------------------------' Jetzt müssen die globalen Variablen definiert werden, die im ' Skript "writetxt" wieder gebraucht werden. '------------------------------------------------------------------------_startx _starty _endx = _endy = = startp.GetX = startp.GetY endp.GetX endp.GetY '------------------------------------------------------------------------' Kurzer Check, ob auch wirklich die richtigen Koordinaten aufgenommen ' wurden <optional>. '------------------------------------------------------------------------Liste = {_startx,_starty,_endx,_endy} MsgBox.ListAsString(Liste,"das sind die Koordinaten","KoordinatenFB") koordinatent '-------------------- koordinatenT ---------------------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 29.09.2003 ' - die Koordinaten für die ausgewählte Polylinie ' werden aufgenommen und in globalen Variablen "gemerkt". ' - Besonderheit hierbei: die Anfangs- und Endkoordinaten werden ' miteinander "vertauscht", da in der dir_travel "T" vermerkt war. '----- Interaktion mit folgenden Skripten: id_uebergabe '-------------------------------------------------------------------------theView = av.FindDoc("View1") theTheme = theView.GetActiveThemes.Get(0) theFTab = theTheme.GetFTab theShapeField = theFTab.FindField("Shape") '------------------------------------------------------------------------' Der Wert, der im Feld "Shape" steht, wird zurückgegeben. '------------------------------------------------------------------------val = theFTab.ReturnValue(theShapeField, theFTab.GetSelection.GetNextSet(1)) '---------------------------------------------------------------' Gibt einen Punkt zurück, der bei den angegebenen Prozent auf der ' Polylinie liegt. Der Anfangspunkt liegt also bei 100 Prozent, ' der Endpunkt bei Null Prozent. Dies wurde vertauscht, da die ' Information zur Richtung „Entgegen der Fahrtrichtung“ lautet. '---------------------------------------------------------------- 83 Anhang startp = val.Along(100) endp = val.Along(0) '------------------------------------------------------------------------' Jetzt müssen die globalen Variablen definiert werden, die im ' Skript "writetxt" wieder gebraucht werden. '------------------------------------------------------------------------_startx _starty _endx = _endy = = startp.GetX = startp.GetY endp.GetX endp.GetY '---------------------------------------------------------------' Kurzer Check, ob auch wirklich die richtigen Koordinaten ' aufgenommen wurden. Hierfür werden die soeben erzeugten ' Koordinaten in einer Messagebox ausgegeben. '---------------------------------------------------------------Liste = {_startx,_starty,_endx,_endy} MsgBox.ListAsString(Liste,"das sind die Koordinaten","Koordinaten") tableclose '-------------------- tableclose ----------------------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 04.09.2003 ' - die beiden Attributtabellen der Themen werden geschlossen ' - Vorsicht: Namen sind an die Tabellen angepasst '----- Interaktion mit folgenden Skripten: - Aufruf durch id_uebergabe '------------------------------------------------------------------------'--------------------------------------------------------------' Jede mögliche offene Tabelle wird namentlich im Projekt gesucht ' und anschließend geschlossen. '--------------------------------------------------------------Tabelle = av.GetProject Tabellen = Tabelle.finddoc("Attribute von Linien.shp") Tabellen2 = Tabelle.finddoc("Attribute von Majhwys.shp") Tabellen3 = Tabelle.finddoc("Attribute von Sechwys.shp") Tabellen4 = Tabelle.finddoc("Attribute von Symbole.shp") Tabellen5 = Tabelle.finddoc("Attribute von Streets.shp") if (Tabellen = NIL) then else Tabellen.getwin.close end if (Tabellen2 = NIL) then else Tabellen2.getwin.close end if (Tabellen3 = NIL) then else Tabellen3.getwin.close end 84 Anhang if (Tabellen4 = NIL) then else Tabellen4.getwin.close end if (Tabellen5 = NIL) then else Tabellen5.getwin.close end username '-------------------- username ------------------------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 01.10.2003 ' - der Name des Bearbeiters wird in einer globalen Variablen ' gespeichert '----- Interaktion mit folgenden Skripten: - Aufruf durch '------------------------------------------------------------------------' Öffnen eines Eingabefensters _Name = MsgBox.Input("Bitte geben Sie Ihren Benutzernamen hier ein.", "Eingabe","") '------------------------------------------------------------------------' so lange in das Textfeld des Eingabefensters nichts eingegeben ' wird, erscheint das Errorfenster '------------------------------------------------------------------------while (_Name = NIL) MsgBox.Error("Bitte geben Sie Ihren Namen ein!","Eingabe") _Name = MsgBox.Input("Bitte geben Sie Ihren Benutzernamen hier ein.","Eingabe","Ihr Name") end writetxt '-------------------- Writetxt ------------------------------------------'----- Autor: Daniela Vekonj '----- letzte Änderung: 23.09.2003 ' - es wird überprüft, ob die Datei bereits vorhanden ist. ' - Die Richtung wird abgefragt und in den Daten-String eingefügt '----- Interaktion mit folgenden Skripten: - Aufruf durch STRG+w '------------------------------------------------------------------------'------------------------------------------------------------------------' Die globalen Variablen werden Variablen zugewiesen. '------------------------------------------------------------------------DBID = _DBID LinkID = _LinkID startx = _startx.asString starty = _starty.asString endx = _endx.asString endy = _endy.asString Infotxt = _Infotext Richtung = _Richtung name = ("n"+_Name) 85 Anhang newfile=Filename.Make("C:\IDdata.txt") newfileexists=File.Exists(newfile) 'MsgBox.info(newfileexists.asString,"test") '----------------------------------------------------------------' Existiert die Datei noch nicht, so wird sie neu angelegt und ' virtuell geöffnet. Existiert sie bereits, wird der Cursor an ' das Ende der Datei gestellt und alles, das hineingeschrieben ' werden soll, wird hinten angefügt. '----------------------------------------------------------------if (newfileexists = false) then lf = LineFile.Make(newfile, #FILE_PERM_WRITE ) lf.WriteElt(DBID+";"+LinkID+";"+startx+";"+starty+"; "+endx+";"+endy+";"+Infotxt+Richtung+";"+name) lf.Close else lf = LineFile.Make(newfile,#FILE_PERM_MODIFY) lf.gotoend lf.WriteElt(DBID+";"+LinkID+";"+startx+";"+starty+"; "+endx+";"+endy+";"+Infotxt+Richtung+";"+name) lf.close end theView = av.GetProject.FindDoc("View1") for each t in theView.GetThemes .ClearSelection end 86 Anhang II. VBA-Skripte aus Access TXTImport Public Sub TXTImport() 'Import der TextDatei Dim TXTDatei As String 'eine Textdatei die eingelesen werden soll Dim alleZeilen(), Tabelle, SQLValue, eineZeile As String Dim zaehler, DSMax, i, j As Long 'alles Zählervariablen Dim db As Database Dim rsTabelle As Recordset Dim eineZeileAlsCollection As New Collection Dim einEintrag As String Dim einPunkt As String 'wird die Textdarstellung eines Punktes aus ArcView beeinhalten ( Point: 7.143 51.4271 ) Dim xWert, yWert As String Dim punktColl As New Collection Dim attributKennung As String Dim attributInhalt As Variant On Error GoTo Fehler TXTDatei = "C:\IDData.txt" Tabelle = "Trucker2NavTech" Set db = CurrentDb SQLValue = "SELECT * FROM " & Tabelle & " ;" Set rsTabelle = db.OpenRecordset(SQLValue) '------------------------------------------------------------------------'TXT-Datei öffnen, Zeilen werden in ein String-Array gelesen 'und anschliessend gesplittet '------------------------------------------------------------------------Open TXTDatei For Input As 1 zaehler = 0 '------------------------------------------------------------------------'Bis zum Dateiende zeilenweise einlesen '------------------------------------------------------------------------Do While Not EOF(1) ReDim Preserve alleZeilen(zaehler) Line Input #1, eineZeile alleZeilen(zaehler) = eineZeile zaehler = zaehler + 1 Loop Close 1 '------------------------------------------------------------------------'Zeilenanzahl der EingabeDatei '------------------------------------------------------------------------DSMax = UBound(alleZeilen) '------------------------------------------------------------------------'Aufsplittung des String-Arrays '------------------------------------------------------------------------- 87 Anhang For i = 0 To DSMax eineZeile = alleZeilen(i) '------------------------------------------------------------'Zerlegen der Zeile an den Semikolons '------------------------------------------------------------Set eineZeileAlsCollection = tokenize(eineZeile, ";") '------------------------------------------------------------'Daten in Tabelle importieren '------------------------------------------------------------With rsTabelle .AddNew !RasconID = eineZeileAlsCollection.Item(1) !NetzID = eineZeileAlsCollection.Item(2) !StartpunktLamda = Val(eineZeileAlsCollection.Item(3)) !StartpunktPhi = Val(eineZeileAlsCollection.Item(4)) !EndpunktLamda = Val(eineZeileAlsCollection.Item(5)) !EndpunktPhi = Val(eineZeileAlsCollection.Item(6)) '------------------------------------------------------------'Jetzt müssen noch die Attribute des TruckerThemas erkannt 'werden und in die richtigen Tabellenspalten gelegt werden '------------------------------------------------------------For j = 5 To eineZeileAlsCollection.Count einEintrag = trim(eineZeileAlsCollection(j)) attributKennung = Left(einEintrag, 1) Select Case attributKennung Case "s" !Schneekette = True GoTo Skip Case "r" If Len(einEintrag) = 1 Then !Raststaette = True GoTo Skip End If Case "t" If Len(einEintrag) = 1 Then !Tank = True GoTo Skip End If Case "a" !Autohof = True GoTo Skip Case "n" attributInhalt = Right(einEintrag, (Len(einEintrag) - 1)) !Bearbeiter = attributInhalt GoTo Skip End Select attributKennung = Left(einEintrag, 2) Select Case attributKennung Case "bt" attributInhalt = Right(einEintrag, (Len(einEintrag) - 2)) !BrueckeTrag = Val(attributInhalt) 88 Anhang GoTo Skip Case "bs" attributInhalt = Right(einEintrag, (Len(einEintrag) - 2)) !BrueckeSchrammbord = Val(attributInhalt) GoTo Skip Case "be" !BrueckeEinschr = True GoTo Skip Case "uh" attributInhalt = Right(einEintrag, (Len(einEintrag) - 2)) !UnterfuehrungHoehe = Val(attributInhalt) GoTo Skip Case "us" attributInhalt = Right(einEintrag, (Len(einEintrag) - 2)) !UnterfuehrungSchrammbord = Val(attributInhalt) GoTo Skip Case "ue" !UnterfuehrungEinschr = True GoTo Skip Case "gg" !GesperrtGefahrgut = True GoTo Skip Case "gw" !GesperrtWasser = True GoTo Skip Case "ga" !GesperrtAlles = True GoTo Skip Case "gk" If Len(einEintrag) = 2 Then !GesperrtKfz = True GoTo Skip End If Case "bi" If Len(einEintrag) = 2 Then !Binnenzollamt = True GoTo Skip End If Case "rk" !RaststaetteK = True GoTo Skip End Select attributKennung = Left(einEintrag, 3) Select Case attributKennung Case "dir" !Richtung = True GoTo Skip Case "gtg" attributInhalt = Right(einEintrag, (Len(einEintrag) - 3)) !GesperrtTatGewicht = Val(attributInhalt) GoTo Skip Case "gta" attributInhalt = Right(einEintrag, (Len(einEintrag) - 3)) 89 Anhang Case Case Case Case !GesperrtTatAchslast = Val(attributInhalt) GoTo Skip "ge6" !Gefaelle6 = True GoTo Skip "biv" !BinnenzollamtV = True GoTo Skip "tir" !GrenzTIR = True GoTo Skip "gvz" !GVZ = True GoTo Skip End Select attributKennung = Left(einEintrag, 4) Select Case attributKennung Case "gk35" !GesperrtKfz3t5 = True GoTo Skip Case "ge10" !Gefaelle10 = True GoTo Skip End Select Skip: Next j 'Zeitstempel eintragen !Zeitstempel = Date + Time .Update End With Next i GoTo fertig: Fehler: MsgBox Err.Description fertig: rsTabelle.Close MsgBox "fertig" End Sub 90 Anhang Funktion “tokenize” Function tokenize(ByVal strInput As String, ByVal suchzeichen As String) As Collection Dim i As Integer Dim pos, laenge As Long Dim eineListe As New Collection strInput = trim(strInput) laenge = Len(strInput) i = 0 pos = 0 '-----------------------------------------------------------------------'Gibt das erste Auftreten des Suchzeichens im String an. ' O als Rückgabe wenn der Suchtext nicht auftritt '-----------------------------------------------------------------------pos = InStr(strInput, suchzeichen) While pos > 0 eineListe.Add (trim(Mid(strInput, 1, pos - 1))) strInput = (Mid(strInput, pos + 1)) '-----------------------------------------------------------------------'Gibt das nächste Auftreten des Suchzeichens im String an. 'O als Rückgabe wenn der Suchtext nicht auftritt. '-----------------------------------------------------------------------pos = InStr(strInput, suchzeichen) i = i + 1 Wend '-----------------------------------------------------------------------'der Rest des Eingabestrings (sofern einer vorhanden) soll natürlich auch 'noch übergeben werden '-----------------------------------------------------------------------If Len(strInput) > 0 Then eineListe.Add (strInput) End If Set tokenize = eineListe End Function 91 Anhang III. Anleitung zur Verknüpfung in ArcView Grundsätzliches: Die ersten drei Themen im View sind zwingend Symbole.shp, Linien.shp und Streets.sh. Symbole.shp und Linien.shp bleiben auch beim Wechsel in ein anderes NaVTech-Netz im View, majhwys.shp, sechwys.shp lediglich und die Themen railrds.shp streets.shp werden je (Arbeitsshape!), nach Notwendigkeit ausgetauscht. Dringend zu beachten ist hierbei, dass die Verknüpfung der Rasconmit den NavTech- Daten jedes Mal mit den Straßendaten aus streets.shp durchgeführt wird. Die Textdatei, in der sämtliche Informationen gespeichert werden, wird stets unter C:/Iddata.txt gesichert. Die NavTech-Substanz muss immer auf dem Rechner installiert sein. Informationen zu den Daten und den Datenträgern gibt es auf der Installations-CD. 1. Jedes Mal wenn das Projekt neu geöffnet wird, muss zuerst der Name des Bearbeiters eingegeben werden. Um den Namen eingeben zu können, benutzt man entweder die Tastenkombination strg+n oder diesen Button: 2. Sowohl das Werkzeug „Objekt auswählen“ aus der Werkzeugleiste als auch das Rascon-Thema, mit dem man beginnen möchte, müssen aktiviert sein. 3. Jetzt kann das zu verknüpfende Objekt aus entweder Symbole.shp oder Linien.shp markiert werden. Um an die bezeichnende ID zu kommen benutzt man die Tastenkombination strg+a oder diesen Button: Daraufhin erscheint eine Liste, aus der man das zum aktivierten Objekt passende Thema auswählen muss. 4. Hat man Schritt 3 korrekt ausgeführt, markiert man jetzt im NavTech- Thema (hier: immer streets.shp!), das bereits automatisch aktiviert wurde, das zum Rascon- 92 Anhang Objekt passende NavTech- Segment und benutzt anschließend den Shortcut strg+a oder klickt auf: Auch hier erscheint eine Liste, aus der man jedoch immer streets.shp auswählen muss. 5. Nun müssen die Informationen im Normalfall nur noch die Textdatei geschrieben werden. Dies geschieht mit dem Shortcut strg+w oder diesem Button: Normalfall Der Normalfall ist hier ein punkthaftes Objekt, das mit einem Segment aus den NavTech- Daten verknüpft werden muss. Der oben beschriebene Ablauf kann grundsätzlich auf alle Objekte angewendet werden, es gibt jedoch einige Sonderfälle. Sonderfälle Linienhafte Objekte sind Sonderfälle bei der Verknüpfung. Grundsätzlich gilt für alle linienhafte Objekte, dass jedes NavTech- Segment, auf dem die Rascon- Linie liegt bzw. verlaufen könnte, einen Eintrag in der Textdatei bekommt. Das heißt, dass jedes Segment noch einmal einzeln aufgenommen und in die Datei geschrieben werden muss, vorausgesetzt das Segment hat an seinem Endoder Anfangspunkt Kontakt zu kreuzenden Straßen. Wird es von keiner anderen Straße berührt, muss es auch nicht verknüpft werden. Der Verknüpfungsablauf ist also im ersten Durchlauf vollständig identisch. Nimmt man jetzt jedoch weitere Segmente für die Rascon- Linie auf, so muss man die Schritte 1-3 nicht ständig wiederholen. Die Informationen, die beim ersten mal aus dem Rascon- Objekt herausgeholt wurden, sind nämlich in Variablen gespeichert. Möchte man also zusätzliche Segmente verknüpfen, so genügt es völlig, pro Segment ab Schritt 4 zu verknüpfen. Das heißt: Segment markieren, strg+a und strg+w. Es gibt bei den linienhaften Objekten jedoch einige Fälle, die unbedingt berücksichtigt werden müssen. 93 Anhang ? Linienhafte Objekte beidseitig Bei dieser am häufigsten vertretenen Art der Linien ist die Richtung der aufgenommenen Koordinaten unwichtig. Hier kann man ohne Probleme die Linien mit den NavTech- Segmenten verknüpfen. ? Linienhafte Objekte beidseitig – NavTech-Segment einseitig Gilt ein beidseitiges linienhaftes Objekt für zwei NavTech-Segmente (also zweimal eine Richtung, kommt öfters bei großen Autobahnen vor), so muss jede NavTech- Richtung einmal mit dem Rascon- Objekt verknüpft werden. ? Linienhafte Objekte einseitig – NavTech-Segment beidseitig Liegt ein einseitiges linienhaftes Objekt auf einem beidseitigen NavTechSegment, so muss man nach der „normalen“ Verknüpfung (ohne Schritt 5, also keine Datei schreiben!) die Richtung der Koordinaten überprüfen und gleichzeitig eine Richtungsinformation (weil das Rascon-Objekt einseitig ist) an eine Variable übergeben. Dies geschieht mit Hilfe des shortcuts strg+s oder diesem Button: Erst jetzt darf die Datei geschrieben werden. ? Linienhafte Objekte einseitig – richtige Koordinatenreihenfolge Überprüft man die Koordinaten und sieht, dass die Reihenfolge (also Richtung) der Koordinaten korrekt ist, so wählt man aus der Liste „Richtung beibehalten“ und klickt auf „OK“. So wird eine Richtungsinformation (dir1 für einseitiges Objekt) an eine Variable übergeben. Erst jetzt darf die Datei geschrieben werden. ? Linienhafte Objekte einseitig – falsche Koordinatenreihenfolge Überprüft man die Koordinaten und sieht, dass die Reihenfolge (also Richtung) der Koordinaten falsch ist, so wählt man aus der Liste „Richtung 94 Anhang umkehren“ aus und klickt auf „OK“. So werden die Koordinaten umgekehrt und gleichzeitig die Richtungsinformation an eine Variable übergeben. Erst jetzt darf die Datei geschrieben werden. 95