Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

Archiwum: 'Bazy danych' Kategorie

Google Suggest

Autor: Piotr Karpiuk o 19. maja 2016

Gdy wpisujemy jakąś frazę w wyszukiwarce Google, narzędzie stara się nam pomóc generując na bieżąco podpowiedzi. Pod spodem wykonuje się zlecenie HTTP GET w rodzaju:

http://suggestqueries.google.com/complete/search?client=firefox&hl=pl&q=fraza

gdzie fraza jest prefiksem naszego zapytania.
Przykładowo, dla frazy „warsza” otrzymamy wynik postaci:

["warsza",["warszawa","warszawa pogoda","warszawski koks","warszawianka","warszawa wschodnia",
"warszawa dzielnice","warszawa mapa","warszawska lala","warszawa modlin","warszawa centralna"]]

Wygląda na to, że nie ma żadnych ograniczeń na liczbę tego rodzaju wywołań, więc można łatwo wykorzystać ten mechanizm we własnej aplikacji webowej, albo pisać skrypty badające popularne zapytania na interesujący nas temat i wykonujące jakieś statystyki/raporty.
Przypuśćmy, że interesują mnie rozmaite rejestry (w znaczeniu: bazy danych) dostępne w internecie. Mogę się dowiedzieć, o jakie rejestry ludzie pytają badając możliwe autouzupełnienia dla frazy „rejestr xy” gdzie x i y to wszystkie możliwe kombinacje liter alfabetu. Poniżej raport, jaki w ten sposób otrzymałem.
Czytaj więcej »

Napisany w Bazy danych | 1 Komentarz »

OpenStreetMap: interaktywna mapa 3D

Autor: Piotr Karpiuk o 20. kwietnia 2016

Spośród obejrzanych różnych wizualizacji bazy danych OpenStreetMap, szczególne wrażenie zrobiła na mnie interaktywna wizualizacja 3D w przeglądarce wykonana przez firmę F4Map. Kliknij w poniższy obrazek, aby polatać sobie trochę nad Warszawą, lub innym wybranym przez siebie miejscem na świecie. Do poruszania się używamy klawiszy strzałek oraz PgUp/PgDown. Przeglądarka musi obsługiwać WebGL (większość już obsługuje).


Źródło: F4map.com

Napisany w Bazy danych, datavis, GIS, HTML5, WWW | Brak komentarzy »

Polski OpenStreetMap: struktura i zawartość

Autor: Piotr Karpiuk o 10. kwietnia 2016

OpenStreetMap to „wikipedia obiektów geograficznych” – baza praktycznych danych geograficznych rozwijana przez wolontariuszy na całym świecie, zbierających dane o swojej okolicy. Na pierwszy rzut oka OSM to po prostu mapa topograficzna, w dodatku niezbyt atrakcyjna w porównaniu z Google Maps czy Bing Maps. To jednak tylko złudzenie. OSM to baza danych, a mapa topograficzna jest tylko jedną z wielu możliwych wizualizacji, która – jak każda wizualizacja – uwypukla niektóre informacje pomijając inne.

Weźmy pod uwagę taki obiekt jak ławeczka w parku, pomijana na mapach topograficznych (nawet tych dokładnych). W OSM możemy się dowiedzieć czy ławeczka ma oparcie (znacznik backrest), ile osób może na niej usiąść (seats), z jakiego materiału jest wykonana (material), na jaki kolor jest pomalowana (colour), w którym kierunku jest skierowana (direction – azymut), czy jest zadaszona (covered), jaka firma się nią opiekuje (operator), a także zdjęcie (image), czy obok stoi kosz na śmieci (waste_basket), w którym roku została postawiona (start_date), itd.

Przykłady innych obiektów:

