SQL: Przykładowe dane do typu GEOGRAPHY

3-gru-2016

Typ danych pozwalający na zapisywanie w bazie danych SQL informacji o współrzędnych geograficznych jest dostępny już od wersji 2008. Oprócz całego zakresu funkcjonalności z jakiego można korzystać pracując z danymi geograficznymi, typ ten ma jeszcze to do siebie, że jest… ładny! Rzeczywiście podczas uruchamiania zapytania zwracającego dane typu GEOGRAPHY wyświetlana jest dodatkowa zakładka „Spatial results”, która pozwala zobaczyć mapy w postaci graficznej.

Ot np. oto wynik zapytania:

SELECT * FROM dbo.World

World

A to następny przykład:

SELECT * FROM dbo.World WHERE COUNTRY = 'Poland’

Poland

Ogólnie rzecz biorąc kiedy tylko posiadasz dane geograficzne w swojej bazie to zabawa może być na prawdę przednia! Ale jest właśnie ten jeden warunek – trzeba mieć dane geograficzne. Jeśli dobrze poszukać w Internecie to mapy do pobrania i samodzielnej zabawy znajdzie się tu i tam, ale najczęściej są one publikowane w postaci plików shp. Niestety SQL tego formatu nie rozumie. Mapy należałoby przenieść do formatu GML (czyli geograficzny XML), WKT (czyli Well Known Text) lub do  formatu binarnego.

Ja skorzystałem z map dostępnych pod adresem: http://www.vdstech.com/world-data.aspx

Następnie przerobiłem program znany jako ESRI Shapefile Reader aktualnie w wersji Catfood.Shapefile 1.51 dostępny na codeplex: http://shapefile.codeplex.com/ Przeróbka polegała na tym, że czytając plik shp bardziej niż na wyświetlaniu danych, zależało mi na zapisywaniu ich do pliku tak, aby następnie wygenerować polecenie INSERT, które definicję mapy zapisze w tabeli na serwerze SQL,

Mając tabelę można już zacząć zabawę. Gotowy plik z kodem tworzącym odpowiednią tabelę i wypełniającą ją danymi, które widać na powyższych ilustracjach można teraz pobrać z tego bloga: skrypt tworzący tabelę dbo. world zawierającą mapę polityczną świata.

Komentarze:

  1. Gość napisał,

    Te mapy wyglądają bardzo ładnie, ale nie posiadają żadnych szczegółów. Im będzie więcej detali, tym rozmiar bazy danych będzie się zwiększać. Czy w takim razie opłacalne będzie przechowywanie w niej map o szczegółowości podobnej do map np. topograficznych? No bo jeżeli umieszczenie takich map dotyczących chociażby mojego województwa pomorskiego zaowocuje rozmiarem bazy liczonym w terabajtach, to takie podejście chyba nie ma sensu. A może są jakieś konkretne typy map, które zwykle przechowuje się w ten sposób?

  2. Rafał Kraik napisał,

    Cześć
    To co pokazałem w tym wpisie to tylko trochę „ładne demo”. Zazwyczaj w bazie przechowujesz tylko punkty (np. lokalizacja sklepu), wielokąty (obszar dzialki) albo krzywe (np. trasa samochodu). Podczas prezentacji nakładasz swoje punkty na BING maps (jeśli korzystasz z BING maps). Można to zrobić w aplikacji .NET lub raporcie generowanym w Reporting Services, co jest znacznie prostsze

  3. Gość napisał,

    Rozumiem, dzięki za wyjaśnienie.

Autor: Rafał Kraik