SM-07-LAB-WIKI
From Studia Informatyczne
Spis treści |
Temat ćwiczenia
Stworzenie biblioteki służącej do wczytywania danych z plików MIF, SHP i ich konwersji do postaci relacyjnej.
Wymagania
Znajomość SQL-a.
Znajomość sposobu odczytywania plików w języku C#.
Ćwiczenie
Utworzenie modułu konwersji danych przestrzennych
Celem ćwiczenia jest zaprezentowanie studentom metod konwersji formatów przechowywania danych geograficznych MIF jak i SHP do modelu relacyjnego.
Tworzona aplikacja musi być w pełni funkcjonalna, a także przeznaczona na urządzenia mobilne (PocketPC) i korzystać z bibliotek łączonych dynamicznie (dll). Dla każdego formatu pliku powinna być stworzona osobna biblioteka z zestawem klas odpowiedzialny za jego konwersję.
W celu wykonania powyższej aplikacji należy w pierwszej kolejności stworzyć nową bazę danych ze schematem pokazanym na rysunku 1.
Proces tworzenia nowej bazy danych na urządzenia mobilne z wykorzystaniem technologii Microsoft SQL Server Mobile Edition, jak i tworzenie nowego schematu relacji zostały opisane w poprzednich ćwiczeniach. Przejdźmy do krótkiej charakterystyki wspomnianego schematu relacji. Składa się on z następujących tabel:
- Punkty
- id_punktu // identyfikator punktu, klucz podstawowy relacji
- x // współrzędna x
- y // współrzędna y
- poziom // współrzędna z
- typ_punktu
- Krawędzie
- id_krawedzi // identyfikator krawędzi, klucz podstawowy relacji
- id_punktu_pocz // klucz obcy wskazujący na relację Punkty
- id_punktu_konc // klucz obcy wskazujący relację Punkty
- kierunek // podawany w stopniach
- długość // odległość euklidesowa początku i końca
- typ_krawedzi
- Miejsca
- id_miejsca // identyfikator miejsca, klucz podstawowy relacji
- id_krawedzi // klucz obcy wskazujący relację Krawędzie
- przesunięcie // minimalna odległość pomiędzy miejscem a najbliższą krawędzią
- typ_miejsca
- opis
Kolejnym krokiem tworzenia aplikacji jest przygotowanie bibliotek dla każdego z formatów. W tym celu po uruchomieniu środowiska Microsoft Visual Studio 2005 tworzymy nowy projekt wybierając z menu File -> New -> Project, a następnie jako Projekt Type wskazujemy Smart Device -> Pocket PC 2003 -> Class Library (Rysunek 2).
Po utworzeniu biblioteki niezbędne jest jej dodanie do tworzonej aplikacji.
Dodanie biblioteki dll do utworzonej aplikacji dla urządzenia Pocket PC dokonujemy poprzez wskazanie folderu References w gałęzi projektu w oknie Solution Explorer i wybranie z menu kontekstowego opcji Add Reference (Rysunek 3).
W wyświetlonym oknie dialogowym przechodzimy do zakładki Browse, a następnie wskazujemy utworzoną bibliotekę dll (Rysunek 4).
Tworzenie biblioteki łączonej dynamicznej.
Aby możliwe było odwoływanie się do bazy danych z poziomu kodu źródłowego, do utworzonego projektu Class Library niezbędne jest dodanie odwołania do biblioteki System.Data.SqlServerCe.dll znajdującej się w folderze Microsoft Visual Studio 8\Common7\IDE (dokonujemy tego w podobny sposób jak w przypadku dodawania referencji do utworzonych bibliotek).
Tworzenie bazy danych.
Klasa SlqCeEngine umożliwia zarządzanie bazą danych (jej tworzenie, modyfikowanie i usuwanie) na urządzeniu mobilnym:
SqlCeEngine engine = new SqlCeEngine("Data Source='Test.sdf';"); if (!(File.Exists("Test.sdf"))) engine.CreateDatabase();
W konstruktorze klasy podajemy nazwę pliku mobilnej bazy danych.
Nawiązanie połączenia z bazą danych.
Nawiązanie połączenia z bazą danych możliwe jest dzięki klasie SqlCeConnection, w konstruktorze której podajemy adres bazy danych wykorzystując zdefiniowany wcześniej obiekt engine lub też podając adres istniejącej bazy danych:
SqlCeConnection connection = new SqlCeConnection(engine.LocalConnectionString); connection.Open();
Wykonywanie poleceń.
Aby wykonać polecenie SQL wykorzystujemy obiekt klasy SqlCeCommand.
Polecenie SQL definiujemy we własności CommandText, a następnie wywołujemy jedną z trzech metod:
- ExecuteScalar() – zwraca pojedynczą wartość liczbową (np wynik funkcji COUNT, MAX itp.),
- ExecuteQuery() – zwraca zbiór krotek z bazy danych spełniających warunek klauzuli WHERE zapytania,
- ExecuteNonQuery() – wykonuje polecenie modyfikacji bazy danych (DML) takie jak: INSERT, DELETE, UPDATE,
- ExecuteReader() – zwraca kursor iterujący po źródle danych. Wymagane jest otwarte połączenie z bazą danych, a także zaszycie kodu obsługi zwracanych danych w kodzie aplikacji.
SqlCeCommand command = connection.CreateCommand(); command.CommandText = "SELECT count(*) FROM products"; int result = (System.Int32)(command.ExecuteScalar());
Po wykonaniu operacji na bazie danych należy pamiętać o zamknięciu połączenia z bazą danych (metoda Close() obiektu klasy SqlCeConnection) w celu zwolnienia zajmowanych zasobów.
Zadanie
Stworzyć aplikację konwertującą przestrzenne dane geograficzne zapisane w formatach MIF oraz SHP do postaci relacyjnej – informacje o obiektach geograficznych powinny być zapisane w bazie danych (Microsoft SQL Server Mobile Edition) wg podanego powyżej schematu relacji. Aplikacja powinna wykorzystywać biblioteki dll – po jednej dla każdego formatu (MIF oraz SHP).