Żywopłot Wysokość (height), rodzaj liści (leaf_type), czy roślina całoroczna (leaf_cycle), jakiego rodzaju i gatunku (genus, species)
Schody Liczba schodków (step_count), czy ruchome (conveying), czy jest poręcz (handrail)
Winda Producent (brand), pojemność (capacity), czy towarowa (goods), czy wewnątrz budynku (indoor), między którymi piętrami (level, np. -1;0;1;2)
Droga Szerokość (width), liczba pasów (lanes), jakiego rodzaju nawierzchnia (surface), max. wysokość dla pojazdów (maxheight), czy jest chodnik i po której stronie (sidewalk, footway), czy jest oświetlenie (lit), stopień utwardzenia (tracktype), stopień spadku (incline), ograniczenia dostępu (access), czy mogą jeździć ciężarówki (hgv)
Toaleta czy publiczna (access), czy płatna (fee), w jakich godzinach czynna (opening_hours), czy mogą z niej korzystać kobiety/mężczyźni/niepełnosprawni (male, female, wheelchair), sposób spuszczania wody (toilets:disposal), czy jest woda pitna (drinking_water), czy jest miejsce do przewijania pieluch (diaper), czy jest papier toaletowy (toilets:paper_supplied), czy można umyć ręce (toilets:handwashing)
Kościół Religia i wyznanie (religion, denomination), godziny mszy (service_times), adres (addr:*), kontakt (phone, website), link do Wikipedii (wikipedia), data powstania (start_date), czy zabytek (historic), kolor dachu (roof:colour), wysokość (height), nazwisko architekta (architect)
Krawężnik Wysokość (czy można na niego wjechać samochodem, wózkiem inwalidzkim?)

Alternatywą dla mapy topograficznej są nietypowe mapy tematyczne. Można takie znaleźć na product.itoworld.com/map/main (np. które budynki mają w bazie przypisany adres, ulice z podziałem na ograniczenie prędkości itp.) Poniżej kilka przykładów z jeszcze innych źródeł:


Box Locator: biletomaty, skrzynki pocztowe, bankomaty, parkomaty, telefony, kontenery na śmieci

OpenCycleMap: ścieżki rowerowe

Lichtkarte: Oświetlenie ulic

osmtools.org/gniazda/bocian: Bocianie gniazda w Polsce

Czytaj więcej »

Tags:
Napisany w Bazy danych, datavis, GIS, HTML5, WWW | Brak komentarzy »

Państwowy Rejestr Granic: Punkty adresowe

Autor: Piotr Karpiuk o 29. marca 2016

Centralny Ośrodek Dokumentacji Geodezyjnej i Kartograficznej (CODGiK) w dziale Dane bez opłat udostępnia za darmo bazę punktów adresowych, dość często aktualizowaną (nawet co kilka dni).

Najważniejsza jest w niej tabela PunktAdresowy (przeszło 7 mln rekordów), o następującej strukturze (wymieniłem najciekawsze kolumny):

PunktAdresowy
wojewodztwo
powiat
gmina
miejscowosc
ulica
numerPorzadkowy numer budynku
kodPocztowy wypełniony w ok. 75% rekordów
status wartości: istniejacy (97,64%), prognozowany (1,9%), wTrakcieBudowy (0,46%)
gps współrzędne punktu na mapie (w układzie EPSG:2180)

W bazie jednak jest więcej. Każdy punkt adresowy zawiera dowiązania do rekordów w tabelach JednostkaAdministracyjna (kraj/województwo/powiat/gmina), Miejscowosc oraz Ulica. Struktura tych tabel jest następująca (pola wypełnione są w 100% chyba że napisano inaczej):

JednostkaAdministracyjna
nazwa
idTERYT kod TERC
poziom 1: państwo, 2: województwo, 3: powiat, 4: gmina
Miejscowosc
nazwa
idTERYT kod SIMC
gps współrzędne punktu na mapie, wypełnione w ok. 11% rekordów
Ulica
idTERYT kod ULIC
przedrostek1Czesc np. "pl.", "al."
przedrostek2Czesc np. "ks."
nazwaCzesc np. "Jerzego"
nazwaGlownaCzesc np. "Popiełuszki"
posList lista punktów GPS wyznaczających przebieg ulicy na mapie; wypełnione w ok. 6%

