G#.Viewer – ein eigener GIS-Datenviewer in C#

Mit der Open Source .NET-Bibliothek SharpMap kann man eigene einfache GIS-Anwendungen mit C# relativ schnell entwickeln. In den nun folgenden Artikeln werde ich die Entwicklung eines einfachen GIS-Viewers beschreiben. Das Projekt heisst „G#.Viewer“ und soll das können: Geodaten darstellen und abfragen.

Als Entwicklungsumgebung (IDE) empfehle ich das Werkzeug SharpDevelop. Auch dies ist Open Source und ist eine profunde Alternative zu Microsoft Visual Studio C# Express Edition oder zur Vollversion Microsoft Visual Studio. In diesen Artikeln werde ich die portable Version 3.2 von SharpDevelop nutzen.

Los geht’s

Zunächst sollten wir uns mit der aktuellen Version der SharpMap-Bibliothek eindecken. Unter „Downloads“ auf der Seite von SharpMap wird man schnell fündig. Am besten läd man sich den aktuellen Quellcode (ich benutze im folgenden das ChangeSet 81947). Es werden zwar auch bereits kompilierte DLLs zum Download angeboten – dabei fehlen jedoch einige nette Sachen wie der Namespace SharpMap.UI, in dem alle nützlichen GUI-Kartenwerkzeuge für Windows Forms zu finden sind (nämlich das MapImage-Control).

Deshalb ist das Motto: selber kompilieren! Ist ja auch mit SharpDevelop ohne weiteres möglich..

Zunächst entpacken wir die Sources und öffnen das mitgelieferte Visual Studio Projekt „SharpMap.VS2008.sln“ im Verzeichnis „Trunk“ in SharpDevelop. Dann erstellen wir die einzelnen Projekte „SharpMap.VS2008“, „SharpMap.Extensions.VS2008“ und „SharpMap.UI.VS2008“ einmal neu (Rechtsklick auf das Projekt -> Neukompilieren). In den Ordnern „Debug“ sollten nun in den entsprechenden Projekten im Dateisystem DLLs erzeugt worden sein.

Soviel der Vorarbeit – jetzts gehts an unseren GIS-Viewer. Nach dem Starten von SharpDevelop wird ein neues Projekt mit dem Namen „GSharpViewer“ angelegt:

G#.Viewer - Neues Projekt in SharpDevelop

Anschließend fügen bereits vorliegenden Standard-Referenzen des .NET 3.5 Frameworks die SharpMap-DLLs im.NET Assemblybrowser hinzu. Hier lädt man am besten alle DLLs im Verzeichnis „[SharpMap-Src]\Trunk\SharpMap.Extensions\bin\Debug\“ und zusätzlich noch die Datei „SharpMap.UI.dll“ aus „[SharpMap-Src]\Trunk\SharpMap.UI\bin\Debug\“.

G#.Viewer - Referenzieren der SharpMap-DLLs

Wenn alles glatt ging, sollte unter dem Reiter „Tools“ und „Benutzerdefinierte Komponenten“ folgende Auflistung zu finden sein:

GUI – Grundlegendes

Nun spielen wir ein bisschen mit dem Form-Designer und können mit einem Status Strip, einem Panel mit eingebettetem Tab Control (Dock = Fill) und einem Tool Strip schon das Grundgerüst per Drag & Drop zusammenklicken.

Die erste Tab Page des Tab Controls nennen wir in „tabMap“ und die zweite in „tabAttributes“ um.

Anschließend ziehen wir das SharpMap-Image-Control „MapImage“ in die Tab Page „tabMap“ und betten dieses auch in das übergeordnete Element mit (Dock = Fill) ein. Außerdem wird die Hintergrundfarbe des MapImage-Controls auf  „White Smoke“ gestellt und der SizeMode auf „AutoSize“. Danach fügen ich noch ein StatusStripLabel ein mit dem Platzhaltertext „Status“.

Was brauchen wir noch? Menu-Buttons! Also erstellen wir folgende Label-Buttons:

  • Laden
  • Pan
  • ZoomIn
  • ZoomOut
  • FullExtent
  • Info
G#.Viewer - Einfügen der Buttons

 

Zu guter Letzt benötigen wir noch ein DataGridView-Steuerelement („dgvAttributes“) für die Attributanzeige in der Tab Page „tabAttributes“.

G#.Viewer - Einfügen des DataGridViews

Dabei verwende ich für jedes Steuerelement immer ein Kürzel für den Typ und einen sprechenden Namen in englisch. Bsp: „btnLoad“ für den Laden-Button. Das steigert die Übersichtlichkeit beim Code-Lesen später.

Bislang lief ziemlich viel auf der GUI-Ebene und per Drag&Drop. Es ist schon erstaunlich wie viel man mittlerweile mit einer IDE erreichen kann ohne eine Zeile Code geschrieben zu haben. Das wird sich jedoch jetzt ändern. Wenn wir das Projekt im Debug-Modus laufen lassen, haben wir derzeit ja nur ein Windows-Fenster mit ein paar Buttons ohne Funktion. Und um die Funktionalitäten kümmern wir uns im nächsten Teil.

Das Visual Studio-Projekt ist hier als Download zu finden.