Ujęty w rekordach tabel JednostkaAdministracyjna i Miejscowosc podział administracyjny kraju możemy sobie wyobrazić jako drzewo (w korzeniu będzie rekord POLSKA, potem województwa, powiaty, gminy i miejscowości). Ten model nie rozciąga się jednak na ulice. Każda ulica w kraju jest reprezentowana w tabeli Ulica jako jeden obiekt. Jedna ulica może przebiegać przez kilka miejscowości (sąsiadujących ze sobą). Punkt adresowy oczywiście ma dowiązanie do jednej miejscowości i (zwykle) do jednej ulicy (na wsiach adres pocztowy często zawiera tylko nazwę miejscowości i numer domu).

Przetwarzanie bazy

Do pobrania ze strony CODGiK jest duży (ok. 700 MB), spakowany plik punkty_adr.zip zawierający 16 plików XML (dokładniej: GML) po jednym dla każdego województwa, po rozpakowaniu ok. 16 GB. Format XML dobrze się nadaje do udostępniania zbioru danych innym, ale gdyby ktoś chciał zaimportować dane do relacyjnej bazy danych, to może skorzystać z efektów mojej pracy. Napisałem program w Javie, który konwertuje pliki XML do jednego pliku bazy danych SQLite o objętości ok. 3 GB.

Program wywołujemy poleceniem

./run.sh KATALOG

Gdzie KATALOG to nazwa katalogu, w którym rozpakowaliśmy pliki XML. Wynik po kilkunastu minutach pojawia się w pliku PRG.db, który możemy eksplorować za pomocą standardowego klienta SQLite:

sqlite3 PRG.db

Tags:
Napisany w Bazy danych, Uncategorized | 1 Komentarz »

Państwowy Rejestr Nazw Geograficznych: nazwy miejscowości

Autor: Piotr Karpiuk o 14. grudnia 2015

Państwowy Rejestr Nazw Geograficzny (PRNG) jest do pobrania ze strony CODGiKu w formatach shapefile, XLS (MS Excel) lub GML. Składa się z dwóch części: nazwy miejscowości i nazwy obiektów fizjograficznych. Dzisiaj przyjrzymy się zawartości pliku z nazwami miejscowości. Mamy tam 124.801 rekordów, a ich struktura przedstawiona została poniżej.

Uwagi: Jeśli jakiejś kolumny nie wymieniono, to znaczy że jest pusta. Zawsze są podane współrzędne geograficzne punktu centralnego każdego obiektu.

Nazwa Typ % wypełnienia Uwagi Przykłady
idPRNG INT 100,00 unikalny identyfikator 57
nazwa_glowna TEXT 100,00 w mianowniku Abramowice Kościelne
rodzaj_obiektu TEXT 100,00
wieś 43097
część wsi 41938
przysiółek wsi 11698
część miasta 10230
osada 5125
kolonia wsi 4068
osada leśna 2404
kolonia 2190
leśniczówka 1319
miasto 919
osada wsi 787
część kolonii 280
osada leśna wsi 240
przysiółek 144
przysiółek osady 81
część osady 74
przysiółek kolonii 73
schronisko turystyczne 45
kolonia kolonii 29
osada osady 15
kolonia osady 14
osiedle 11
osiedle wsi 9
część przysiółka 5
osada kolonii 4
osada kolejowa 1
osada młyńska 1
obiekt_nadrzedny TEXT 65,50 miejscowość nadrzędna Sulejów
funkcja_administracyjna TEXT 1,86
siedziba władz gminy wiejskiej 1405
siedziba władz gminy miejsko-wiejskiej 520
siedziba władz powiatu 269
siedziba władz gminy miejskiej 62
siedziba władz miasta na prawach powiatu 47
siedziba wojewody 14
miasto stołeczne/siedziba władz powiatu 1
siedziba sejmiku województwa 1
siedziba wojewody/siedziba sejmiku województwa/siedziba władz miasta na prawach powiatu 1
siedziba władz powiatu/siedziba sejmiku województwa 1
siedziba władz powiatu/siedziba władz miasta na prawach powiatu 1
dopelniacz TEXT 99,99 -wic -nych
przymiotnik TEXT 35,27 abramowicki
uwagi TEXT 10,90 do 2006 – wieś
zrodlo TEXT 99,99 571 różnych wartości Mapa topograficzna w skali 1:10000
element_rozrozniajacy TEXT 63,56 „Część nazwy niebędąca elementem rodzajowym; w przypadku nazw obiektów fizjograficznych mających na początku element rodzajowy jest podawany wyłącznie stojący za nim element rozróżniający, w pozostałych przypadkach jest powtórzona cała nazwa główna podana w mianowniku”
element_rodzajowy TEXT 4,09 „Część nazwy będąca rzeczownikiem pospolitym określającym nazwany obiekt geograficzny przez wskazanie jego cech; podawany wyłącznie wtedy, gdy znajduje się na początku nazwy obiektu fizjograficznego”

Osiedle 3213
Kolonia 1624
Gajówka 113
Leśniczówka 81
Osada 42
Wieś 13
Dzielnica 5
Schronisko 4
Nadleśnictwo 2
Folwark 1
gpslat, gpslon TEXT 100,00 Współrzędne GPS 51°21’10”
y, x REAL 100,00 Współrzędne EPSG:2180 387690.69
data_modyfikacji DATE 100,00 YYYY-MM-DD 2005-03-02
system_zewnetrzny TEXT 81,30 Słowo „TERYT” TERYT
identyfikator_zewnetrzny TEXT 81,30 Kod TERYT/SIMC (7 cyfr) 0712344
identyfikator_iip TEXT 100,00 unikalny identyfikator 00000000-0000-0000-0000-000000106599
status_nazwy TEXT 100,00 „Stopień wiarygodności, jaki można przypisać danej nazwie głównej”

urzędowa 101464
niestandaryzowana 23337
urzędowa
nazwa_dodatkowa TEXT 1,86 Bajdlówka
kod_jezyka_nazwy_dodatkowej TEXT 1,55
PL 754
CBS 725
DEU 352
LTU 30
BLR 26
PL/ 15
/ 11
SLA 9
/PL 4
CBS/ 2
/CBS 1
PL/CBS 1
PL
jezyk_nazwy_dodatkowej TEXT 1,55
polski 754
kaszubski 725
niemiecki 352
litewski 30
białoruski 26
polski/ 15
/ 11
łemkowski 9
/polski 4
kaszubski/ 2
/kaszubski 1
polski/kaszubski 1
polski
latynizacja_nazwy_dodatkowej TEXT 0,06 Antonovo
nazwa_historyczna TEXT 1,85 Bajerka
nazwa oboczna TEXT 5,52 „Nazwa lub nazwy oboczne funkcjonujące obecnie w języku polskim, inne niż przyjęta nazwa główna danego obiektu, podane w mianowniku” Banasiowa Rola
uwagi_nazw_dodatkowych TEXT 0,23 do 1006 r.
uwagi_nazw_historycznych TEXT 1,83 do 2002 r.
uwagi_nazw_obocznych TEXT 0,05 dawna gajówka
wojewodztwo TEXT 100,00 nazwa województwa podkarpackie
powiat TEXT 100,00 nazwa powiatu leżajski
gmina TEXT 100,00 nazwa gminy Leżajsk-gmina miejska
identyfikator_jedn._podz._teryt._kraju TEXT 2,49 Kod TERYT/TERC gminy (7 cyfr) 0616045
data_wprowadzenia DATE 100,00 Data wprowadzenia do PRNG: YYYY-MM-DD 2004-04-07
przestrzen_nazw TEXT 100,00 Zawsze „PL.PZGiK.204.PRNG” PL.PZGiK.204.PRNG

Tags:
Napisany w Bazy danych, GIS | Brak komentarzy »